大量作成したS3バケットをterraformで一気に消し去る

こんなことはないだろうか?
ログ用のS3バケットを20個を用意した。
こんな感じに。

resource "aws_s3_bucket" "test" {
  count  = 20
  bucket = "test-ye038x5o-${count.index + 1}"
}

そして、開発・検証を経て、一旦全部削除することになった!
この時、素直にterraformでS3バケットを削除しようとするとエラーが。。。

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

原因は、S3バケットに入っているオブジェクトを全て削除してからでないと、バケットは削除できないから。
AWS Consoleから手動で削除することも可能だが、20個もポチポチクリックしていくのは面倒だ。

そこで調べてみると、
terraform force_destroy 引数があった!

force_destroy - (Optional, Default:false)

Terraform Registry

この引数を True にすることで、S3バケット内にオブジェクトがあっても、S3バケットが削除できる。

resource "aws_s3_bucket" "test" {
  count  = 20
  bucket = "test-ye038x5o-${count.index + 1}"

  force_destroy = true
}

これでスッキリ削除できた!

Apply complete! Resources: 0 added, 1 changed, 20 destroyed.

開発中であれば、このオプションを使って、無駄な時間を削減できる。

また、本番環境であったり、大事なデータが入っている時に、うっかり削除してしまうのは辛いので、デフォルトで False になっているのは良いこと👏