かべぎわブログ

ブログです

CloudFormation DeletionPolicy

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のスナップショットが作成されている。

そしてそれはスタックが削除されても保持される。