Terraform:未定义的远程状态处理

时间:2018-03-08 21:42:41

标签: terraform

我有一个名为subnets的远程状态属性,存储在: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'

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

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

2 个答案:

答案 0 :(得分:1)

管理解决问题。 使用Terraform Remote State时,您可以设置默认值:https://www.terraform.io/docs/providers/terraform/d/remote_state.html

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

答案 1 :(得分:0)

subnet还是subnets

假设您拥有以下数据源:

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

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