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

Azure BICEP部署虚拟网络时如何保留已存在的独立创建子网

Bicep部署虚拟网络不删除外部创建子网的解决方法

你遇到的问题是Bicep部署虚拟网络时的默认行为导致的:如果在virtualNetwork.main.bicep的VNet资源属性中显式定义了subnets数组,Azure会将这个数组作为该VNet下子网的全量期望状态,部署时会自动删除所有不在这个数组里的子网资源。

解决方法

方法1:主VNet模板中不声明subnets属性(最推荐)

这是实现VNet全局管控和子网独立创建的最优方案,你只需要在主VNet模板中定义VNet的核心全局配置,完全省略subnets字段即可,此时部署VNet不会对子网生命周期做任何管控,自然不会删除外部创建的子网。

示例virtualNetwork.main.bicep代码:

param location string = resourceGroup().location
param vnetAddressPrefix string = '10.0.0.0/16'

resource mainVnet 'Microsoft.Network/virtualNetworks@2023-09-01' = {
  name: 'global-main-vnet'
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        vnetAddressPrefix
      ]
    }
    // 全局管控配置,例如DNS、DDos保护、加密等,完全不写subnets属性
    dhcpOptions: {
      dnsServers: [
        '10.0.0.10',
        '10.0.0.11'
      ]
    }
    enableDdosProtection: false
  }
}

// 输出VNet信息供子网部署模板引用
output vnetId string = mainVnet.id
output vnetName string = mainVnet.name

独立子网部署模板subnet.main.bicep示例:

param location string = resourceGroup().location
param vnetName string
param subnetName string = 'business-app-subnet'
param subnetAddressPrefix string = '10.0.1.0/24'

// 引用已存在的主VNet
resource mainVnet 'Microsoft.Network/virtualNetworks@2023-09-01' existing = {
  name: vnetName
}

// 独立创建子网,作为VNet的子资源
resource appSubnet 'Microsoft.Network/virtualNetworks/subnets@2023-09-01' = {
  parent: mainVnet
  name: subnetName
  properties: {
    addressPrefix: subnetAddressPrefix
    // 可自定义NSG、路由表、服务端点等配置
  }
}

方法2:主模板单独声明需管控的核心子网

如果需要在主VNet模板中部署部分必须全局管控的子网(例如网关子网、防火墙子网),不要把这些子网配置放到VNet的subnets数组中,而是单独作为子资源声明,不会影响其他独立创建的子网。

在上述主VNet模板基础上补充网关子网声明的示例:

// 单独声明网关子网,不影响其他外部创建的子网
resource gatewaySubnet 'Microsoft.Network/virtualNetworks/subnets@2023-09-01' = {
  parent: mainVnet
  name: 'GatewaySubnet'
  properties: {
    addressPrefix: '10.0.255.0/24'
  }
}

方法3:动态合并现有子网配置

如果必须在主VNet模板的subnets数组中声明配置,可在部署前通过Azure CLI/资源 Graph 读取当前VNet下已存在的所有子网配置,作为参数传入主模板,和你需要管控的子网数组合并后再赋值给subnets属性,即可避免删除已有子网。

注意事项

  • 部署时必须使用增量部署模式,不要使用完整部署模式,完整部署模式会删除资源组内所有未在模板中声明的资源
  • 不要在VNet资源的properties中显式定义空的subnets数组,空数组会被识别为期望该VNet下无任何子网,同样会删除已有子网

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:06:05