[アップデート] AMI と EBS スナップショットの Recycle Bin(ごみ箱)保持ルールを CloudFormation で管理出来るようになってました
いわさです。
AMI と EBS スナップショットには削除後も一定期間アカウント内にデータを保持して復旧出来るようにする Recycle Bin(ごみ箱)機能があります。
先日のアップデートで、このごみ箱のルールが CloudFormation で管理出来るようになりました。
事故防止のために保持ルールを設定したいというニーズは多かったのですが、これまで CloudFormation はサポートされておらず、設定の自動化を行いたい場合は AWS SDK/CLI など API 経由で実行する必要がありました。
リソースタイプ「AWS::Rbin::Rule」
次のリソースタイプ「AWS::Rbin::Rule」が新しく追加されています。
こちらを使って構築していきましょう。
ごみ箱の保持ルールは対象が EBS スナップショットか AMI となります。
CloudFormation ではResourceType
でEBS_SNAPSHOT
かEC2_IMAGE
を指定します。
また、保持期間を設定します。本日時点ではRetentionPeriodUnit
はDAYS
のみサポートされています。
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
上記をデプロイしてみると次のようにルールが作成されました。
上記のリソースタイプと保持期間設定が最低限必要なプロパティとなります。
オプション
オプションでロックやタグ設定を行うことも出来ます。
タグ関連も最近のアップデートで追加されたもので、適用対象の AMI やスナップショットをフィルタリング出来る機能です。詳細は次の記事を確認してください。
タグ指定
対象のタグを指定する場合はResourceTags
を指定します。
除外ルールを設定する場合はExcludeResourceTags
に複数のタグを配列で指定します。
ResourceTags
とExcludeResourceTags
を同時に指定することは出来ません。
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
除外タグ指定の場合の確認結果は以下です。良いですね。
対象タグを指定した場合の確認結果は以下です。
ロック
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
マネジメントコンソール上はなぜか「ロックを解除済み」という表記になっていましたが、AWS CLI で確認したところLockState
がlocked
になっていたので内部値としては問題なさそうです。
% 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 で反映出来ない場合はロック設定も指定してしまっていないか確認してみてください。
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 で管理出来るようになっていたので試してみました。
アカウント初期設定用のテンプレートなどに組み込めそうですね。ぜひ使ってみてください。