概要

2023/3/8にDynamoDBテーブルの削除保護の機能が追加になったとAWSブログでアナウンスがありました。

DynamoDBデベロッパーガイドにも掲載されており、
CloudFormationによる削除保護設定もサポートしていると記載されていますが、
2023/3/9時点ではCloudFormationリファレンスには掲載されていませんでしたが、
APIリファレンスには掲載されていました。

今回はCloudFormationでDynamoDBテーブルの削除保護を有効化する設定を検証しました。

CloudFormationで設定してみる

1. DynamoDBのテンプレートを作成(テスト用なのでテーブルの中身は気にしないでください。)

Description: DynamoDB Table

Parameters:
  Project:
    Type: String
  Landscape:
    Type: String

Resources:
  TestTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
    Properties:
      TableName: !Sub ${Project}-${Landscape}-table
      AttributeDefinitions:
        - AttributeName: client_id
          AttributeType: S
        - AttributeName: time
          AttributeType: N
      KeySchema:
        - AttributeName: client_id
          KeyType: HASH
        - AttributeName: time
          KeyType: RANGE
      Tags:
        - Key: env
          Value: !Sub ${Landscape}
        - Key: name
          Value: !Sub ${Project}
      BillingMode: PAY_PER_REQUEST

2. CloudFormationのスタックにテンプレートを登録して、DynamoDBテーブルを作成

3. 削除保護(Deletion protection)はoffになっています。

4. CloudFormationのテンプレートのProperties配下にDeletionProtectionEnabled: trueを追記

 Description: DynamoDB Table

Parameters:
  Project:
    Type: String
  Landscape:
    Type: String

Resources:
  TestTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
    Properties:
      TableName: !Sub ${Project}-${Landscape}-table
      AttributeDefinitions:
        - AttributeName: client_id
          AttributeType: S
        - AttributeName: time
          AttributeType: N
      KeySchema:
        - AttributeName: client_id
          KeyType: HASH
        - AttributeName: time
          KeyType: RANGE
      Tags:
        - Key: env
          Value: !Sub ${Landscape}
        - Key: name
          Value: !Sub ${Project}
      BillingMode: PAY_PER_REQUEST
      DeletionProtectionEnabled: true

5. CloudFormationのスタックでチェンジセットを作成

6. チェンジセットのステータスがCREATE_COMPLETEになったことを確認し、Execute Change Setをクリック

7. 更新に失敗した時にロールバックするかどうかを聞かれるので、選択してExecute Change Setをクリック

8. スタックがUPDATE_COMPLETEになったことを確認

9. DynamoDBテーブルの削除保護(DeletionProtection)がOnになったことを確認

以上