AWS CDK で L2 コンストラクタを利用するとき、リソース削除が実行されるときの削除ポリシーにはデフォルト設定が適用されます。基本的にはリソースが削除されないように設定されますが、このデフォルト値はリソースによって異なるため、サービスごとにどのようなデフォルト動作なのかを整理します。(メモに近いので中身はほぼないです)
AWS CDK の RemovalPolicy
AWS はストレージサービスであるS3 やデータベースサービスであるRDS など、ユースケースに応じて幅広いストレージやデータベースサービスを提供しています。
これらのサービスを利用するとき、データが失われないように適切な設定と管理が不可欠ですが、Infrastructure as Code (IaC) として定義したりデプロイ自動化したりすることで誤ったデータ削除や構成変更を防ぐことが可能です。
IaC ツールである AWS CDK を使ってこれらのサービスをデプロイする際に、例えば以下のコードで S3 バケットをデプロイしたり、DynamoDB テーブルをデプロイできます。
import * as cdk from 'aws-cdk-lib';
import { Bucket, RemovalPolicy } from 'aws-cdk-lib/aws-s3';
const bucket = new Bucket(stack, 'MyBucket');
しかし、上記の通り簡単にデプロイできるのは、AWS CDK が記述量少なくデフォルトの設定を定義している( L2 コンストラクタなど) おかげであり、特に RemovalPolicy
は注意する必要があります。
この削除ポリシーによって、AWS CDK に変更があった場合にデプロイされているリソースを削除するかどうか決まるので、AWS CDK でデプロイした S3 バケットがすべて消し飛ぶ可能性もあります。
AWS CDK の サービスごとの RemovalPolicy のデフォルト挙動
それでは本題、サービスごとに RemovalPolicy
のデフォルト挙動を整理します。
AWS CDK では、デプロイしたリソースを削除するときに、誤ってデータが削除されないように基本的には RemovalPolicy: RETAIN
が設定されています。
サービス分類 | サービス | CDK のデフォルト挙動 |
---|---|---|
ストレージ | S3 | RemovalPolicy: RETAIN |
ストレージ | FSx | RemovalPolicy: RETAIN |
ストレージ | EBS | RemovalPolicy: RETAIN |
ストレージ | EFS | RemovalPolicy: RETAIN |
ストレージ | Backup | RemovalPolicy: RETAIN |
データベース | RDS・Aurora | RemovalPolicy: SNAPSHOT (クラスター) 、ただしパラメータグループ・サブネットグループは RemovalPolicy: DESTROY |
データベース | DocumentDB | RemovalPolicy: RETAIN (クラスター) 、ただしパラメータグループ・サブネットグループは RemovalPolicy: DESTROY |
データベース | DynamoDB | RemovalPolicy: RETAIN |
注意点としては、下記のは一旦データストアみたいなところを中心に洗い出しているので、実際はSQSなどにも RemovalPolicy
が設定できます。どこかで記事ごと更新するかもしれないですが。
RemovalPolicy: SNAPSHOT
など新しい戦略が今後も追加されていくと思うので、引き続き随時アップデートしていけたら良いなと思っています。