【问题标题】:Terraform: Undefined remote state handlingTerraform:未定义的远程状态处理
【发布时间】:2018-03-12 19:06:51
【问题描述】:

我有一个名为子网的远程状态属性,它存储在:data.terraform_remote_state.alb.subnets

根据我正在部署的内容,此属性要么存在,要么不存在。

当我尝试创建 ECS 集群时,需要输入我想在其中使用的子网组:

data.terraform_remote_state.alb.subnets 或者 var.vpc_subnets(VPC 的子网)

不幸的是,由于插值的工作方式,需要一起破解:

"${split(",", length(var.vpc_subnets) == 0 ? join(",",data.terraform_remote_state.alb.subnets) : join(",",var.vpc_subnets))}"

(参考:https://github.com/hashicorp/terraform/issues/12453

但是,由于 Terraform 似乎不会“懒惰地”评估三元运算符,因此即使 var.vpc_subnets 不为零,它也会向我抛出以下错误:

Resource 'data.terraform_remote_state.alb' does not have attribute 'subnets' for variable 'data.terraform_remote_state.alb.subnets'

如何正确处理可能未定义的远程状态资源?

编辑:错字:子网->子网

【问题讨论】:

  • 为什么不直接使用aws_subnet_ids 数据源来获取子网ID?

标签: terraform


【解决方案1】:

设法弄明白了。 使用 Terraform 远程状态时,您可以设置默认值:https://www.terraform.io/docs/providers/terraform/d/remote_state.html

当我的data "terraform_remote_state.alb.subnets 没有返回值时,这适用于我的情况。我可以将变量预设为 "" 并使用局部变量来检查这个变量。

【讨论】:

    【解决方案2】:

    subnet 还是subnets

    假设您有以下数据源:

    data "terraform_remote_state" "alb" {
      backend = "s3"
      config {
        name = "alb"
      }
    }
    

    您需要检查远程状态属性是否有任何名称为subnet 的输出。或者键名是subnets,需要自己确认。

    【讨论】:

    • 抱歉,打错了,是子网(复数)。我验证了如果这个数据源确实存在,它确实会提取正确的值
    • 你还有这个问题吗?
    猜你喜欢
    • 2016-11-24
    • 2016-12-22
    • 1970-01-01
    • 2021-12-11
    • 2019-07-28
    • 2018-03-17
    • 1970-01-01
    • 2019-11-04
    • 2020-03-21
    相关资源
    最近更新 更多