Terraform terraform_remote_state部分配置

时间:2017-08-14 23:26:49

标签: terraform infrastructure

我的团队在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"
  }
}

在上面的示例中,我们省略了必需的regionbucket参数,这当然会导致计划/应用失败(使用not a valid region:)。

是否有一种方法可以从CLI为远程状态引用指定区域和存储区而不是对其进行硬编码?

1 个答案:

答案 0 :(得分:3)

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"