2017-08-14 229 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"