【AWS】CloudFormation ~ DeletionPolicy 属性 ~

■ はじめに

 CloudFormation スタックを削除した際に、
生成したリソースを削除したい場合や残しておきたいなどを
どのようにコントロールするのかを調べたので、メモする。

目次

【0】リソース属性
【1】DeletionPolicy 属性
【2】DeletionPolicy属性のオプション
 1)Delete
 2)Retain
 3)Snapshot

【0】リソース属性

* CloudFormation では、作成したリソースに対して、
 ルール(ポリシー)を設定することができる。
* リソース属性の種類は、以下の通り。
~~~~~~
1)DeletionPolicy 属性 << 今回のテーマ
2)CreationPolicy 属性
3)DependsOn 属性
4)Metadata 属性
5)UpdatePolicy 属性
6)UpdateReplacePolicy 属性
~~~~~~
* 各属性の詳細は、以下の公式サイトを参照のこと。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-attribute-reference.html

【1】DeletionPolicy 属性

* CloudFormation の スタック(Stack)を削除した際に
 そのスタックで生成したリソースが
 どのような動きをするかを定義する項目

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html

【2】DeletionPolicy属性のオプション

* DeletionPolicy 属性の取りうる値は以下の通り。

1)Delete(削除) << デフォルト(ただし例外あり)
2)Retain(保持)
3)Snapshot(スナップショット)

デフォルト値の例外

* 以下のデフォルト値は、「Snapshot」
 + AWS::RDS::DBCluster リソース
 + DBClusterIdentifier プロパティを
 指定しない AWS::RDS::DBInstance リソース

1)Delete

* スタックが削除された際に、そのリソースが削除

使用上の注意

* Amazon S3 バケットでは、削除を成功させるためには
 バケットのすべてのオブジェクトを削除する必要があります。

2)Retain

* スタックが削除された場合でも、リソースを保持
* cf. Retain = 保持、持ち続ける

公式サイト および その解説動画
https://aws.amazon.com/jp/premiumsupport/knowledge-center/delete-cf-stack-retain-resources/
https://www.youtube.com/watch?v=qwX8UmEb9bQ

例1:S3バケット

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  myS3Bucket:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain

例2:セキュリティグループおよびインバウンド

Description: AWS CloudFormation DeletionPolicy demo
Resources:
  SGroup1:
    Type: 'AWS::EC2::SecurityGroup'
    DeletionPolicy: Retain
    Properties:
      GroupDescription: EC2 Instance access
  # SecurityGroupIngress : インバウンド
  #(cf. SecurityGroupIngress=アウトバウンド)
  SGroup1Ingress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    DeletionPolicy: Retain
    Properties:
      GroupName: !Ref SGroup1
      IpProtocol: tcp
      ToPort: '80'
      FromPort: '80'
      CidrIp: 0.0.0.0/0

3)Snapshot

* スタックが削除された際に、そのリソースが削除
 ただし、その前に、そのリソースのスナップショットを作成

対応リソース

* AWS::EC2::Volume
* AWS::ElastiCache::CacheCluster
* AWS::ElastiCache::ReplicationGroup
* AWS::Neptune::DBCluster
* AWS::RDS::DBCluster
* AWS::RDS::DBInstance
* AWS::Redshift::Cluster

参考文献

https://dev.classmethod.jp/articles/how-to-keep-datas-when-deleting-stacks/
https://oreout.hatenablog.com/entry/aws/cloudformation/15
https://dev.classmethod.jp/articles/aws-cloudformation-stack-deletion-policy/

関連記事

AWS CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
AWS CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
AWS CloudFormation ~ 組み込み関数 ~
https://dk521123.hatenablog.com/entry/2021/12/04/202519
AWS CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313
AWS CloudFormation ~ 認証情報の扱い ~
https://dk521123.hatenablog.com/entry/2021/12/28/224501
CloudFormation で Github/CodePipeline/CodeBuild を構築する
https://dk521123.hatenablog.com/entry/2021/12/26/155956