ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Terraform】S3やECRに中身が入っていても一気にterraform destroyする方法

この記事を共有する

目次

はじめに

皆さんこんにちは!パーソル&サーバーワークスの榎本です。
terraform destroyでリソース削除を行う際、リソースに中身が入っているから削除できないというエラーが表示されたことはありませんか?
最近は検証でTerraformをよく使っているのですが、毎回手動で中身を消すのではなく一気にリソース消したいと思っていたところ、よい解決策を見つけたので共有いたします!
今回はS3とECRの場合でお伝えいたします!

本記事の目的

S3とECRをTerraformで構築した後、中身が入っていても terraform destroy コマンドで一気にリソース削除ができるようになること

前提

  • S3バケットにオブジェクトが存在すること

S3BucketObject.png

  • ECRリポジトリにイメージが存在すること

ECRrepositryImage.png

エラー内容

S3

Error: ECR Repository(xxxxxxxxxx)not empty, consider using force_delete: operation error ECR: DeleteRepository, https response error StatusCode 400, RequestID:xxxxxxxxxx,
RepositoryNotEmptyException: The repository with name 'xxxxxxxxxx' in registry with id 'xxxxxxxxxx' cannot be deleted because it still contains images

S3DestroyError.png

ECR

Error: deleting S3 Bucket(xxxxxxxxxx): operation error S3: DeleteBucket, https response error StatusCode 409, RequestID:xxxxxxxxxx, HostID:xxxxxxxxxx,
api error BucketNotEmpty: The bucket you tried to delete is not empty

ECRDestroyError.png

要望

S3とECRに中身が入っていても terraform destroy コマンドで一気にリソース削除がしたい

解決策

S3とECRを作成するtfファイルにて、S3バケットを作成するための記載箇所とECRリポジトリを作成するための記載箇所に以下追記する

S3

force_destroy = true

s3ForceDestroy.png

ECR

force_delete = true

ecrForceDelete.png

削除成功画面

TerraformDestroyComplete.png

注意点

terraform apply コマンドでリソースを構築する前に上記記載をしておく必要があります。
terraform apply 時にterraform.tfstateファイルに以下のように記載されてしまうためです。

  • S3
"force_destroy" = false
  • ECR
"force_delete" = null

※ただし、terraform.tfstateファイルを以下のように直接修正することで、 terraform apply 後でも対応することは可能です。

  • S3
"force_destroy" = true
  • ECR
"force_delete" = true

まとめ

検証などで頻繁に terraform destroy コマンドを実行する際は、本設定を入れておくとスムーズに削除ができるため便利です!
必要に応じてぜひ使ってみてください!

この記事は私が書きました

榎本 将希

記事一覧

2024 Japan AWS All Certifications Engineers   サッカー観戦とサウナが好きです!   機械学習を勉強中です!

榎本 将希

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。