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

如何通过Bicep更新现有Azure防火墙的公网IP属性?

Bicep更新现有Azure防火墙公网IP的正确方案

不需要强制使用独立的Az CLI/PowerShell命令完成更新,你之前的写法问题出在对existing关键字的用法理解错误。

核心误区说明

Bicep中标记为existing的资源块仅用于引用已部署资源、读取其属性供其他部署逻辑使用,不会对目标资源触发任何创建/更新操作,因此在existing块内定义properties等配置属性本身就是无效语法,不会生效。

正确实现方式

Bicep基于ARM部署引擎实现,只要你声明的资源和现有资源的资源ID完全匹配(即订阅、资源组、资源类型、资源名、API版本一致),部署时就会自动对现有资源执行更新操作,不需要加existing关键字。

注意:更新Azure防火墙IP配置时,必须在ipConfigurations数组中包含所有需要保留的原有IP配置,不能仅传入新增IP,否则原有配置会被覆盖。

参考代码

param firewallName string
param location string = resourceGroup().location
param vnetName string
param vnetResourceGroup string = resourceGroup().name
param subscriptionId string = subscription().subscriptionId

// 引用需要关联的所有公网IP:包含原有保留的IP、新增的IP
// 原有公网IP
resource existingFwPip 'Microsoft.Network/publicIPAddresses@2021-05-01' existing = {
  name: 'fw-primary-pip'
}
// 新增公网IP(如果是同模板新建的就去掉existing,这里示例引用已存在的新增IP)
resource newFwPip 'Microsoft.Network/publicIPAddresses@2021-05-01' existing = {
  name: 'fw-additional-pip'
}

// 注意:不要加existing关键字,声明同ID资源即可触发更新
resource firewall 'Microsoft.Network/azureFirewalls@2021-05-01' = {
  name: firewallName
  location: location
  properties: {
    // 必须完整传入所有需要保留的IP配置
    ipConfigurations: [
      // 防火墙默认子网关联的原有IP配置
      {
        name: 'default-ip-config'
        properties: {
          subnet: {
            id: '/subscriptions/${subscriptionId}/resourceGroups/${vnetResourceGroup}/providers/Microsoft.Network/virtualNetworks/${vnetName}/subnets/AzureFirewallSubnet'
          }
          publicIPAddress: {
            id: existingFwPip.id
          }
        }
      }
      // 新增的公网IP配置
      {
        name: 'additional-ip-config'
        properties: {
          publicIPAddress: {
            id: newFwPip.id
          }
        }
      }
    ]
    // 必须补全原有防火墙的其他配置,避免更新时被重置
    sku: {
      name: 'AZFW_VNet'
      tier: 'Standard'
    }
    // 如果关联了防火墙策略、配置了管理网卡、威胁检测等设置,都要在这里补全
  }
}

部署注意事项

  • 部署时使用默认的增量部署模式即可,不要使用完整部署模式,避免误删资源组内其他未在模板中声明的资源
  • 如果不清楚原有防火墙的全量配置,可以先通过命令导出当前配置,对照补全模板中的properties字段:
    • PowerShell命令:Get-AzFirewall -Name <防火墙名称> -ResourceGroupName <资源组名称>
    • Az CLI命令:az network firewall show -n <防火墙名称> -g <资源组名称>
  • 如果不想手动维护全量properties配置,也可以在Bicep中通过Microsoft.Resources/deploymentScripts资源内嵌Az CLI/PowerShell脚本,直接在模板内完成IP的增量添加,不需要单独执行外部脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:27:21