【问题标题】:Terraform update existing S3 configurationTerraform 更新现有 S3 配置
【发布时间】:2023-03-16 21:21:02
【问题描述】:

Terraform 有没有办法在不影响创建或删除存储桶的情况下更改现有 S3 存储桶?

例如,我想使用 Terraform 跨多个 AWS 账户启用 S3 复制。 S3 存储桶已经存在,我只想启用复制规则(通过管道),而不需要重新创建、删除或清空存储桶。

我的代码如下所示:

data "aws_s3_bucket" "test" {
  bucket = "example_bucket"
}

data "aws_iam_role" "s3_replication" {
  name = "example_role"
}

resource "aws_s3_bucket" "source" {
  bucket = data.aws_s3_bucket.example_bucket.id

  versioning {
    enabled = true
  }

  replication_configuration {
    role = data.aws_iam_role.example_role.arn

    rules {
          id = "test"
          status = "Enabled"

          destination {
            bucket = "arn:aws:s3:::dest1"
          }
    }
    rules {
          id = "test2"
          status = "Enabled"

          destination {
            bucket = "arn:aws:s3:::dest2"
          }
    }
  }
}

当我尝试这样做时,Terraform apply 会尝试删除现有存储桶并创建一个新存储桶,而不仅仅是更新配置。我不介意尝试 terraform import,但我担心当我运行 terraform destroy 时这也会破坏存储桶。我想简单地应用和销毁复制配置,而不是已经存在的存储桶。

【问题讨论】:

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


    【解决方案1】:

    我想简单地应用和销毁复制配置,而不是已经存在的存储桶。

    很遗憾,你不能这样做。您的存储桶必须导入到 TF 中才能由其管理。

    我不介意尝试 terraform import,但我担心这会在我运行 terraform destroy 时破坏存储桶。

    为了防止这种情况,您可以使用prevent_destroy

    此元参数设置为 true 时,将导致 Terraform 拒绝任何会破坏与资源关联的基础设施对象的计划,只要该参数仍然存在于配置中。

    【讨论】:

    • 不知道 prevent_destroy 功能,谢谢!
    • 看起来即使在导入之后,它仍在尝试删除 s3 存储桶并使用配置启动一个全新的 s3 存储桶。是否可以将复制配置添加到现有存储桶中?
    猜你喜欢
    • 2020-06-11
    • 2021-03-03
    • 2019-08-22
    • 2018-01-29
    • 2021-09-26
    • 2021-07-30
    • 2023-01-05
    • 2020-01-22
    • 2018-11-21
    相关资源
    最近更新 更多