Open5
カスタムリソースを使ってECRのイメージ、S3のオブジェクトを削除する
カスタムリソースとは
カスタムリソースを使用すると、CloudFormation テンプレートにカスタムプロビジョニングロジックを記述し、スタックを作成、更新 (カスタムリソースを変更した場合)、または削除するたびに CloudFormation にそのロジックを実行させることができます。これは、プロビジョニング要件に、CloudFormation の組み込みリソースタイプでは表現できない複雑なロジックやワークフローが含まれる場合に役立ちます。
- ECRリポジトリを作成したスタックを削除しようとすると、ECRにイメージが残っている場合ECRの削除に失敗する。(S3も同様)
- 今まではコンソール上でイメージを削除していたが、面倒作業であるので自動化したい
AWS::ECR::Repository
のプロパティにいつの間にかEmptyOnDelete
が追加されている。
(確か今まではなかった)
If true, deleting the repository force deletes the contents of the repository. If false, the repository must be empty before attempting to delete it.
EmptyOnDelete
をtrue
にすることでわざわざリポジトリ内のイメージを消さなくても、スタックの削除ができそう
試してみた。
環境準備
- cfnファイルの用意
-
EmptyOnDelete: true
を設定する
-
AWSTemplateFormatVersion: 2010-09-09
Description: >
test delete ecr repo
Resources:
TestRepo:
Type: AWS::ECR::Repository
Properties:
RepositoryName: "test-repo"
EmptyOnDelete: true
- 作成されたリポジトリに適当なイメージをpushする
スタックを削除
問題なくスタックの削除ができた。
コンソール上での作業がなくなるのでだいぶ楽になりそう
S3側の確認
AWSのドキュメントを見てみたがEmptyOnDelete
のようなプロパティは今のところなさそうだった。
You can only delete empty buckets. Deletion fails for buckets that have contents.
コチラは消す作業が必要
カスタムリソースを試してみる
- Typeに
AWS::CloudFormation::CustomResource
を指定することでカスタムリソースの設定ができる-
Custom::String
でもできそう
-
- 指定できるプロパティは
ServiceTimeout
とServiceToken
の2つ -
ServiceTimeout
はカスタムリソースの操作がタイムアウトするまでの時間- 1~3600秒の間で設定
- デフォルトは3600秒(1時間)
-
ServiceToken
でSNSトピックかLambdaのARNを指定してあげる必要がある- 更新はできない
- 連携するリソースは同じリージョンでなければならない
参考