[アップデート] AMI と EBS スナップショットの Recycle Bin(ごみ箱)保持ルールを CloudFormation で管理出来るようになってました

[アップデート] AMI と EBS スナップショットの Recycle Bin(ごみ箱)保持ルールを CloudFormation で管理出来るようになってました

Clock Icon2024.11.22

いわさです。

AMI と EBS スナップショットには削除後も一定期間アカウント内にデータを保持して復旧出来るようにする Recycle Bin(ごみ箱)機能があります。

先日のアップデートで、このごみ箱のルールが CloudFormation で管理出来るようになりました。

https://aws.amazon.com/about-aws/whats-new/2024/11/aws-cloudformation-recycle-bin-rules/

事故防止のために保持ルールを設定したいというニーズは多かったのですが、これまで CloudFormation はサポートされておらず、設定の自動化を行いたい場合は AWS SDK/CLI など API 経由で実行する必要がありました。

https://dev.classmethod.jp/articles/recycle-bin-to-set-up-using-aws-cli/

リソースタイプ「AWS::Rbin::Rule」

次のリソースタイプ「AWS::Rbin::Rule」が新しく追加されています。
こちらを使って構築していきましょう。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rbin-rule.html

ごみ箱の保持ルールは対象が EBS スナップショットか AMI となります。
CloudFormation ではResourceTypeEBS_SNAPSHOTEC2_IMAGEを指定します。
また、保持期間を設定します。本日時点ではRetentionPeriodUnitDAYSのみサポートされています。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeSnapShotRule:
    Type: AWS::Rbin::Rule
    Properties:
      ResourceType: EBS_SNAPSHOT
      RetentionPeriod: 
        RetentionPeriodUnit: DAYS
        RetentionPeriodValue: 3

  HogeAmiRule:
    Type: AWS::Rbin::Rule
    Properties:
      ResourceType: EC2_IMAGE
      RetentionPeriod: 
        RetentionPeriodUnit: DAYS
        RetentionPeriodValue: 3

上記をデプロイしてみると次のようにルールが作成されました。

F9CC0ACE-111B-4D00-AF90-6737C6A9F5E5.png

1D3D8643-87D2-4BB2-A2A5-AF582BE75DB6_4_5005_c.jpeg

上記のリソースタイプと保持期間設定が最低限必要なプロパティとなります。

オプション

オプションでロックやタグ設定を行うことも出来ます。
タグ関連も最近のアップデートで追加されたもので、適用対象の AMI やスナップショットをフィルタリング出来る機能です。詳細は次の記事を確認してください。

https://dev.classmethod.jp/articles/update-ebs-snapshot-ami-rbin-tag-control/

タグ指定

対象のタグを指定する場合はResourceTagsを指定します。
除外ルールを設定する場合はExcludeResourceTagsに複数のタグを配列で指定します。
ResourceTagsExcludeResourceTagsを同時に指定することは出来ません。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeAmiRule2:
    Type: AWS::Rbin::Rule
    Properties:
      ResourceType: EC2_IMAGE
      RetentionPeriod: 
        RetentionPeriodUnit: DAYS
        RetentionPeriodValue: 3
      ExcludeResourceTags:
        - ResourceTagKey: HogeKey
          ResourceTagValue: HogeValue2
        - ResourceTagKey: HogeKey
          ResourceTagValue: HogeValue3

除外タグ指定の場合の確認結果は以下です。良いですね。

05BAD0C6-FE15-48E5-8CB8-6A43573C08F5.png

対象タグを指定した場合の確認結果は以下です。

C5C6D5A1-B085-4410-845E-0FB784512BD8.png

ロック

LockConfigurationで保持ルールをロックして一定期間変更できなくすることが出来ます。
厳密には権限があれば変更は出来るのですが、ロック解除まで遅延が発生して猶予期間後に変更が反映されるという挙動をします。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeSnapShotRule:
    Type: AWS::Rbin::Rule
    Properties:
      ResourceType: EBS_SNAPSHOT
      RetentionPeriod: 
        RetentionPeriodUnit: DAYS
        RetentionPeriodValue: 3
      LockConfiguration:
        UnlockDelayUnit: DAYS
        UnlockDelayValue: 7

1369857F-F5FD-4079-9F02-5252BAD65AED.png

マネジメントコンソール上はなぜか「ロックを解除済み」という表記になっていましたが、AWS CLI で確認したところLockStatelockedになっていたので内部値としては問題なさそうです。

% aws rbin get-rule --identifier KyNel2xiGo8
{
    "Identifier": "KyNel2xiGo8",
    "Description": "",
    "ResourceType": "EBS_SNAPSHOT",
    "RetentionPeriod": {
        "RetentionPeriodValue": 3,
        "RetentionPeriodUnit": "DAYS"
    },
    "ResourceTags": [],
    "Status": "available",
    "LockConfiguration": {
        "UnlockDelay": {
            "UnlockDelayValue": 7,
            "UnlockDelayUnit": "DAYS"
        }
    },
    "LockState": "locked",
    "RuleArn": "arn:aws:rbin:ap-northeast-1:123456789012:rule/KyNel2xiGo8"
}
% aws rbin get-rule --identifier DJvgzo6Dcr6
{
    "Identifier": "DJvgzo6Dcr6",
    "Description": "",
    "ResourceType": "EC2_IMAGE",
    "RetentionPeriod": {
        "RetentionPeriodValue": 3,
        "RetentionPeriodUnit": "DAYS"
    },
    "ResourceTags": [
        {
            "ResourceTagKey": "HogeKey",
            "ResourceTagValue": "HogeValue1"
        }
    ],
    "Status": "available",
    "RuleArn": "arn:aws:rbin:ap-northeast-1:123456789012:rule/DJvgzo6Dcr6"
}

なお、こちらの設定は除外タグのあるルールでは設定出来ない仕様のようで、CloudFormation で併用して設定した場合は除外タグルールが無視されました。
除外タグルールが CloudFormation で反映出来ない場合はロック設定も指定してしまっていないか確認してみてください。

747A8A10-7A74-4038-9E21-586B88D53EB5_4_5005_c.jpeg

Status プロパティは無視されるっぽい

Statusというプロパティが CloudFormation 上指定出来るのですが、どうやらこちらは本日時点では無視される値のようです。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeSnapShotRule:
    Type: AWS::Rbin::Rule
    Properties:
      ResourceType: EBS_SNAPSHOT
      RetentionPeriod: 
        RetentionPeriodUnit: DAYS
        RetentionPeriodValue: 3
      Status: pending

デプロイしてみましたが、指定した値が反映されずに常にavailableとなっていました。

% aws rbin get-rule --identifier KyNel2xiGo8
{
    "Identifier": "KyNel2xiGo8",
    "Description": "",
    "ResourceType": "EBS_SNAPSHOT",
    "RetentionPeriod": {
        "RetentionPeriodValue": 3,
        "RetentionPeriodUnit": "DAYS"
    },
    "ResourceTags": [],
    "Status": "available",
    "RuleArn": "arn:aws:rbin:ap-northeast-1:123456789012:rule/KyNel2xiGo8"
}

将来的にルールの有効/無効の切り替えが出来るようになりそうですね。

さいごに

本日は AMI と EBS スナップショットの Recycle Bin(ごみ箱)保持ルールを CloudFormation で管理出来るようになっていたので試してみました。

アカウント初期設定用のテンプレートなどに組み込めそうですね。ぜひ使ってみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.