我有一个简单的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保留创建的任何路径和文件,并且不删除它。
对于例如,如果一条路径已经存在,并且我将当前版本增加到2.0并推动代码,我希望Terraform保留
dev/v-1.0/app.zip
并将dev/v-1.0/app.zip
有办法做到这一点吗?
TF删除您的对象,因为这就是它的方式
works: 国家存在,但不再存在配置中。
一种克服这一点的方法是通过
非常简单的方法是使用局部 - exec,它将使用AWS CLI上传对象。这发生在tf的“外部”,因此TF将不会删除tf预先存在的对象,因为TF不会意识到它们。
对于@marcin指出的任何寻求本地-EXEC解决方案的人,您可以使用类似的东西:
for_each
注意,每当Terraform检测`var.current_version`variable.。