使用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
相关产品推荐
相关产品推荐

