【问题标题】:Terraform terraform_remote_state Partial ConfigurationTerraform terraform_remote_state 部分配置
【发布时间】:2017-08-14 23:26:49
【问题描述】:

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

【问题讨论】:

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

标签: terraform infrastructure


【解决方案1】:

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"

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-11-20
    • 2019-11-17
    • 2020-11-24
    相关资源
    最近更新 更多