[アップデート]AMIの登録解除保護を設定できるようになりました

疲れていると人は過ちを犯すので、誤操作を予防してあげましょう
2024.05.02

たぬき( @tanuki_tzp )です。
AMIの登録解除保護が設定できるようになりました。

これにより、意図しない操作による登録解除からAMIを保護することができます。

Amazon EC2 now protects your AMIs from accidental deregistration

アップデート内容

特定のAMIを意図しない登録解除から保護することで、そのAMIを使用しているシステムダウンを防ぐことができます。

意図しない登録解除起因でシステムダウンが発生するという書き方をしていますが、登録解除されたAMIを使用して起動し、既に稼働しているインスタンスにはAMIの登録解除による直接的な影響はありません(ただし、AMIから取得できる情報は取れなくなります)。
Auto Scaling Groupの起動テンプレートでカスタムされたAMIを設定している場合に、新規インスタンスが起動する際、参照先のAMIが存在しないのでダウンが発生するというパターンが該当します。

参考: Deregister (delete) an AMI - Amazon Elastic Compute Cloud

やってみる

まずはテスト用EC2から、AMIを作成します。
AMIの作成時には登録解除保護は指定できません。

作成されたAMIを確認すると、登録解除保護が「Disabled」になっています。

アクションから、「Manage AMI deregistration protection」を選択すると、設定画面が表示されます。
(何故かここだけスクリーンショットを撮り忘れていたので、違うAMIを使用しています。)

設定項目としては

  • Disable(無効)
  • Enable with a 24-hour cooldown period(有効、設定を無効化した後も24時間はクールダウンタイムとして解除保護が有効)
  • Enable without cooldown(有効)

があります。
今回は検証のため、「Enable without cooldown」を選択して保存します。

先ほど確認したAMIの詳細から、登録解除保護のステータスが変更されていたら変更完了です。

AMIを削除してみる

作成したAMIを使用してインスタンスを立ち上げた状態で、AMIの登録解除してみます。
まず、新たにインスタンスを立ち上げます。

ステータスチェックも異常なしの元気なインスタンスです。

登録解除保護有り

さっそくAMIを登録解除してみましょう。
AMIを指定し、アクションから「AMIを登録解除」を選択します。

ばいばい ! AMI !

…………

……

逃がせませんでした。

エラー詳細で「登録解除保護外してね」と言われています。
溜まったAMIを手動解除祭りをしているときでも、これなら大事なAMIを逃がせません。正常な動作です。
ちなみに、私は厳選が終わった大事なモンスターを逃がしてしまったことがあります。疲れている人間は過ちを犯すものです。

登録解除が失敗しているので、インスタンスにも影響はありません。

登録解除保護無し

次に、保護を無効化してAMIを登録解除してみます。
今回は、「Enable without cooldown」を指定していたため、保護解除後すぐに削除操作をすることができます。

保護有りと同じようにAMIを指定し、アクションから「AMIを登録解除」を選択します。

今度は正常に登録解除されました。
登録解除されたAMIはゴミ箱で拾うこともできますが、登録解除前に保持ルールを作成しておかないと復旧不可能になるので、ゴミ箱の設定も合わせて行っておくことをおすすめします。

一応、EC2のステータスを確認してみましょう。

特に問題なく稼働しています。
詳細を確認すると、AMIに関する情報が取得できなくなっています。

ゴミ箱にAMIが落ちている場合はAMIを復旧することで表示が戻りますが、まずゴミ箱に入れないことが健全な予防策となるので、大事なAMIは登録解除保護を付けましょう。

おわりに

ゴミ箱を過信しすぎると、保護ルールからも外れて消えてしまうといったことが起こりそうだなと思いました。
あるととても助かる!といった機能ではないかもしれませんが、救われるパターンはありそうです。

インスタンスで参照しているAMIに一括で登録解除保護を付ける処理をしてあげたいです。