Terraform terraform_remote_state部分配置

3

我的团队在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中指定远程状态引用的区域和存储桶,而不是硬编码它们?

您是如何为后端配置指定S3属性的呢?您是否通过辅助脚本调用Terraform? - ydaetskcoR
1个回答

8

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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接