我有一个名为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'
如何正确处理可能未定义的远程状态资源?
编辑:错字:子网 - >子网
答案 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
,您需要自己确认。