首页 文章

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

提问于
浏览
1

我有一个名为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

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

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

  • 1

    它会是 subnet 还是 subnets

    假设您有以下数据源:

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

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

相关问题