Terraformでdestroyするときに「BucketNotEmpty」が出たときの対処法


S3バケットに対してdestroyしたときに

BucketNotEmpty: The bucket you tried to delete is not empty

とか言われて怒られることが結構あるんですよね

対処(CLI)

メッセージの通りなんですが、
S3バケットの中身が空でない(NotEmpty)の状態でバケット自体削除できないわけです。

なので、CLIで消してしまうというのが一つの手

aws s3 rm s3://bucket-name --recursive

いちいち消すのが面倒くさい(tfでやりたいときは)ときは下記の通り

対処(Terraform)

resource "aws_s3_bucket" "default" {
  bucket        = "bucket-name"
}

resource "null_resource" "default" {
  triggers = {
    bucket   = aws_s3_bucket.default.bucket
  }
  depends_on = [
    aws_s3_bucket.default
  ]
  provisioner "local-exec" {
    when = destroy
    command = "aws s3 rm s3://${self.triggers.bucket} --recursive"
  }
}

解説
null_resourceブロックをつかって
depends_onで依存関係を作る

local-execwhen=destroyで実行するタイミングをdestroy時だけに限定

CLIでS3の中身を消す

いじょ!