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

如何通过Terraform获取Azure虚拟机规模集(VMSS)的私有IP地址

解决Azure虚拟机规模集Terraform输出私有IP的方法

核心原因

你无法直接从azurerm_virtual_machine_scale_set资源的network_profile属性拿到私有IP,是因为该属性仅存储VMSS的网卡配置模板,实际分配的私有IP属于每个VM实例独立生成的网卡资源,需要通过数据源拉取实例级网卡信息获取。

操作步骤

  1. (可选)补全VMSS IP配置属性
    先确保你的VMSS的ip_configuration块中明确指定IP版本(不补全也可正常运行,添加后配置稳定性更高):
# 以主网卡配置为例,第二个网卡同理补充即可
ip_configuration {
  name                                   = "ip"
  primary                                = true
  subnet_id                              = module.subnet.id
  private_ip_address_version             = "IPv4" # 新增项,需要IPv6的话修改为对应值即可
}
  1. 新增VMSS实例网卡数据源
    通过azurerm_virtual_machine_scale_set_network_interface数据源批量拉取所有VM实例的网卡信息:
data "azurerm_virtual_machine_scale_set_network_interface" "vmss_nics" {
  for_each                      = toset(azurerm_virtual_machine_scale_set.test.instances[*].instance_id)
  name                          = "${local.name}-nic-1" # 要获取哪个网卡的IP就填对应网卡名,拿第二个网卡改为${local.name}-nic-2
  virtual_machine_scale_set_id  = azurerm_virtual_machine_scale_set.test.id
  virtual_machine_id            = each.value
}
  1. 定义私有IP输出项
    按需要输出所有实例的私有IP即可:
# 输出所有VMSS实例的对应网卡私有IP列表
output "vmss_private_ip_list" {
  value = [for nic in data.azurerm_virtual_machine_scale_set_network_interface.vmss_nics : nic.private_ip_address]
}

如果需要按实例ID映射IP,也可以修改输出值为键值对格式:

output "vmss_instance_ip_map" {
  value = { for instance_id, nic in data.azurerm_virtual_machine_scale_set_network_interface.vmss_nics : instance_id => nic.private_ip_address }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:48:03