Terraform多子网关联NSG时subnet_id参数报错处理方法
错误原因
azurerm_subnet_network_security_group_association 资源的subnet_id参数仅接受单个子网ID的字符串值,你当前配置中用列表推导式生成的是子网ID的字符串列表,类型不匹配直接触发参数校验错误。
正确配置方案
你创建子网时已经通过for_each生成了多实例子网资源,关联NSG时同样需要用for_each遍历所有子网实例,为每个子网单独创建关联关系,不要试图在单个关联资源里传入多个子网ID。
替换你原来的关联资源配置为以下内容即可:
resource "azurerm_subnet_network_security_group_association" "example" { for_each = azurerm_subnet.subnet1 subnet_id = each.value.id network_security_group_id = azurerm_network_security_group.tamopsnsg.id }
补充说明
- 该配置完全复用你现有的子网变量、子网资源逻辑,不需要修改原有代码
- 后续你在
subnets变量中新增、删除子网配置时,Terraform会自动处理对应子网的NSG关联,不需要手动调整关联规则 - 这里必须和子网资源同样使用
for_each做遍历,不要用count:count按数组索引匹配资源,如果你调整子网变量的顺序,会导致关联资源意外重建删除,for_each按键值匹配的稳定性更高 - 额外提示:你贴的变量定义代码里,变量声明关键字拼写有误,正确关键字是
variable,不是varaible,不然Terraform初始化阶段就会报语法错误,记得修正。
内容的提问来源于stack exchange,提问作者Giridhar Kumar Jha
相关产品推荐
相关产品推荐

