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

如何通过Bicep向现有Azure Front Door添加FEE、BEP和RR?

解决方案:向现有Azure Front Door添加FEE/BEP/RR并实现幂等部署

可以直接向现有Front Door(FD)添加前端端点(FEE)、后端池(BEP)和路由规则(RR),且实现“不存在则创建、重复部署忽略”的幂等效果,无需从零重建FD。核心思路是使用嵌套资源类型单独定义每个组件,而非在FD顶级配置中覆盖完整的资源数组。

关键原理

Azure资源管理器默认采用增量部署模式,只要不直接覆盖FD的完整frontendEndpoints/backendPools/routingRules数组,而是通过嵌套资源逐个添加,就只会创建不存在的资源,不会影响现有配置。

修正后的Bicep代码示例

1. 引用现有Front Door

无需使用existing关键字,只需定义FD的基础信息(不覆盖核心配置数组):

resource frontDoor 'Microsoft.Network/frontDoors@2020-05-01' = {
  name: frontdoorName
  location: 'global'
  properties: {
    enabledState: 'Enabled' // 仅保留不会变更的顶级属性,避免覆盖现有配置
  }
}

2. 单独添加前端端点(FEE)

以环境唯一命名(如加-dev后缀),确保多环境不冲突:

resource appFe 'Microsoft.Network/frontDoors/frontendEndpoints@2020-05-01' = {
  parent: frontDoor
  name: 'app-fe-dev'
  properties: {
    hostName: 'app-dev.contoso.com'
    sessionAffinityEnabledState: 'Disabled'
    sessionAffinityTtlSeconds: 0
    // 如有WAF策略可添加对应id
    webApplicationFirewallPolicyLink: {
      id: ''
    }
  }
}

3. 单独添加后端池(BEP)

关联FD的默认或自定义负载均衡/健康探测配置:

resource appBep 'Microsoft.Network/frontDoors/backendPools@2020-05-01' = {
  parent: frontDoor
  name: 'app-bep-dev'
  properties: {
    backends: [
      {
        address: 'app-dev.azurewebsites.net'
        httpPort: 80
        httpsPort: 443
        weight: 50
        priority: 1
        enabledState: 'Enabled'
      }
    ]
    loadBalancingSettings: {
      id: '${frontDoor.id}/loadBalancingSettings/default'
    }
    healthProbeSettings: {
      id: '${frontDoor.id}/healthProbeSettings/default'
    }
  }
}

4. 单独添加路由规则(RR)

关联对应的FEE和BEP,支持转发或重定向规则:

// 转发规则
resource appRr 'Microsoft.Network/frontDoors/routingRules@2020-05-01' = {
  parent: frontDoor
  name: 'app-rr-dev'
  properties: {
    frontendEndpoints: [
      {
        id: appFe.id
      }
    ]
    acceptedProtocols: ['Http', 'Https']
    patternsToMatch: ['/*']
    routeConfiguration: {
      '@odata.type': '#Microsoft.Azure.FrontDoor.Models.FrontDoorForwardingConfiguration'
      backendPool: {
        id: appBep.id
      }
      forwardingProtocol: 'HttpsOnly'
    }
    enabledState: 'Enabled'
  }
}

// HTTP重定向规则
resource httpRedirectRr 'Microsoft.Network/frontDoors/routingRules@2020-05-01' = {
  parent: frontDoor
  name: 'http-redirect-rr-dev'
  properties: {
    frontendEndpoints: [
      {
        id: appFe.id
      }
    ]
    acceptedProtocols: ['Http']
    patternsToMatch: ['/*']
    routeConfiguration: {
      '@odata.type': '#Microsoft.Azure.FrontDoor.Models.FrontDoorRedirectConfiguration'
      redirectType: 'Moved'
      redirectProtocol: 'HttpsOnly'
    }
    enabledState: 'Enabled'
  }
}

注意事项

  • 资源命名唯一性:每个环境的FEE/BEP/RR需用环境标识(如dev/test/preprod)作为名称后缀,避免多环境配置冲突。
  • 避免覆盖现有配置:绝对不要在顶级FD资源中定义完整的frontendEndpoints/backendPools/routingRules数组,否则会替换掉FD中所有现有对应资源。
  • 幂等性保障:重复部署时,Azure会检查资源名称是否存在,存在则跳过创建,仅更新有变更的属性(若需修改属性,可直接调整对应嵌套资源的配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:46