AMIの「ごみ箱」を使うときはEBSスナップショットの「ごみ箱」も有効にしておこうという話
はじめに
清水です。昨年のre:Invent 2021期間中に発表された「ごみ箱(Recycle Bin)」機能、リリース当時はEBSスナップショットのみが対象でしたが、先日(2022/02/03)AMI (Amazon Machine Images)もサポートするようになりました。 *1
- Recover from accidental deletions of your snapshots using Recycle Bin
- Amazon EC2 customers can now use Recycle Bin to recover from accidental deletions of Amazon Machine Images
DevelopersIOでは以下のエントリでアップデートをお伝えしています。
- [NEW!] EBSスナップショットで「ごみ箱」が使えるようになりました! [Recycle Bin] #reinvent | DevelopersIO
- AMIがRecycle Bin(ごみ箱)機能に対応しました | DevelopersIO
さて、AMIは「EBSスナップショットとインスタンスを構成する管理情報」でできていると言えます。(AWS Solutions Architect ブログ: AWSトレーニングでよくいただくご質問シリーズ - 第一回 Amazon Machine Image (AMI) とスナップショットの違い)構成にもよりますが、AMIを削除(登録解除)してしまってもEBSスナップショットが残っていれば、新たにスナップショットからイメージを作成してEC2インスタンスとして起動することも可能な場合があります。
AMIの「ごみ箱」機能がサポートされたことにより、EBSスナップショットと同様にこのAMIについても削除(登録解除)の取り消し、「ごみ箱」からの復元ができるようになったのですが、EBSスナップショットとの関連性が気になりました。AMIとEBSスナップショットの「ごみ箱」機能はそれぞれ個別に設定が可能です。保持ルールがそれぞれ個別設定となりますので、保持期間や対象リソース指定なども個別設定となります。つまり、AMIだけが「ごみ箱」に入っている状態でEBSスナップショットは完全に削除されてしまっている、という状態も存在しうるわけですね。この状況下でAMIとして復元、EC2の起動ができるのでしょうか。実際に確認してみたところ、EBSスナップショットが削除されてしまい「ごみ箱」にも入っていない場合には、AMIは「ごみ箱」から復元できない、という挙動がわかりました。以下、実際に確認した内容をまとめてみたいと思います。
AMIだけが「ごみ箱」に入っている状態でEBSスナップショットを削除してしまうと
実際にAMIだけが「ごみ箱」に入っている状態でEBSスナップショットを削除してしまうケースを確認していきます。
AMIだけ「ごみ箱」を有効化
まずはAMIの「ごみ箱」機能を有効化します。「ごみ箱」のマネジメントコンソールから[保持ルールを作成]で進みます。
「保持の設定」の箇所のInformationには、「AMIに関連付けられているEBSスナップショットを残すのなら、EBSスナップショットの保持ルールも作成する必要がある」という記載があります。なんとなくAMIのみ「ごみ箱」を有効化していても、EBSスナップショットがなければまずいことになりそうな予感がしますが、今回は検証のためこのままとします。(EBSスナップショットの「ごみ箱」は無効の状態です。)
AMIとEBSスナップショットをマネジメントコンソールから削除
AMIのみ「ごみ箱」を有効化、EBSスナップショットは無効の状態で、それぞれを削除してみましょう。対象となるAMIは以下のぐあいです。(検証用にEC2から新規にAMIを作成しました。)
EBSスナップショットについては以下となります。
それぞれを削除してしまいます。まずはAMI、「AMIを登録解除」します。
削除(登録解除)後、AMI一覧からは参照できなくなっています。
この段階で「ごみ箱」マネジメントコンソールのリソースを確認してみましょう。削除(登録解除)したAMIが「ごみ箱」に入っていることがわかります。
続いてEBSスナップショット、「EBSスナップショットの削除」を行います。
スナップショットの削除後、一覧から参照できなくなりました。
またEBSスナップショットの「ごみ箱」機能は有効にしていないので、「ごみ箱」にも入っていないという状況です。
「ごみ箱」からAMIの復元を試みる
削除したAMIとEBSスナップショットのうち、AMIだけは「ごみ箱」に入っている状況です。ここからAMIの復元を試してみましょう、対象リソースを選択して、[復元]ボタンで進みます。
いざ、復元!と行きたいところですが、「リソースの復元を開始できませんでした」と表示されてしまいました。
エラー内容としては、「まずEBSスナップショットを復元するか、削除されていないことを確認せよ」、「関連付けられたEBSスナップショットがないとイメージ(AMI)の復元が行えない」とのことです。今回のケースではEBSスナップショットは削除済みとなり、「ごみ箱」を有効にしておらず復元することができない状況ですので、AMIの復元も行えない、ということになります。
つまり、AMIだけが「ごみ箱」に残っていても「ごみ箱」からの復旧は行えず、EBSスナップショットが削除されていないか、AMIと同じく「ごみ箱」に残っており復旧ができることが、AMIの「ごみ箱」からの復元の条件となるわけですね。
補足: AMIの登録解除前にEBSスナップショットを削除しようとすると
今回の検証を行うにあたり、AMIの削除(登録解除)前にEBSスナップショットを削除するとどうなるかのかの確認も行ってみました。AMIの「ごみ箱」からの復旧と同じく、「ごみ箱」に入る前のAMIもEBSスナップショットがなければ意味をなしません。
マネジメントコンソールからEBSスナップショットを先に削除しようとしてみます。すると「スナップショットの削除に失敗しました。」というエラーが出ます。EBSスナップショットを削除する前に、関連付けられているAMIを先に登録解除する必要があるということですね。
AWS CLIのec2 delete-snapshot
コマンドの説明にも、AMIの登録解除前には関連付けられているEBSスナップショットを削除することができない旨の記載があります。(厳密にはAMIのルートデバイスに使用されているスナップショットが削除不可、となります。)
You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first de-register the AMI before you can delete the snapshot.
delete-snapshot — AWS CLI 2.4.21 Command Reference
「ごみ箱」に入る前のAMIについてはこのような、必要なEBSスナップショット(少なくともルートデバイスに使用されているEBSスナップショット)が削除できない仕組みが組み込まれているわけですね。(対して「ごみ箱」に入ったあとのAMIについては、確認したとおり現状だとEBSスナップショットが完全に削除できてしまうので注意しましょう。)
まとめ
AMIだけが「ごみ箱」に入っておりEBSスナップショットは削除されてしまった状態だとどのような挙動になるのか、実際に確認してみました。AMIが「ごみ箱」に入っていても、その構成要素となるEBSスナップショットが少なくとも「ごみ箱」に入っていて復旧できる状態でなければ、AMIとして意味をなさず復旧は行なえません。
AMIの「ごみ箱」の保持ルールを作成する際にもInformationとして表示されることから、EBSスナップショットの「ごみ箱」保持ルールのみを作り忘れる、ということはあまりないかと思います。注意する点としては、それぞれの保持ルールで保持期間が違ったためにEBSスナップショットが復元できない状態になってしまった、照合するリソースタグの付与し忘れ等でEBSスナップショットが「ごみ箱」に入らず完全に削除されてしまった、といったケースかなと思います。
「ごみ箱」に入る前の挙動ではAMIの登録解除より先にEBSスナップショットを削除することはできないので、「ごみ箱」保持ルールの保持期限が同じであればEBSスナップショットがAMIより先に復元できなくなる状況になることは避けられそうです。わかりやすくするためにも、AMIとEBSスナップショットの保持ルールで保持期限をあわせておくのが良さそうかなと思いました。