大量作成した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
になっているのは良いこと👏