如何通过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 <资源组名称>
- PowerShell命令:
- 如果不想手动维护全量properties配置,也可以在Bicep中通过
Microsoft.Resources/deploymentScripts资源内嵌Az CLI/PowerShell脚本,直接在模板内完成IP的增量添加,不需要单独执行外部脚本。
内容的提问来源于stack exchange,提问作者ElonMusk
相关产品推荐
相关产品推荐

