首页 文章

Terraform terraform_remote_state部分配置

提问于
浏览
0

我的团队在很大程度上依赖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 回答

  • 2

    backend 块非常特殊,因为它在Terraform中得到了如此早的处理's workflow, and thus it doesn' t可以访问常规的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"
    

相关问题