Terraform Terraform_远程_状态部分配置

Terraform Terraform_远程_状态部分配置,terraform,infrastructure,Terraform,Infrastructure,我的团队在很大程度上依赖于来自Terraform内部的S3远程状态。我们使用CLI的-backend config功能在初始化项目时指定S3配置,因此实际的地形代码如下所示: terraform { backend "s3" {} } 只要在CLI上使用-backend config指定所有S3属性,上述方法就非常有效 我们希望在配置的其他地方使用类似的策略来引用这些状态。由于后端的参数是动态的,并且是在CLI上指定的,因此我们也希望这样做 data "terraform_remote_s

我的团队在很大程度上依赖于来自Terraform内部的S3远程状态。我们使用CLI的
-backend config
功能在初始化项目时指定S3配置,因此实际的地形代码如下所示:

terraform {
  backend "s3" {}
}
只要在CLI上使用
-backend config
指定所有S3属性,上述方法就非常有效

我们希望在配置的其他地方使用类似的策略来引用这些状态。由于后端的参数是动态的,并且是在CLI上指定的,因此我们也希望这样做

data "terraform_remote_state" "dns" {
  backend = "s3"
  config {
    key = "configurations/production/dns/terraform.tfstate"
  }
}
在上面的示例中,我们省略了所需的
区域
参数,这当然会导致计划/应用失败(其中
不是有效区域:


有没有一种方法可以让我们从CLI为远程状态引用指定区域和bucket,而不是对它们进行硬编码?

后端块非常特殊,因为它在Terraform的工作流中很早就得到了处理,因此它无法访问普通的Terraform功能,例如变量。这就是为什么它有自己的特殊机制来配置它

另一方面,
terraform\u remote\u 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 \
    -var="dns_state_region=us-west-1" \
    -var="dns_state_key=configurations/production/dns/terraform.tfstate"

如何为后端配置指定S3属性?您是否通过帮助器脚本调用Terraform?