![[TIPS] AMIとそれに紐づくスナップショットをBash Scriptでまとめて削除する](https://devio2023-media.developers.io/wp-content/uploads/2018/11/eyecatch_amazon-ec2_1200x630.jpeg)
[TIPS] AMIとそれに紐づくスナップショットをBash Scriptでまとめて削除する
小ネタです。
今回はAMI削除時に、それに紐づくEBSスナップショットをまとめて削除するためのTIPSを紹介します。
やりたいこと
作成したAMIを綺麗に削除したい場合、単純にAMIを登録解除するだけでは関連するsnapshotなどが残り続ける場合があります。
この記事では、指定したAMIをスナップショット含め削除してくれる簡易なBash Scriptを紹介します。
スクリプト
以下が紹介するスクリプトです。事前にjq
のインストールが必要です。
#!/bin/bash -e | |
# usage: bash delete-ami-completely.sh ami-xxxxxxxx ami-yyyyyyyy | |
AMI_IDS=$@ | |
for AMI_ID in $AMI_IDS;do | |
SNAPSHOT_IDS=`aws ec2 describe-images --image-ids=$AMI_ID --query "Images[].BlockDeviceMappings[].Ebs.[SnapshotId]" --output text` | |
echo "deregister image $AMI_ID" | |
aws ec2 deregister-image --image-id=$AMI_ID | |
for SNAPSHOT_ID in $SNAPSHOT_IDS;do | |
echo "delete snapshot $SNAPSHOT_ID" | |
aws ec2 delete-snapshot --snapshot-id=$SNAPSHOT_ID | |
done | |
done |
複数のAMI IDを指定するとスナップショット含めてまとめて削除してくれます。
おまけ
上記スクリプトの応用として、弊社が提供している自動実行サービスのバックアップをまとめて削除するスクリプトを紹介します。ジョブ名を指定すると、そのジョブが作成したAMIバックアップ全てをスナップショットも含めて削除できます。insightwatchへの移行時などにご利用ください。
#!/bin/bash -e | |
# usage: sh delete-cm-backups.sh cm-DailyBackupNoreboot | |
BACKUP_KEY='cm-Job' | |
BACKUP_VAL=$1 | |
AMI_IDS=`aws ec2 describe-images --filters "Name=tag:${BACKUP_KEY},Values=${BACKUP_VAL}" \ | |
"Name=state,Values=available" | jq -r .Images[].ImageId` | |
for AMI_ID in $AMI_IDS;do | |
SNAPSHOT_IDS=`aws ec2 describe-images --image-ids=$AMI_ID | jq -r .Images[].BlockDeviceMappings[].Ebs.SnapshotId` | |
echo "deregister image $AMI_ID" | |
aws ec2 deregister-image --image-id=$AMI_ID | |
for SNAPSHOT_ID in $SNAPSHOT_IDS;do | |
echo "delete snapshot $SNAPSHOT_ID" | |
aws ec2 delete-snapshot --snapshot-id=$SNAPSHOT_ID | |
done | |
done |
自動実行サービスによるAMIバックアップジョブでは、ジョブの対象となるEC2インスタンスを、cm-DailyBackupNoreboot:true
のような指定のタグが付与されているかによって識別します。そして作成されたAMIバックアップには、EC2インスタンスのタグに対応する形でcm-Job:cm-DailyBackupNoreboot
のようなタグが付与されます。
このため、自動実行によって作成されたジョブを確認したい場合は、cm-Job
をタグキーに持ち、指定のジョブ名を値に持つAMIを検索することで簡単に特定することができます。AMIバックアップの削除に限らず、バックアップ件数の調査を行いたい場合などにも活用できます。
関連記事
本記事に限らず、近い目的で様々な記事が過去に作成されています。ユースケースに合わせて、より適したアプローチをご選択ください。
AMI削除時にスナップショットも自動で削除するCloudWatch Events AMIの登録解除をイベントフックして、自動的にLambdaから関連するスナップショットを削除する仕組みを作っています。
[EC2] 不要なAMIを一括で削除したい 大規模な数のAMIをまとめて削除するため、事前に対象をCSVに出力し、確認後にまとめて削除する手順を取っています。