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
相关产品推荐
相关产品推荐

