Amazon DynamoDBテーブルの削除保護がAWS CDKで設定できるようになりました

2023.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 Delivery部の若槻です。

今年3月に Amazon DynamoDB テーブルで削除保護が利用できるようになりました。 これにより、削除保護が設定されたテーブルは、設定をを無効にしなければ削除できなくなるため、オペレーションミスによる削除を防ぐことができます。

そしてこのたび、AWS CDKでもDynamoDBテーブルの削除保護の設定がv2.72.0でサポートされました。

Features - dynamodb: adds deletion protection for tables (#24581) (6e400a9), closes #24540

試してみた

実際にAWS CDKでDynamoDBテーブルの削除保護の設定を試してみます。

未設定の場合

設定する前に、まず削除保護が未設定の場合の挙動を確認してみます。

下記はCDKで作成したDynamoDBテーブルです。

削除保護は未設定となっています。

設定してみた

CDKライブラリ(aws-cdkaws-cdk-lib)を削除保護がサポートされているv2.72.0にアップデートします。

npm i aws-cdk aws-cdk-lib

アップデートされました。

package.json

{
  "devDependencies": {
+    "aws-cdk": "^2.72.0",
-    "aws-cdk": "^2.61.1",
  },
  "dependencies": {
+    "aws-cdk-lib": "^2.72.0",
-    "aws-cdk-lib": "^2.61.1",
  }
}

CDKスタックでdeletionProtectiontrueに設定します。

lib/cdk-sample-app.ts

import { Construct } from 'constructs';
import { Stack, StackProps, aws_dynamodb } from 'aws-cdk-lib';

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props: StackProps) {
    super(scope, id, props);

    new aws_dynamodb.Table(this, 'dbTable', {
      tableName: 'dbTable',
      partitionKey: { name: 'id', type: aws_dynamodb.AttributeType.STRING },
      deletionProtection: true,
    });
  }
}

CDKデプロイします。

するとテーブルの削除保護が有効になりました !

コンソールからテーブルの削除を試してみます。

削除するためには削除保護を無効にする必要がある旨が表示され、削除へ進めなくなっています。削除保護がちゃんと効いていますね!

AWS CDKから削除を試みた場合はどうでしょうか。

既定の削除ポリシー(Removal Policy)はRetainなので、Destroyに設定して一度CDKデプロイし、その上でDynamoDBテーブルのリソースの記述をリソースから削除します。

lib/cdk-sample-app.ts

import { Construct } from 'constructs';
import { Stack, StackProps, RemovalPolicy, aws_dynamodb } from 'aws-cdk-lib';

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props: StackProps) {
    super(scope, id, props);

    // new aws_dynamodb.Table(this, 'dbTable', {
    //   tableName: 'dbTable',
    //   partitionKey: { name: 'id', type: aws_dynamodb.AttributeType.STRING },
    //   deletionProtection: true,
    //   removalPolicy: RemovalPolicy.DESTROY,
    // });
  }
}

上記の状態でCDKデプロイすると、テーブルの削除がエラーとなりました。

Resource handler returned message: "Resource cannot be deleted as it is currently protected against deletion. Disable deletion protection first. (Service: DynamoDb, Status Code: 400, Request ID: U9RHR2HLH0REC1R3C18P7OOB6NVV4KQNSO5AEMVJF66Q9ASUA AJG)" (RequestToken: dd0d2746-8f9f-a98d-4cbd-1ff13ad3de83, HandlerErrorCode: InvalidRequest)

CDKから削除を試みた場合でも削除保護がちゃんと効くことが確認できました。

おわりに

Amazon DynamoDBテーブルの削除保護がAWS CDKで設定できるようになりました。

これでCDKでテーブルリソースを管理している環境でも削除保護が設定しやすくなりました。CDK利用勢には嬉しいアップデートでした。

参考

以上