こんにちは。スプラシアのSREに所属している井上です。
以前こちらの記事を書きました。その中で「AWS CLIで一括で出力できるようにコマンドを使用している」と記述したのですが、今回はそのコマンドを紹介したいと思います。
はじめに
今回ご紹介するのは以下のリソース一覧を取得するコマンドです。
コマンドだけ知りたいよ!という方はそれぞれ目次よりご確認ください。
前提条件
ご自身の環境で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に出力します。取得する情報は以下です。
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に出力します。取得する情報は以下です。
  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に出力します。取得する情報は以下です。
 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に出力します。取得する情報は以下です。
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に出力します。取得する情報は以下です。
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に出力します。取得する情報は以下です。
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





