我有一個簡單的 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到存盤桶中。
有沒有辦法做到這一點 ?
uj5u.com熱心網友回復:
TF 洗掉您的物件,因為它是這樣作業的:
銷毀狀態中存在但配置中不再存在的資源。
解決此問題的一種方法是將所有物件保留在配置中,通過for_each. 通過這種方式,您可以不斷向現有物件的地圖添加新版本,而不是不斷替換它們。如果您要創建多個版本,這可能會出現問題,因為您必須保留所有版本。
可能更簡單的方法是使用local-exec,它將使用 AWS CLI 上傳物件。這發生在 TF 的“外部”,因此 TF不會洗掉預先存在的物件,因為 TF 不會意識到它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/394573.html
上一篇:TerraformCodepipeline在不同區域部署
下一篇:AWSCLI創建檔案夾并上傳檔案
