我的团队在很大程度上依赖Terraform内部的S3远程状态 . 我们使用CLI的 -backend-config
功能在初始化项目时指定S3配置,因此我们的实际terraform代码如下所示:
terraform {
backend "s3" {}
}
只要在CLI上使用 -backend-config
指定了所有S3属性,上述工作就会很好 .
我们想在我们的配置中使用类似的策略来引用其他地方的这些状态 . 由于后端的参数是动态的并且在CLI上指定,因此我们希望执行相同的操作 .
data "terraform_remote_state" "dns" {
backend = "s3"
config {
key = "configurations/production/dns/terraform.tfstate"
}
}
在上面的示例中,我们省略了所需的 region
和 bucket
参数,这当然会导致计划/应用失败(使用 not a valid region:
) .
有没有一种方法可以通过CLI指定远程状态引用的区域和存储区而不是硬编码?
1 回答
backend
块非常特殊,因为它在Terraform中得到了如此早的处理's workflow, and thus it doesn' t可以访问常规的Terraform功能,例如变量 . 这就是为什么它有自己的特殊机制来配置它 .另一方面,
terraform_remote_state
数据源只是一个常规数据源,因此可以使用任何常规插值策略 . 例如,要从CLI传递设置,您可以使用变量:然后,您可以将这些传递给
terraform plan
命令: