インフラ

CDKで作成したECRをスタック削除時に同時に削除されるようにする

ECR

こんにちは、ちゃりおです。

デフォルトではCDKでECRを作成して、「cdk destroy」で削除したときにECRのリポジトリが残ります。
検証時は、「cdk destroy」でスタック削除と同時に消えてほしいです。

やり方を調べました。
結論から書くと、ecrのプロパティで「removalPolicy: cdk.RemovalPolicy.DESTROY」にするだけです。

Cloudformationにも触れつつ、解説します。

Contents

ECRを「cdk destroy」時に削除する

やりたいこと

「cdk destroy」と同時に、ECRのリポジトリを消したいです。

こんな感じでECRを作成します。

new ecr.Repository(this, "repo", {
  repositoryName: "sample-app-repo",
}

CDKでデプロイして、リポジトリを作成します。

$ cdk deploy
# リポジトリが作成される
$ aws ecr describe-repositories --query "repositories[].repositoryName" | grep sample-app-repo
    "sample-app-repo",

CDKでスタックを削除します。しかし、リポジトリが削除されません。

$ cdk destroy
# リポジトリが削除されない
$ aws ecr describe-repositories --query "repositories[].repositoryName" | grep sample-app-repo
    "sample-app-repo",

なぜ削除できないか

リポジトリの「DeletionPolicy」が「Retain」になっているから削除されませんでした。

CloudFormationのドキュメントを見てみると下記のような記述がありました。

AWS CloudFormation はスタックを削除する際、リソースやコンテンツを削除せず保持します。この削除ポリシーは、あらゆるリソースタイプに追加することができます。AWS CloudFormation がスタックの削除を完了すると、スタックの状態は Delete_Complete になりますが、保管されたリソースはその後も存在し続けます。それらのリソースを削除するまでは、対象料金が課金されます。

「Retain」だとスタック削除時もリソースは存在し続けます。

$ cdk synth
~~~省略~~~
Resources:
  repoBEC318EA:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: sample-app-repo
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
~~~省略~~~

リポジトリを削除できるようにする

「DeletionPolicy」を「Delete」に変更します。

new ecr.Repository(this, "repo", {
  repositoryName: "sample-app-repo",
  removalPolicy: cdk.RemovalPolicy.DESTROY
}

生成されるCloudFormationを見てみると「Delete」に変更されました。

$ cdk synth
~~~省略~~~
Resources:
  repoBEC318EA:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: sample-app-repo
    UpdateReplacePolicy: Delete
    DeletionPolicy: Delete
~~~省略~~~

これで「cdk destroy」時に、リポジトリも同時に削除されるようになりました。

まとめ

上記の設定を変更したことで、検証時にスタックの作成・削除が楽になりました。
想定した動作になっていない場合は、CloudFormation確認するのが大切だと思いました。

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

ECS
VPCエンドポイント作成時に気をつけたいこと ECSからCloudWatchLogsに接続できなくなったこんにちは、ちゃりおです。 ECS用のVPCエンドポイント作成時に、設定間違ってCloudWatchLogsに接続できなくなることがあ...
ECS
AWS CDKでECS Fargateに必要なVPCエンドポイントを作成するこんにちは、ちゃりおです。 ECSのデプロイ時のPullはNATGWを通すと通信量が高額になることがあると思います。 VPCエンドポイ...
ECR
ECRにイメージをpush/pullするときに便利なawscliコマンドこんにちは、ちゃりおです。 今回は、ECRにdockerイメージをpush/pullする際に便利なawsコマンドについてです。 aw...