タダです.
CDK のS3 を作ってみてリソースを扱う時に注意すべきことがあると学んだのでその結果を記事にまとめます.
S3 バケットを作るコードで生成される CloudFormation テンプレートの確認
S3 だけを作る TypeScript のコードを書くとして以下のようなコードになります.
import * as cdk from '@aws-cdk/core'; import s3 = require('@aws-cdk/aws-s3'); export class Mks3Stack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const cdkS3TestBucket = new s3.Bucket(this, 'CdkS3TestBucket'); } }
cdk synth
で CloudFormation テンプレートで出してみるとわかりますが,UpdateReplacePolicy
と DeletionPolicy
の値が Retain
になっています.つまり,この2つのパラメーターが Retain
であることはリソースのスタック更新時や削除する時にリソースが残り続ける状態というステータスです.開発中にバケットを作って消してを繰り返したい時はこの設定は手間が増えてしまいます.
Resources: CdkS3TestBucketD2F17ADE: Type: AWS::S3::Bucket UpdateReplacePolicy: Retain DeletionPolicy: Retain Metadata: aws:cdk:path: Mks3Stack/CdkS3TestBucket/Resource CDKMetadata: Type: AWS::CDK::Metadata Properties: Modules: aws-cdk=1.22.0,@aws-cdk/aws-events=1.21.1,@aws-cdk/aws-iam=1.21.1,@aws-cdk/aws-kms=1.21.1,@aws-cdk/aws-s3=1.21.1,@aws-cdk/core=1.21.1,@aws-cdk/cx-api=1.21.1,@aws-cdk/region-info=1.21.1,jsii-runtime=node.js/v13.2.0 Condition: CDKMetadataAvailable Conditions: CDKMetadataAvailable: Fn::Or: - Fn::Or: - Fn::Equals: - Ref: AWS::Region - ap-east-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-2 - Fn::Equals: - Ref: AWS::Region - ap-south-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-2 - Fn::Equals: - Ref: AWS::Region - ca-central-1 - Fn::Equals: - Ref: AWS::Region - cn-north-1 - Fn::Equals: - Ref: AWS::Region - cn-northwest-1 - Fn::Equals: - Ref: AWS::Region - eu-central-1 - Fn::Or: - Fn::Equals: - Ref: AWS::Region - eu-north-1 - Fn::Equals: - Ref: AWS::Region - eu-west-1 - Fn::Equals: - Ref: AWS::Region - eu-west-2 - Fn::Equals: - Ref: AWS::Region - eu-west-3 - Fn::Equals: - Ref: AWS::Region - me-south-1 - Fn::Equals: - Ref: AWS::Region - sa-east-1 - Fn::Equals: - Ref: AWS::Region - us-east-1 - Fn::Equals: - Ref: AWS::Region - us-east-2 - Fn::Equals: - Ref: AWS::Region - us-west-1 - Fn::Equals: - Ref: AWS::Region - us-west-2
関連 ドキュメント
スタック削除時の動作の確認
試しに cdk destroy
を実行してみると CloudForamtion スタックは消えるが S3 バケットの削除がスキップされているのがコンソール画面で確認できます.
cdk destroy Are you sure you want to delete: Mks3Stack (y/n)? y Mks3Stack: destroying... ✅ Mks3Stack: destroyed
コンソール画面
スタック削除時にバケットを削除したい時
スタック削除時にバケットを削除したい時は removalPolicy
で定義します.
import * as cdk from '@aws-cdk/core'; import s3 = require('@aws-cdk/aws-s3'); export class Mks3Stack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // The code that defines your stack goes here const cdkS3TestBucket = new s3.Bucket(this, 'CdkS3TestBucket',{ removalPolicy: cdk.RemovalPolicy.DESTROY }); } }
cdk synth
で CloudFormation テンプレートを出してみると,UpdateReplacePolicy
と DeletionPolicy
の値が Delete
に変更されました.
Resources: CdkS3TestBucketD2F17ADE: Type: AWS::S3::Bucket UpdateReplacePolicy: Delete <= 変化 DeletionPolicy: Delete <= 変化 Metadata: aws:cdk:path: Mks3Stack/CdkS3TestBucket/Resource CDKMetadata: Type: AWS::CDK::Metadata Properties: Modules: aws-cdk=1.22.0,@aws-cdk/aws-events=1.21.1,@aws-cdk/aws-iam=1.21.1,@aws-cdk/aws-kms=1.21.1,@aws-cdk/aws-s3=1.21.1,@aws-cdk/core=1.21.1,@aws-cdk/cx-api=1.21.1,@aws-cdk/region-info=1.21.1,jsii-runtime=node.js/v13.2.0 Condition: CDKMetadataAvailable Conditions: CDKMetadataAvailable: Fn::Or: - Fn::Or: - Fn::Equals: - Ref: AWS::Region - ap-east-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-1 - Fn::Equals: - Ref: AWS::Region - ap-northeast-2 - Fn::Equals: - Ref: AWS::Region - ap-south-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-1 - Fn::Equals: - Ref: AWS::Region - ap-southeast-2 - Fn::Equals: - Ref: AWS::Region - ca-central-1 - Fn::Equals: - Ref: AWS::Region - cn-north-1 - Fn::Equals: - Ref: AWS::Region - cn-northwest-1 - Fn::Equals: - Ref: AWS::Region - eu-central-1 - Fn::Or: - Fn::Equals: - Ref: AWS::Region - eu-north-1 - Fn::Equals: - Ref: AWS::Region - eu-west-1 - Fn::Equals: - Ref: AWS::Region - eu-west-2 - Fn::Equals: - Ref: AWS::Region - eu-west-3 - Fn::Equals: - Ref: AWS::Region - me-south-1 - Fn::Equals: - Ref: AWS::Region - sa-east-1 - Fn::Equals: - Ref: AWS::Region - us-east-1 - Fn::Equals: - Ref: AWS::Region - us-east-2 - Fn::Equals: - Ref: AWS::Region - us-west-1 - Fn::Equals: - Ref: AWS::Region - us-west-2
関連ドキュメント
スタック削除時の動作の確認
cdk destroy
を実行してみると今度は CloudForamtion スタックも S3 バケットも削除されたのをコンソールで確認できました.
cdk destroy Are you sure you want to delete: Mks3Stack (y/n)? y Mks3Stack: destroying... 0 | 22:27:27 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | Mks3Stack User Initiated 0 | 22:27:30 | DELETE_IN_PROGRESS | AWS::S3::Bucket | CdkS3TestBucket (CdkS3TestBucketD2F17ADE) 0 | 22:27:30 | DELETE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata 1 | 22:27:31 | DELETE_COMPLETE | AWS::S3::Bucket | CdkS3TestBucket (CdkS3TestBucketD2F17ADE) 2 | 22:27:32 | DELETE_COMPLETE | AWS::CDK::Metadata | CDKMetadata ✅ Mks3Stack: destroyed
コンソール画面
まとめ
CDK で S3 の振る舞いについて書きました.ツールの振る舞いを理解して開発スピードをあげることに繋げられるようにしていきたいですね.この他にも CDK での理解したことはブログに書いていきます!