如何将固定实例数的azurerm_linux_virtual_machine_scale_set内网IP设为输出变量?
可以实现,具体方案如下
当使用固定实例数的azurerm_linux_virtual_machine_scale_set时,虽然VMSS资源本身没有直接导出实例内网IP的属性,但可以通过关联的网络接口(NIC)来获取这些IP地址,具体步骤如下:
1. 利用网络接口数据源筛选VMSS实例的网卡
每个VMSS实例都会对应一个独立的网络接口,默认命名规则为[VMSS名称][实例索引](例如example-vmss0、example-vmss1)。你可以通过azurerm_network_interface数据源批量获取这些网卡:
data "azurerm_network_interface" "vmss_nics" { for_each = toset(range(azurerm_linux_virtual_machine_scale_set.example.instances)) name = "${azurerm_linux_virtual_machine_scale_set.example.name}${each.value}" resource_group_name = azurerm_resource_group.example.name }
2. 定义输出变量提取内网IP
通过遍历上述数据源的结果,提取每个网卡的内网IP并输出:
output "vmss_private_ips" { type = map(string) description = "内网IP地址列表,键为实例索引,值为对应IP" value = { for idx, nic in data.azurerm_network_interface.vmss_nics : idx => nic.ip_configuration.0.private_ip_address } }
注意事项
- 如果你的VMSS网卡使用了自定义命名规则或标签,需要调整数据源的筛选条件(比如改用
tag_filter匹配特定标签)。 - 因为实例数是固定的,
range(azurerm_linux_virtual_machine_scale_set.example.instances)可以准确覆盖所有实例,避免遗漏或多余的查询。
内容的提问来源于stack exchange,提问作者muffel
相关产品推荐
相关产品推荐

