[TIPS] AMIとそれに紐づくスナップショットをBash Scriptでまとめて削除する

小ネタです。

今回はAMI削除時に、それに紐づくEBSスナップショットをまとめて削除するためのTIPSを紹介します。

やりたいこと

作成したAMIを綺麗に削除したい場合、単純にAMIを登録解除するだけでは関連するsnapshotなどが残り続ける場合があります

この記事では、指定したAMIをスナップショット含め削除してくれる簡易なBash Scriptを紹介します。

スクリプト

以下が紹介するスクリプトです。事前にjqのインストールが必要です。

複数のAMI IDを指定するとスナップショット含めてまとめて削除してくれます。

おまけ

上記スクリプトの応用として、弊社が提供している自動実行サービスのバックアップをまとめて削除するスクリプトを紹介します。ジョブ名を指定すると、そのジョブが作成したAMIバックアップ全てをスナップショットも含めて削除できます。insightwatchへの移行時などにご利用ください。

自動実行サービスによるAMIバックアップジョブでは、ジョブの対象となるEC2インスタンスを、cm-DailyBackupNoreboot:trueのような指定のタグが付与されているかによって識別します。そして作成されたAMIバックアップには、EC2インスタンスのタグに対応する形でcm-Job:cm-DailyBackupNorebootのようなタグが付与されます。

このため、自動実行によって作成されたジョブを確認したい場合は、cm-Jobをタグキーに持ち、指定のジョブ名を値に持つAMIを検索することで簡単に特定することができます。AMIバックアップの削除に限らず、バックアップ件数の調査を行いたい場合などにも活用できます。

関連記事

本記事に限らず、近い目的で様々な記事が過去に作成されています。ユースケースに合わせて、より適したアプローチをご選択ください。

AMI削除時にスナップショットも自動で削除するCloudWatch Events
AMIの登録解除をイベントフックして、自動的にLambdaから関連するスナップショットを削除する仕組みを作っています。

[EC2] 不要なAMIを一括で削除したい
大規模な数のAMIをまとめて削除するため、事前に対象をCSVに出力し、確認後にまとめて削除する手順を取っています。