コーヒーが好きな木谷映見です。今日はスタバのホワイトモカを飲みました。
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冠。