CloudFormationのDeletionPolicyをつかうと、スタックを削除してもリソースをそのまま保持することができる。
- DeletionPolicyの項目
- Delete(削除)
- Retain(保持)
- Snapshot(スナップショット)
デフォルトのDeletionPolicyはDelete(削除)である。例外として、AWS::RDS::DBCluster
リソースと、DBClusterIdentifier プロパティを指定しない AWS::RDS::DBInstance
リソースのデフォルトポリシーは Snapshotである。
- Snapshotポリシーがつかえるリソース
- AWS::EC2::Volume
- AWS::ElastiCache::CacheCluster
- AWS::ElastiCache::ReplicationGroup
- AWS::Neptune::DBCluster
- AWS::RDS::DBCluster
- AWS::RDS::DBInstance
- AWS::Redshift::Cluster
ためしてみる
RetainとDelete
以下のCloudFormationテンプレートでスタックを作成した。
AWSTemplateFormatVersion: '2010-09-09' Resources: kabegiwaRetainBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain kabegiwaDeleteBucket: Type: AWS::S3::Bucket
$ aws cloudformation list-stacks --output text STACKSUMMARIES 2022-05-10T07:54:30.891Z arn:aws:cloudformation:ap-northeast-1:0123456789012:stack/s3-test/6c6fa430-d036-11ec-811c-0e354ab8e31b s3-test CREATE_COMPLETE
S3バケットが作成されている。
$ aws s3 ls 2022-05-10 07:53:47 cf-templates-1tsgh42ubih7m-ap-northeast-1 2022-05-10 07:54:37 s3-test-kabegiwadeletebucket-897fbs8hgspr 2022-05-10 07:54:37 s3-test-kabegiwaretainbucket-14jg9ttckhtue
CloudFormationスタックを削除する。
$ aws cloudformation delete-stack --stack-name s3-test
スタックの削除が完了。
$ aws cloudformation list-stacks --output text STACKSUMMARIES 2022-05-10T07:54:30.891Z 2022-05-10T08:10:41.727Z arn:aws:cloudformation:ap-northeast-1:0123456789012:stack/s3-test/6c6fa430-d036-11ec-811c-0e354ab8e31b s3-test DELETE_COMPLETE
DeletionPolicyにRetainを設定したS3バケットは削除されずに保持されていることがわかる。
$ aws s3 ls 2022-05-10 07:53:47 cf-templates-1tsgh42ubih7m-ap-northeast-1 2022-05-10 07:54:37 s3-test-kabegiwaretainbucket-14jg9ttckhtue
Snapshot
以下のCloudFormationテンプレートでRDSインスタンスを作成した。
Resources: SnapshotDB: Type: AWS::RDS::DBInstance Properties: VPCSecurityGroups: - Fn::GetAtt: [ SnapshotDBSecurityGroup , GroupId ] AllocatedStorage: '5' DBInstanceClass: db.t2.small Engine: MySQL MasterUsername: MyName MasterUserPassword: MyPassword DeletionPolicy: Snapshot SnapshotDBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: RDS SecurityGroupIngress: - IpProtocol: tcp FromPort: 3306 ToPort: 3306 CidrIp: 0.0.0.0/0
$ aws cloudformation list-stacks --output text STACKSUMMARIES 2022-05-10T09:01:24.275Z arn:aws:cloudformation:ap-northeast-1:0123456789012:stack/snapshot-test/c49949a0-d03f-11ec-98c3-0633c5fc036d snapshot-test CREATE_COMPLETE
DBインスタンスが作成されている。
$ aws rds describe-db-instances | jq .DBInstances[].DBInstanceIdentifier "sssu7dja6ka60k"
CloudFormationスタックを削除する。
$ aws cloudformation delete-stack --stack-name snapshot-test
スタックの削除が完了。
$ aws cloudformation list-stacks --output text STACKSUMMARIES 2022-05-10T09:01:24.275Z 2022-05-10T09:20:13.138Z arn:aws:cloudformation:ap-northeast-1:0123456789012:stack/snapshot-test/c49949a0-d03f-11ec-98c3-0633c5fc036d snapshot-test DELETE_COMPLETE
スタックの削除時にDBのスナップショットが作成されている。
そしてそれはスタックが削除されても保持される。