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

Terraform中如何将子网引用至Virtual Network Gateway?

Terraform中引用虚拟网络内子网到虚拟网络网关的方法

要在azurerm_virtual_network_gateway的ip_configuration块中引用同文件内azurerm_virtual_network里定义的snet-vpg-dev子网,有两种可靠实现方式:

方式1:通过子网索引引用

如果确认该子网是虚拟网络下定义的第一个子网,可直接用索引获取其ID:

subnet_id = azurerm_virtual_network.virtual_network.subnet[0].id

方式2:通过子网名称筛选引用(推荐)

这种方式不受子网定义顺序影响,即使后续调整子网顺序或新增其他子网,也能精准匹配目标子网,更健壮:

subnet_id = one([for s in azurerm_virtual_network.virtual_network.subnet : s.id if s.name == "snet-vpg-dev"])

这里用one()函数是因为筛选后的结果是单元素列表,one()可直接提取列表中的唯一值。

修改后的完整虚拟网络网关代码

resource "azurerm_virtual_network_gateway" "virtual_network_gateway" {
  name                = "vgw-vgp-dev"
  location            = var.resource_group_location_north_europe
  resource_group_name = var.resource_group_name

  type     = "Vpn"
  vpn_type = "RouteBased"

  active_active = false
  enable_bgp    = false
  sku           = "Basic"

  ip_configuration {
    name                          = azurerm_public_ip.public_ip_address.name
    public_ip_address_id          = azurerm_public_ip.public_ip_address.id
    private_ip_address_allocation = "Static"
    # 推荐使用名称筛选的方式
    subnet_id                     = one([for s in azurerm_virtual_network.virtual_network.subnet : s.id if s.name == "snet-vpg-dev"])
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:35:26