我的团队严重依赖 Terraform 中的 S3 远程状态。我们使用-backend-config
CLI 的功能是在初始化项目时指定 S3 配置,因此我们实际的 terraform 代码如下所示:
terraform {
backend "s3" {}
}
只要在 CLI 上指定所有 S3 属性,上述方法就可以很好地工作-backend-config
.
我们希望在配置中的其他地方使用类似的策略来引用这些状态。由于后端的参数是动态的并且在 CLI 上指定,因此我们希望做同样的事情。
data "terraform_remote_state" "dns" {
backend = "s3"
config {
key = "configurations/production/dns/terraform.tfstate"
}
}
在上面的例子中,我们省略了必需的region
and bucket
参数,这当然会导致计划/应用失败(not a valid region:
).
是否有一种方法可以让我们从 CLI 指定远程状态引用的区域和存储桶,而不是对它们进行硬编码?
The backend
block 相当特殊,因为它在 Terraform 工作流程中很早就被处理,因此它无法访问正常的 Terraform 功能,例如变量。这就是为什么它有自己特殊的配置机制。
The 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)