俺のアウトプット

調べたこと、試したことを書きます

CloudFormationテンプレートのDeletionPolicy属性

Resourcesセクション内のリソース定義時に、DeletionPolicy属性を指定すると、リソースの削除方法を制御できます。

DeletionPolicy属性は、リソースのふるまいや関連性を制御するリソース属性の1つです。

リソース属性

  • CreationPolicy 属性
  • DeletionPolicy 属性 (これ)
  • DependsOn 属性
  • Metadata 属性
  • UpdatePolicy 属性

DeletionPolicy属性のオプション

  • Delete
    • リソースを削除する
  • Retain
    • スタック削除しても、対象のリソースを削除しない
    • 残ったリソースはCloudFormationの管理外
  • Snapshot
    • リソースを削除する前にスナップショット作成
    • 対応リソース
      • AWS::EC2::Volume
      • AWS::ElastiCache::CacheCluster
      • AWS::ElastiCache::ReplicationGroup
      • AWS::RDS::DBInstance
      • AWS::RDS::DBCluster
      • AWS::Redshift::Cluster

デフォルトの動作

DeletionPolicy属性は省略可能です。
省略した場合はリソースが削除されますが、一部のリソースタイプはデフォルトの動作が異なります。

リソースタイプ デフォルトの動作
AWS::RDS::DBCluster Snapshot
AWS::RDS::DBInstance Auroraエンジン用のDBClusterIdentifierプロパティ
・指定する:Delete
・指定しない:Snapshot
それ以外 Delete

サンプルテンプレート

Amazon RDSのDBインスタンスを作成するテンプレートです。 リソースタイプ AWS::RDS::DBInstance の DeletionPolicy属性にRetainを指定しています。

スタック作成時に

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  DBUser:
    NoEcho: true
    Description: The database admin account username
    Type: String
    MinLength: 1
    MaxLength: 16
    AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
    ConstraintDescription: must begin with a letter and contain only alphanumeric characters.
  DBPassword:
    NoEcho: true
    Description: The database admin account password
    Type: String
    MinLength: 8
    MaxLength: 41
    AllowedPattern: '[a-zA-Z0-9]*'
    ConstraintDescription: must contain only alphanumeric characters.
Resources:
  MyDB:
    Type: AWS::RDS::DBInstance
    Properties:
      DBName: MyDatabase
      AllocatedStorage: 5
      DBInstanceClass: db.t2.small
      Engine: MySQL
      MasterUsername: !Ref DBUser
      MasterUserPassword: !Ref DBPassword
    DeletionPolicy: Retain
Outputs:
  JDBCConnectionString:
    Description: JDBC connection string for the database
    Value: !Join 
      - ''
      - - 'jdbc:mysql://'
        - !GetAtt 
          - MyDB
          - Endpoint.Address
        - ':'
        - !GetAtt 
          - MyDB
          - Endpoint.Port
        - /MyDatabase

スタックを削除すると、RDSを削除しないため、一瞬で完了します。 (残ったRDSは削除してください)

f:id:kitsugi:20180827075330p:plain

AWS::RDS::DBInstanceの場合、DeletionPolicy属性を削除するとSnapshotとして動作します。 この場合、スナップショットが残っているのが確認できます。

f:id:kitsugi:20180827080149p:plain

参考