You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform调用GCP子网模块获取ID报错:Unsupported attribute

解决Terraform引用subnets-beta模块子网ID的报错问题

问题原因

你使用的terraform-google-modules/network/google//modules/subnets-beta(v5.0.0)模块,其输出结构中没有直接的id属性,每个模块实例的输出只有subnets属性——这是一个包含子网详细信息的列表,每个列表元素才包含id、name等子网属性。你直接尝试访问模块实例的id属性,自然会触发"Unsupported attribute"错误。

解决方案

1. 单个子网ID的引用

如果你的for_each遍历的每个元素对应一个子网配置(即每个模块实例只创建一个子网),可以通过模块实例的subnets列表的第一个元素获取ID:

# 假设要引用key为"subnet-1"的子网ID
module.subnets["subnet-1"].subnets[0].id

2. 获取所有子网ID的列表

如果需要收集所有创建的子网ID形成列表,使用Terraform的flatten函数配合嵌套for表达式提取:

locals {
  subnet_ids = flatten([
    for subnet_module in module.subnets : [
      for subnet in subnet_module.subnets : subnet.id
    ]
  ])
}

之后在package_mirror模块中直接引用local.subnet_ids即可。

示例代码参考

子网模块调用示例

module "subnets" {
  source  = "terraform-google-modules/network/google//modules/subnets-beta"
  version = "5.0.0"
  for_each = local.subnets

  network_name = "your-vpc-name"
  project_id   = "your-project-id"
  region       = each.value.region
  subnets = [
    {
      name               = each.value.name
      ip_cidr_range      = each.value.cidr
      private_ip_google_access = true
    }
  ]
}

引用子网ID列表到package_mirror模块

module "package_mirror" {
  source = "./path/to/package_mirror"

  # 传入子网ID列表
  subnet_ids = local.subnet_ids
  # 其他模块参数...
}

内容的提问来源于stack exchange,提问作者Fran Luz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:16:56