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

Terraform:未定义的远程状态处理,terraform,Terraform,我有一个名为subnets的远程状态属性,它存储在:data.terraform\u remote\u state.alb.subnets中 根据部署的内容,此属性存在或不存在 当我尝试创建ECS群集时,它需要输入我要使用的子网组: data.terraform\u remote\u state.alb.子网 或 var.vpc_子网(vpc的子网) 不幸的是,由于插值的工作方式,需要将其拼凑在一起: "${split(",", length(var.vpc_subnets) == 0 ? jo

我有一个名为subnets的远程状态属性,它存储在:data.terraform\u remote\u state.alb.subnets中

根据部署的内容,此属性存在或不存在

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

data.terraform\u remote\u state.alb.子网 或 var.vpc_子网(vpc的子网)

不幸的是,由于插值的工作方式,需要将其拼凑在一起:

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

然而,由于Terraform似乎不会“懒散地”计算三元运算符,因此即使var.vpc_子网不为零,它也会引发以下错误:

Resource 'data.terraform_remote_state.alb' does not have attribute 'subnets' for variable 'data.terraform_remote_state.alb.subnets'
如何正确处理可能未定义的远程状态资源


编辑:输入:子网->子网

它是
子网
还是
子网

假设您有以下数据源:

data "terraform_remote_state" "alb" {
  backend = "s3"
  config {
    name = "alb"
  }
}
您需要检查“远程状态”属性是否有任何名称为
子网的输出。或者密钥名称是
子网
,您需要自己确认。

设法找到它。 使用Terraform Remote State时,您可以设置默认值:


当我的
数据“terraform\u remote\u state.alb.subnets
不返回值时,这在我的情况下有效。我可以将变量预设为“”,并使用局部变量对此变量进行检查。

为什么不使用
aws\u subnet\u ID
数据源来获取子网ID?抱歉,输入错误,它是子网(复数)。我已验证,如果此数据源确实存在,则它确实拉入了正确的值。您是否仍然存在此问题?