AMI と EBS スナップショットの Recycle Bin(ごみ箱)機能を AWS CLI でサクッと設定する

静かにしろい この機能が……オレを甦らせる 何度でもよ(365日が限界です)
2022.02.17

AMI と EBS スナップショットの Recycle Bin(ごみ箱)機能が2021年の終わりから2022年の頭にリリースされまして、既存のAWSアカウントや新規作成したAWSアカウントに事故防止のためにサクッと設定しておきたいなと思って AWS CLI からの設定方法をまとめました。

ごみ箱設定のメリット・デメリット

  • AMI、EBS スナップショットを誤削除してもごみ箱から復元(救出)できる
  • ごみ箱にある間は AMI、EBS スナップショットのデータサイズに応じた課金発生します
    • ごみ箱内の保持期間は1日から365日まで指定できます

ムダなコスト削減のためにきれいさっぱり掃除してみたら Auto Scaling Group で使用していた AMI を削除してて、スケールアウトできなくなったときでもごみ箱から救出してリカバリできます。AMI 作り直しするよりよっぽどいいですよね!

コマンドまとめ

完全に削除されるまでの保持期間は30日設定の例です。CloudShellからも実行できるのでお手軽です。

AMI Recycle Bin

aws rbin create-rule \
--description "Rule for All AMIs" \
--retention-period "RetentionPeriodValue=30,RetentionPeriodUnit=DAYS" \
--resource-type "EC2_IMAGE" \
--tags "Key=Name,Value=RetentionRuleAllAMIs"

EBS Snapshot Recycle Bin

aws rbin create-rule \
--description "Rule for All EBS Snapshots" \
--retention-period "RetentionPeriodValue=30,RetentionPeriodUnit=DAYS" \
--resource-type "EBS_SNAPSHOT" \
--tags "Key=Name,Value=RetentionRuleAllSnapshots"

2022/3/30追記
2つのごみ箱を有効化する理由は以下のリンクをご確認ください

詳細

各機能の説明は個別にブログで紹介されておりますので以下を参考にしてください。

AMI のごみ箱

EBS スナップショットのごみ箱

AWS CloudShell

AWS CLI で設定してみた

以下のドキュメントを参考にコマンドを実行して、マネジメントコンソールから設定された結果を確認します。

create-rule — AWS CLI 2.4.18 Command Reference

--retention-periodの書き方が最初いまいちわからなく時間を浪費しましたので、以下で紹介しているコマンドの実行例を参考にしていただければ幸いです。

AMI ごみ箱

削除したすべての AMI に対して30日保持する設定します。

  • --resource-type "EC2_IMAGE": EC2_IMAGE 指定が AMI ごみ箱のルールを示しています
  • --retention-period: 保持日数を指定してします

AMI Recycle Bin

aws rbin create-rule \
--description "Rule for All AMIs" \
--retention-period "RetentionPeriodValue=30,RetentionPeriodUnit=DAYS" \
--resource-type "EC2_IMAGE" \
--tags "Key=Name,Value=RetentionRuleAllAMIs"

ステータスがpendingとなっており実行した直後は設定したルールが反映されておりません。ほんの少し待ちマネジメントコンソールから設定が反映されているか確認してください。

実行結果

{
    "Identifier": "AtzIeOQMXn1",
    "RetentionPeriod": {
        "RetentionPeriodValue": 30,
        "RetentionPeriodUnit": "DAYS"
    },
    "Description": "Rule for All AMIs",
    "Tags": [
        {
            "Key": "Name",
            "Value": "RetentionRuleAllAMIs"
        }
    ],
    "ResourceType": "EC2_IMAGE",
    "ResourceTags": [],
    "Status": "pending"
}

保持ルールが追加されました。

すべてのリソースに適用され、保持期間30日と設定できています。

削除・復元確認

試しに AMI を登録解除(削除)します。

ごみ箱のリソースからカテゴリAMIsを選択すると、登録登録された AMI を確認できます。

復元してみます。

元の AMI 一覧から確認できる状態に戻りました。

EBS Snapshot

削除したすべての EBS スナップショット に対して30日保持する設定します。

  • --resource-type "EBS_SNAPSHOT"": EBS_SNAPSHOT 指定がスナップショットごみ箱のルールを示しています
  • --retention-period: 保持日数を指定してします
aws rbin create-rule \
--description "Rule for All EBS Snapshots" \
--retention-period "RetentionPeriodValue=30,RetentionPeriodUnit=DAYS" \
--resource-type "EBS_SNAPSHOT" \
--tags "Key=Name,Value=RetentionRuleAllSnapshots"

ステータスがpendingとなっており実行した直後は設定したルールが反映されておりません。ほんの少し待ちマネジメントコンソールから設定が反映されているか確認してください。

実行結果

{
    "Identifier": "jhBszoamtN5",
    "RetentionPeriod": {
        "RetentionPeriodValue": 30,
        "RetentionPeriodUnit": "DAYS"
    },
    "Description": "Rule for All EBS Snapshots",
    "Tags": [
        {
            "Key": "Name",
            "Value": "RetentionRuleAllSnapshots"
        }
    ],
    "ResourceType": "EBS_SNAPSHOT",
    "ResourceTags": [],
    "Status": "pending"
}

保持ルールが追加されました。

すべてのリソースに適用され、保持期間30日と設定できています。

削除・復元確認

試しにスナップショットを削除します。

ごみ箱のリソースからカテゴリEBS スナップショットを選択すると、削除されたスナップショットを確認できます。

復元してみます。

元のスナップショット一覧から確認できる状態に戻りました。

おわりに

コマンドコピペでごみ箱機能を有効化できますのでいざというときの備えのために設定しておいてはいかがでしょうか。あと、調べる限りですとAWS CLI からは設定できるものの、CloudFormation にはまだ対応していないようでした。