2017-08-14 103 views
0

我的團隊嚴重依賴Terraform中的S3遠程狀態。我們使用CLI的-backend-config功能指定的S3的配置初始化項目時,讓我們的實際terraform代碼如下:Terraform terraform_remote_state部分配置

terraform { 
    backend "s3" {} 
} 

以上的偉大工程只要所有的S3屬性的CLI指定用-backend-config

我們希望在我們的配置中使用類似的策略來引用這些狀態。由於後端的參數是動態的,並在CLI中指定,我們希望這樣做。

data "terraform_remote_state" "dns" { 
    backend = "s3" 
    config { 
    key = "configurations/production/dns/terraform.tfstate" 
    } 
} 

在上面的例子中,我們省略了所需regionbucket參數,這當然會導致計劃/適用於失敗(並not a valid region:)。

有沒有一種方法,我們可以通過這種方法來指定區域和存儲區的遠程狀態引用從CLI而不是硬編碼它們?

+0

你是如何指定S3屬性後端配置?你是否通過助手腳本調用Terraform? – ydaetskcoR

回答

1

backend塊比較特殊,因爲它在Terraform的工作流程中很早得到處理,因此它無法訪問常規Terraform功能(如變量)。這就是爲什麼它有自己的配置它的特殊機制。

另一方面,數據源terraform_remote_state只是一個常規的數據源,所以任何常規插值策略都可以使用它。要從CLI通過設置,例如,你可以使用變量:

variable "dns_state_region" { 
} 

variable "dns_state_key" { 
} 

data "terraform_remote_state" "dns" { 
    backend = "s3" 
    config { 
    region = "${var.dns_state_region}" 
    key = "${var.dns_state_key}" 
    } 
} 

然後可以將這些傳遞給terraform plan命令:

$ terraform plan \ 
    -var="dns_state_region=us-west-1" \ 
    -var="dns_state_key=configurations/production/dns/terraform.tfstate"