Take a “new step” Achieved by Value Engineering tech.sprasia.co.jp

AWS CLIを利用してリソース一覧をCSV出力する

こんにちは。スプラシアのSREに所属している井上です。
以前こちらの記事を書きました。その中で「AWS CLIで一括で出力できるようにコマンドを使用している」と記述したのですが、今回はそのコマンドを紹介したいと思います。

はじめに

今回ご紹介するのは以下のリソース一覧を取得するコマンドです。

  • AMI
  • スナップショット
  • EC2インスタンス
  • Application Load Balancer
  • コマンドだけ知りたいよ!という方はそれぞれ目次よりご確認ください。

    目次

    前提条件

    ご自身の環境でAWS CLIが使用できる状態になっていることが前提で進めていきます。
    AWS CLIのインストールや設定手順については公式サイトをご確認ください。

    ちなみに私は以下の環境で実行しています。

    Ubuntu 22.04.1
    aws-cli 1.22.34
    Python 3.10.6
    jq-1.6

    aws configの内容

    [default]
    region = ap-northeast-1
    output = text

    AMI

    すべてのAMIを取得

    アカウント内にあるすべてのAMIを一覧で取得してCSVに出力します。取得する情報は以下です。

  • AMI ID
  • 作成日
  • Nameタグの値
  • Projectタグの値
  • aws ec2 describe-images --owners アカウントID --query 'Images[].{
    ImageId:ImageId,
    CreationDate:CreationDate,
    Name:Tags[?Key==`Name`]|[0].Value,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Nameタグ","ImageId","Project","作成日"],
    ( .[] | [.Name, .ImageId, .Project, .CreationDate]) | @csv' > ami.csv

    ライフサイクルマネージャー以外で作成されたAMIを取得

    アカウント内にあるすべてのAMIからライフサイクルマネージャー以外で作成されたAMIを一覧で取得してCSVに出力します。取得する情報は以下です。

  • AMI ID
  • 作成日
  • Nameタグの値
  • Projectタグの値
  • aws ec2 describe-images --owners アカウントID --query 'Images[?!not_null(Tags[?Key == `dlm:managed`].Value)].{
    ImageId:ImageId,
    CreationDate:CreationDate,
    Name:Tags[?Key==`Name`]|[0].Value,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Nameタグ","ImageId","Project","作成日"],
    ( .[] | [.Name, .ImageId, .Project, .CreationDate]) | @csv' > ami_notdlm.csv

    スナップショット

    すべてのスナップショットを取得

    アカウント内にあるすべてのスナップショットを一覧で取得してCSVに出力します。取得する情報は以下です。

  • スナップショット ID
  • ボリューム ID
  • ボリュームサイズ
  • 進行状況
  • 開始日
  • Nameタグの値
  • Projectタグの値
  • aws ec2 describe-snapshots --owners アカウントID --query 'Snapshots[].{
    SnapshotId:SnapshotId,
    VolumeId:VolumeId,
    VolumeSize: VolumeSize,
    State:State,
    StartTime:StartTime,
    Description:Description
    Name:Tags[?Key==`Name`]|[0].Value,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Nameタグ","SnapshotId","VolumeId","VolumeSize","Project","Description","StartTime"],
    ( .[] | [.Name, .SnapshotId, .VolumeId ,.VolumeSize ,.Project ,.Description ,.StartTime]) | @csv' > snapshot.csv

    ライフサイクルマネージャー以外で作成されたスナップショットを取得

    アカウント内にあるすべてのスナップショットからライフサイクルマネージャー以外で作成されたスナップショットを一覧で取得してCSVに出力します。取得する情報は以下です。

  • スナップショット ID
  • ボリューム ID
  • ボリュームサイズ
  • 進行状況
  • 開始日
  • Nameタグの値
  • Projectタグの値
  • aws ec2 describe-snapshots --owners アカウントID --query 'Snapshots[?!not_null(Tags[?Key == `dlm:managed`].Value)].{
    SnapshotId:SnapshotId,
    VolumeId:VolumeId,
    VolumeSize: VolumeSize,
    State:State,
    StartTime:StartTime,
    Description:Description
    Name:Tags[?Key==`Name`]|[0].Value,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Nameタグ","SnapshotId","VolumeId","VolumeSize","Project","Description","StartTime"],
    ( .[] | [.Name, .SnapshotId, .VolumeId ,.VolumeSize ,.Project ,.Description ,.StartTime]) | @csv' > snapshot_notdlm.csv

    EC2インスタンス

    アカウント内にあるすべてのEC2インスタンスを一覧で取得してCSVに出力します。取得する情報は以下です。

  • インスタンス ID
  • インスタンスタイプ
  • インスタンスの状態
  • Nameタグの値
  • Projectタグの値
  • aws ec2 describe-instances --query 'Reservations[].Instances[].{
    InstanceId:InstanceId,
    InstanceType:InstanceType,
    State:State.Name,
    Name:Tags[?Key==`Name`]|[0].Value,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Nameタグ","インスタンスID","インスタンスタイプ","Project","インスタンスの状態"],
    ( .[] | [.Name, .InstanceId, .InstanceType, .Project, .State]) | @csv' > ec2.csv

    Application Load Balancer

    アカウント内にあるすべてのALBを一覧で取得してCSVに出力します。取得する情報は以下です。

  • ロードバランサー名
  • DNS名
  • VPC
  • 作成日
  • Projectタグの値
  • aws elbv2 describe-load-balancers --query 'LoadBalancers[].{
    LoadBalancerName:LoadBalancerName,
    DNSName:DNSName,
    VpcId:VpcId,
    CreatedTime:CreatedTime,
    Project:Tags[?Key==`Project`]|[0].Value
    }' --output json | jq -r '
    ["Name","DNSName","Project","VpcId","作成日"],
    ( .[] | [.LoadBalancerName, .DNSName, .Project, .VpcId, .CreatedTime]) | @csv' > alb.csv

    おわりに

    他にも使用しているコマンドはありますが、抜粋して紹介しました。
    こちらで使用している以外にもさまざまなオプションが使えるので、興味があれば公式リファレンスをご確認ください。
    AWS CLI Command Reference

    関連カテゴリ 最新記事一覧