我有一个名为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 回答
管理好解决它 . 使用Terraform Remote State时,您可以设置默认值:https://www.terraform.io/docs/providers/terraform/d/remote_state.html
当我的
data "terraform_remote_state.alb.subnets
没有返回值时,这适用于我的情况 . 我可以将变量预设为“”并使用locals来检查此变量 .它会是
subnet
还是subnets
?假设您有以下数据源:
您需要检查远程状态属性是否具有名称为
subnet
的任何输出 . 或者密钥名称是subnets
,您需要自己确认 .