【问题标题】:Prevent Terraform from deleting existing paths in S3防止 Terraform 删除 S3 中的现有路径
【发布时间】:2022-01-26 02:08:28
【问题描述】:

我有一个简单的 Terraform 代码,用于在 S3 中管理应用程序的版本代码

我想在 S3 中管理此代码的多个版本。

我的代码如下:

main.tf

resource "aws_s3_bucket" "caam_test_bucket" {
  bucket = "caam-test-bucket"

  versioning {
    enabled = true
  }
}

resource "aws_s3_bucket_object" "caam_test_bucket_obj" {
  bucket = aws_s3_bucket.caam_test_bucket.id
  key    = "${var.env}/v-${var.current_version}/app.zip"
  source = "app.zip"
}

每次更新代码时,我将其导出到 app.zip,增加变量 current_version 并推送 terraform 代码。

这里的问题是,它不是在 S3 存储桶中保留多个版本文件夹,而是删除现有的一个并创建另一个。

我希望 Terraform 保留创建的所有路径和文件,而不是将其删除。

例如,如果路径 dev/v-1.0/app.zip 已经存在并且我将当前版本增加到 2.0 并推送代码,我希望 Terraform 保留 dev/v-1.0/app.zip 并将 dev/v-2.0/app.zip 添加到存储桶中。

有没有办法做到这一点?

【问题讨论】:

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


    【解决方案1】:

    TF 删除你的对象,因为它就是这样works:

    销毁状态中存在但配置中不再存在的资源。

    解决此问题的一种方法是通过for_each将所有对象保留在配置中。这样,您将不断向现有对象的地图添加新版本,而不是不断替换它们。如果您要创建大量版本,这可能会出现问题,因为您必须保留所有版本。

    可能更简单的方法是使用local-exec,它将使用 AWS CLI 上传对象。这发生在 TF 的“外部”,因此 TF 将不会删除预先存在的对象,因为 TF 不会意识到它们。

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 1970-01-01
      • 2018-05-06
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多