【问题标题】:How to delete non empty s3 bucket with terraform?如何使用 terraform 删除非空 s3 存储桶?
【发布时间】:2023-03-24 05:31:01
【问题描述】:

我想删除使用 terraform 创建的非空 s3 存储桶。我也使用了 force_destroy=true 选项,但我仍然得到

BucketNotEmpty: The bucket you tried to delete is not empty
status code: 409, request id: xxxx, host id: xxxxxxx

bucket 也是使用 force_destroy 选项创建的:

resource "aws_s3_bucket" "pipelineartifactstore" {
  bucket = "${var.prefix}-${var.namespace}-${var.stage}-pipeline-artifactstore"
  acl    = "private"
  force_destroy = true
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
  tags = var.default_tags
}

【问题讨论】:

  • 您确定这是您的存储桶代码吗?该代码是正确的,它适用于版本和非版本存储桶。也许您设置了一些禁止删除某些对象的存储桶策略?
  • 我使用提供的代码创建了一个存储桶,将一些文件推入其中,使用和不使用版本控制对其进行了测试——我每次都能销毁它。我尝试使用生命周期 prevent_destroy = true 但消息在 TF14 中有所不同。
  • 我在一些不同的资源上使用它,但它现在可以工作了:D 谢谢@Marcin

标签: amazon-web-services amazon-s3 terraform


【解决方案1】:

在启用加密或版本控制之前可能会添加一些对象,因此请尝试使用 AWS cli 清空存储桶:

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

然后再次运行 Terraform 应用。

因为这是我想的 Codepipeline。

【讨论】:

  • 工作正常,谢谢!
【解决方案2】:

对于可以设置的存储桶有一个force_destroy 选项。当值为true时,它将删除桶中的所有项目,然后也删除桶。

设置完成后,您将能够删除资源,然后运行terraform apply,存储桶将被删除,无需任何额外的 CLI 步骤。

Documentation Link

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2017-06-08
    • 2019-08-09
    • 2014-11-03
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多