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

使用for_each创建Azure子网后,如何正确引用指定子网ID?

解决Terraform中通过for_each创建子网后引用指定子网ID的问题

报错原因

你用azurerm_subnet.subnet[1].id触发报错,核心原因是通过for_each创建的Terraform资源实例是映射(Map)结构,而非列表(List)。映射仅支持通过键名(Key)访问元素,不能使用数字索引。

你的子网资源配置中,for_each表达式为{ for subnets in var.vnet : subnets.name => subnets },这意味着资源实例的键是每个子网的name字段值(即TEST、TEST2、TEST4),而非数字序列。

解决方案

要获取名称为TEST2的子网ID,直接用对应的键名访问即可:

subnet_id = azurerm_subnet.subnet["TEST2"].id

修正后的NIC资源配置

resource "azurerm_network_interface" "int" {
  count = 2
  enable_accelerated_networking = false
  enable_ip_forwarding          = false
  location                      = var.location
  name                          = lower("nic-${count.index}")
  resource_group_name           = azurerm_resource_group.rg.name
  ip_configuration {
    name                          = "ipconfig0"
    primary                       = true
    private_ip_address            = var.ip // 注意移除原配置中多余的引号,否则会被当作字符串字面量
    private_ip_address_allocation = "Static"
    private_ip_address_version    = "IPv4"
    subnet_id                     = azurerm_subnet.subnet["TEST2"].id
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:50