0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CDK Destroy時に不要なリソースを残さないようにしよう

Posted at

はじめに

最近CDKを触っていて、cdk destroyでスタックを削除したにも関わらず、料金が発生していることがありました。
原因は、スタック削除後にもリソースが残ってしまっていたことでしたので、今回はその対応について記載をしていきます。
今回対応したリソースはS3とRDSになります。

1. S3

以下のようにデフォルト値でS3バケットを作成すると、スタックを削除してもS3バケットは残る設定となっています。
※DeletionPolicyが Retainのため

    new s3.Bucket(this, 'Bucket', {
    });

スタック削除時にバケットも削除するには以下のようにパラメータを追加します。
これにより、DeletionPolicyが Deleteに変更され、スタック削除時にバケットも削除する挙動となります。

    new s3.Bucket(this, 'Bucket', {
        removalPolicy: cdk.RemovalPolicy.DESTROY,
    });

ただし、S3バケットはバケット内のオブジェクトが空でないと削除ができません。
そのため、スタックが削除される際に、すべてのオブジェクトを自動的に削除されるようautoDeleteObjectsパラメータを追加します。

    new s3.Bucket(this, 'Bucket', {
        removalPolicy: cdk.RemovalPolicy.DESTROY,
        autoDeleteObjects: true,
    });

autoDeleteObjects: trueを設定することにより、削除処理用のLambda関数が自動生成されます。
スタック削除時にLambda関数自体は削除されますが、Lambdaの実行ログ(CloudWatch ロググループ)は削除されないようでした。
image.png

そのため、現在は必要に応じてスタック削除後に手動でロググループを削除するようにしています。

2. RDS

デフォルト値でRDSのデータベースを作成すると、スタックを削除時に最終スナップショットが取得され、料金が発生します。
※DeletionPolicyが Snapshotとなっているため。
スナップショットを取得せずに削除するには、以下のようにremovalPolicyをDESTROYに設定します。

    new rds.DatabaseInstance(this, 'RdsInstance', {
      removalPolicy: cdk.RemovalPolicy.DESTROY, // default: SNAPSHOT
      engine: rds.DatabaseInstanceEngine.mysql({
        version: rds.MysqlEngineVersion.VER_8_0_40,
      }),
      vpc: props.vpc,
      vpcSubnets: {
        subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
      },
    });

これによりDeletionPolicyが Deleteに変更され、スタック削除時にスナップショットを取得せずにRDSインスタンスが削除されるようになります。

まとめ

CDKは、少ない記述量でリソースを設定できるだけでなく、リソース間の権限を自動的に適切な設定を行ってくれるため、細かく記述する手間を省ける点が便利です。
一方で、コードに明示的に記述していないリソースが生成されることもあり、その把握が難しいと感じることがあります。
今回の対応についてはCloudFormationの仕様に関する部分が大きかったですが、ナレッジを蓄えられてよかったです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?