防止 Terraform 删除 S3 中的现有路径
Prevent Terraform from deleting existing paths in S3
我有一个简单的 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
添加到水桶。
有办法吗?
TF 删除您的对象,因为它就是这样 works:
Destroy resources that exist in the state but no longer exist in the configuration.
克服这个问题的一种方法是通过for_each
在配置中保留所有对象。通过这种方式,您可以不断将新版本添加到现有对象的映射中,而不是不断替换它们。如果您要创建很多版本,这可能会有问题,因为您必须保留所有版本。
可能更简单的方法是使用 local-exec,它将使用 AWS CLI 上传对象。这发生在 TF 的“外部”,因此 TF 将不会删除 预先存在的对象,因为 TF 不会意识到它们。
我有一个简单的 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
添加到水桶。
有办法吗?
TF 删除您的对象,因为它就是这样 works:
Destroy resources that exist in the state but no longer exist in the configuration.
克服这个问题的一种方法是通过for_each
在配置中保留所有对象。通过这种方式,您可以不断将新版本添加到现有对象的映射中,而不是不断替换它们。如果您要创建很多版本,这可能会有问题,因为您必须保留所有版本。
可能更简单的方法是使用 local-exec,它将使用 AWS CLI 上传对象。这发生在 TF 的“外部”,因此 TF 将不会删除 预先存在的对象,因为 TF 不会意识到它们。