コーヒーが好きな木谷映見です。今日はスタバのホワイトモカを飲みました。
EC2を利用していると、定期バックアップ等でAMIやスナップショットが溜まります。
これらをAWS CLIで一覧にして取得します。
スナップショットのSnapshotIdの取得
aws ec2 describe-snapshots --owner-ids <対象AWSアカウントID>
を実行すると、以下のようにスナップショットの詳細がJSON形式でずらずら出てきます。この情報の中から--query
オプションで必要な情報(今回はSnapshotId
やStartTime
)を抜き出していきます。
{ "Snapshots": [ { "Description": "20220329_snapshottest5", "Encrypted": false, "OwnerId": "対象AWSアカウントID", "Progress": "100%", "SnapshotId": "snap-xxxxxxxxxxxxxxxxx", "StartTime": "2022-03-29T01:36:28.912000+00:00", "State": "completed", "VolumeId": "vol-xxxxxxxxxxxxxxxxx", "VolumeSize": 8, "Tags": [ { "Key": "Name", "Value": "20220329_snapshottest5" } ], "StorageTier": "standard" }, : :
対象AWSアカウント内のSnapshotIdの一覧
aws ec2 describe-snapshots \ --owner-ids 対象AWSアカウントID \ --query 'Snapshots[].{Id1:SnapshotId}' \ --output text
出力例
snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx
SnapshotIdと時間の一覧
aws ec2 describe-snapshots \ --owner-ids 対象AWSアカウントID \ --query 'Snapshots[].{Id1:SnapshotId, id2:StartTime}' \ --output text
出力例
※時間はUTCであることにご注意ください。
snap-xxxxxxxxxxxxxxxxx 2022-03-29T01:36:28.912000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-29T01:35:10.057000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-29T01:35:56.022000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-29T01:36:11.919000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-29T01:34:38.385000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-22T13:40:31.227000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-07T07:26:55.056000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-22T13:41:16.133000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-07T07:04:39.160000+00:00
特定日次より前に作成されたsnapshotのSnapshotIdと時間の一覧
aws ec2 describe-snapshots \ --owner-ids 対象AWSアカウントID \ --query 'Snapshots[?StartTime<=`2022-03-28T01:36:28.912000+00:00`].{Id1:SnapshotId, id2:StartTime}' \ --output text
出力例
snap-xxxxxxxxxxxxxxxxx 2022-03-22T13:40:31.227000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-07T07:26:55.056000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-22T13:41:16.133000+00:00 snap-xxxxxxxxxxxxxxxxx 2022-03-07T07:04:39.160000+00:00
おまけ:CloudShellでjqコマンドを使う
CloudShellにはデフォルトでjqコマンドがインストールされているので、jqを使って取得することもできます。
aws ec2 describe-snapshots \ --owner-ids 対象AWSアカウントID|jq -r '.Snapshots[]|@text "\(.SnapshotId)"'
出力例
snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx snap-xxxxxxxxxxxxxxxxx
AMIのImageId取得
aws ec2 describe-images --owners <対象AWSアカウントID>
を実行すると、以下のようにAMIの詳細がJSON形式でずらずら出てきます。この情報の中から--query
オプションで必要な情報(今回はImageId
やCreationDate
)を抜き出していきます。
{ "Images": [ { "Architecture": "x86_64", "CreationDate": "2022-03-22T13:41:15.000Z", "ImageId": "ami-xxxxxxxxxxxxxxxxx", "ImageLocation": "対象AWSアカウントID/ami_test1", "ImageType": "machine", "Public": false, "OwnerId": "対象AWSアカウントID", "PlatformDetails": "Linux/UNIX", "UsageOperation": "RunInstances", "State": "available", "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": true, "SnapshotId": "snap-xxxxxxxxxxxxxxxxx", "VolumeSize": 8, "VolumeType": "gp2", "Encrypted": false } } ], "Description": "ami_test1", "EnaSupport": true, "Hypervisor": "xen", "Name": "ami_test1", "RootDeviceName": "/dev/xvda", "RootDeviceType": "ebs", "SriovNetSupport": "simple", "Tags": [ { "Key": "Name", "Value": "ami_test1" } ], "VirtualizationType": "hvm" }, : :
対象AWSアカウント内のImageIdの一覧
aws ec2 describe-images \ --owners 対象AWSアカウントID \ --query 'Images[].{Id1:ImageId}' \ --output text
出力例
ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx
ImageIdと時間の一覧
※時間はUTCであることにご注意ください。
aws ec2 describe-images \ --owners 対象AWSアカウントID \ --query 'Images[].{Id1:ImageId,id2:CreationDate}' \ --output text
出力例
ami-xxxxxxxxxxxxxxxxx 2022-03-22T13:41:15.000Z ami-xxxxxxxxxxxxxxxxx 2022-03-29T09:00:32.000Z ami-xxxxxxxxxxxxxxxxx 2022-03-22T13:40:30.000Z ami-xxxxxxxxxxxxxxxxx 2022-03-29T08:57:11.000Z ami-xxxxxxxxxxxxxxxxx 2022-03-29T08:59:29.000Z
特定日次より前に作成されたAMIのImageIdと時間の一覧
aws ec2 describe-images \ --owners 対象AWSアカウントID \ --query 'Images[?CreationDate<=`2022-03-28T08:59:29.000Z`].{Id1:ImageId,id2:CreationDate}' \ --output text
出力例
ami-xxxxxxxxxxxxxxxxx 2022-03-22T13:41:15.000Z ami-xxxxxxxxxxxxxxxxx 2022-03-22T13:40:30.000Z
おまけ:CloudShellでjqコマンドを使う
CloudShellにはデフォルトでjqコマンドがインストールされているので、jqを使って取得することもできます。
aws ec2 describe-images \ --owners 対象AWSアカウントID|jq -r '.Images[]|@text "\(.ImageId)"'
出力例
ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx ami-xxxxxxxxxxxxxxxxx
おわりに
--query
オプションを工夫することでほしい値がすっきり取得できます。
「while read ~ done」の構文を使って該当のリソースを削除したり、タグ付けしたりする際便利に使えますので、ほかにもいろいろな値を取得してみてください。
--query
オプションについては以下の当社ブログをぜひご参照ください。
blog.serverworks.co.jp
emi kitani(執筆記事の一覧)
AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。