目次
1. はじめに
どうも皆さんこんにちは。こんばんは。おやすみなさい。
インスタンス削除に伴って紐づくリソースを削除する際にAMIの登録解除がありますよね。
今回私が対応した時にAMIが三桁個あってAMI確認→紐づいているスナップショット確認→AMI登録解除&スナップショット削除の流れがコンソールでやるのが面倒くさすぎたのでシェルを作りました。
作った当初は覚えてても自分でも忘れるので、備忘の念も込めてここに記載します。
同じような人の役に立てれば、なお良し!!!!!
じゃ、本題です。
2. 前提条件
今回は引数指定でのシェルを採用しているので、事前に解除したいAMIをリストアップしてIDを認識しておく必要が有ります。
対話形式型ではないので一回打つと処理が走ってしまいますので注意が必要です。
(削除するなら削除対象のリストアップは事前にしていると思いますが、、、、、)
!!!!!!!削除作業系は削除前の確認が重要です!!!!!!!
環境ですが、今回はCloudshellにシェルをアップロードして権限付与し実行する流れです。
3. シェル
今回作成したシェルです。
#!/bin/bash
# AMI ID を引数で指定
AMI_ID=$1
if [ -z "$AMI_ID" ]; then
echo "使用方法: $0 <AMI_ID>"
exit 1
fi
echo "指定された AMI: $AMI_ID"
# AMI に紐づくスナップショットを取得
SNAPSHOT_IDS=$(aws ec2 describe-images \
--image-ids "$AMI_ID" \
--query "Images[].BlockDeviceMappings[].Ebs.SnapshotId" \
--output text)
if [ -z "$SNAPSHOT_IDS" ]; then
echo "AMI $AMI_ID に紐づくスナップショットはありません。"
else
echo "AMI に紐づくスナップショット: $SNAPSHOT_IDS"
fi
# AMI を解除
echo "AMI $AMI_ID を解除します..."
aws ec2 deregister-image --image-id "$AMI_ID"
echo "AMI $AMI_ID を解除しました。"
# スナップショットを削除
for SNAPSHOT_ID in $SNAPSHOT_IDS; do
echo "スナップショット $SNAPSHOT_ID を削除します..."
aws ec2 delete-snapshot --snapshot-id "$SNAPSHOT_ID"
echo "スナップショット $SNAPSHOT_ID を削除しました。"
done
echo "AMI および紐づくスナップショットの削除が完了しました。"
上記をコピーして適当に保存してください。
名前は今回「delete_ami_snapshots.sh」にしています。
Cloudshellに保存したものをアップロードしたあとで権限の付与をしてください。
※ls -alとかで権限確認してね!!
chmod +x delete_ami_snapshots.sh
シェルを実行します。
以下のような指定方法です。
./delete_ami_snapshots.sh <amiID>
./delete_ami_snapshots.sh ami-123456789abc
改行コードで引っかかる場合は以下を打ってください。
sed -i 's/\r$//' <改行コード変えたいシェルとかの名前>
4. まとめ
実行する際は改めて登録解除するAMIIDが間違っていないかをくれぐれもご確認ください。
削除作業は慎重に行いましょう。
それではどうぞご安全に!!!!!!!!!!!!!!!