Terraform配置Azure Cosmos DB多子网ID报错:无法访问字符串属性
解决Terraform中azurerm_cosmosdb_account添加多子网virtual_network_rule的报错问题
错误原因
你遇到的报错核心是:data.azurerm_subnet.np-subnets.*.id返回的是纯字符串类型的子网ID列表,但你在dynamic块里错误地尝试访问virtual_network_rule.value.id——字符串属于原始类型,没有id属性,因此触发"Can't access attributes on a primitive-typed value (string)"错误。
修复方案
提供两种可行的修改方式,按需选择:
方案1:直接使用子网ID字符串列表
既然data.azurerm_subnet.np-subnets.*.id已经是子网ID的字符串集合,直接在dynamic块中引用virtual_network_rule.value即可:
dynamic "virtual_network_rule" { for_each = data.azurerm_subnet.np-subnets.*.id content { id = virtual_network_rule.value ignore_missing_vnet_service_endpoint = true } }
方案2:遍历子网数据源对象(更具扩展性)
如果后续可能需要用到子网的其他属性(比如名称、地址前缀等),可以直接遍历整个子网数据源对象,再访问其id属性:
dynamic "virtual_network_rule" { for_each = data.azurerm_subnet.np-subnets content { id = virtual_network_rule.value.id ignore_missing_vnet_service_endpoint = true } }
验证建议
修改后执行terraform plan,检查生成的virtual_network_rule块是否正确关联了所有目标子网ID,确认配置无误后再执行terraform apply。
内容的提问来源于stack exchange,提问作者NickP
相关产品推荐
相关产品推荐

