通过ARM/Bicep更新现有Application Gateway配置的可行性咨询
结论
你当前使用的单独声明backendAddressPools作为独立子资源部署的方式不可行。Application Gateway的后端地址池、HTTP监听器、请求路由规则等配置均属于主资源的属性数组内的元素,并非支持单独创建的可独立部署子资源,和App Service挂载现有服务计划的逻辑有本质区别。
正确实现方式
你需要先引用现有Application Gateway的全量配置,将需要新增的配置和原有配置数组合并后,重新部署整个Application Gateway资源完成更新,示例代码如下:
1. 引用现有Application Gateway
resource appGateway 'Microsoft.Network/applicationGateways@2021-03-01' existing = { name: appGwName }
2. 构造更新后的配置数组
以新增后端地址池为例,将原有池和新增池合并:
var updatedBackendPools = concat(appGateway.properties.backendAddressPools, [ { name: '${appName}-${environment}-backend' properties: { backendAddresses: [ { fqdn: appServiceUrl } ] } } ])
3. 部署更新Application Gateway
保留所有原有无需修改的配置,仅替换需要更新的属性数组:
resource appGatewayUpdate 'Microsoft.Network/applicationGateways@2021-03-01' = { name: appGwName location: appGateway.location properties: { // 复用原有无需修改的核心配置 sku: appGateway.properties.sku gatewayIPConfigurations: appGateway.properties.gatewayIPConfigurations frontendIPConfigurations: appGateway.properties.frontendIPConfigurations frontendPorts: appGateway.properties.frontendPorts backendHttpSettingsCollection: appGateway.properties.backendHttpSettingsCollection // 替换为合并后的后端地址池 backendAddressPools: updatedBackendPools // 其他配置保持原有值不变,若需要新增监听器、路由规则则对应合并对应数组即可 httpListeners: appGateway.properties.httpListeners requestRoutingRules: appGateway.properties.requestRoutingRules } }
注意事项
- 部署使用的身份必须持有目标Application Gateway的写入权限
- 不要遗漏任何必填的原有属性,否则部署时会覆盖删除已有配置
- 新增监听器、路由规则等其他配置时,使用相同的
concat逻辑合并对应属性数组即可
内容的提问来源于stack exchange,提问作者Wokket
相关产品推荐
相关产品推荐

