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

如何在Bicep中通过符号名称引用应用网关探测而非字符串

在Bicep中引用应用网关探测的正确方式

你碰到的错误是因为在同一资源内部通过字符串插值引用自身ID属于循环引用,Bicep禁止这种写法。要解决这个问题,完全可以通过符号名称直接引用探测,推荐两种实现方式:

方式一:使用嵌套资源定义探测(推荐)

将探测定义为应用网关的嵌套资源,这样就能直接通过资源符号引用其ID,无需硬编码字符串:

resource agw_foo_resource 'Microsoft.Network/applicationGateways@2023-05-01' = {
  name: 'FooAGW'
  location: location
  ...
  properties: {
    backendHttpSettingsCollection: [
      {
        name: 'Be_Settings_HTTPS'
        properties: {
          port: 443
          protocol: 'Https'
          cookieBasedAffinity: 'Disabled'
          pickHostNameFromBackendAddress: true
          affinityCookieName: 'ApplicationGatewayAffinity'
          requestTimeout: 20
          probe: {
            id: be_health_probe.id // 直接引用嵌套探测资源的ID
          }
        }
      }
    ]
  }

  // 把探测声明为应用网关的嵌套资源
  resource be_health_probe 'probes' = {
    name: 'Be_HealthProbe'
    properties: {
      protocol: 'Https'
      path: '/'
      interval: 30
      timeout: 30
      unhealthyThreshold: 3
      pickHostNameFromBackendHttpSettings: true
      minServers: 0
      match: {
        statusCodes: [
          '200-399'
        ]
      }
    }
  }
}

这种写法符合Bicep的设计逻辑,代码可读性更强,也避免了后续数组顺序变更导致的引用错误。

方式二:通过数组索引引用(不推荐)

如果坚持保留probes数组的写法,可以通过资源的属性数组索引来引用探测ID:

resource agw_foo_resource 'Microsoft.Network/applicationGateways@2023-05-01' = {
  name: 'FooAGW'
  location: location
  ...
  properties: {
    backendHttpSettingsCollection: [
      {
        name: 'Be_Settings_HTTPS'
        properties: {
          port: 443
          protocol: 'Https'
          cookieBasedAffinity: 'Disabled'
          pickHostNameFromBackendAddress: true
          affinityCookieName: 'ApplicationGatewayAffinity'
          requestTimeout: 20
          probe: {
            id: agw_foo_resource.properties.probes[0].id // 引用数组中第一个探测的ID
          }
        }
      }
    ]
    probes: [
      {
        name: 'Be_HealthProbe'
        properties: {
          protocol: 'Https'
          path: '/'
          interval: 30
          timeout: 30
          unhealthyThreshold: 3
          pickHostNameFromBackendHttpSettings: true
          minServers: 0
          match: {
            statusCodes: [
              '200-399'
            ]
          }
        }
      }
    ]
  }
}

注意:这种方式依赖数组的顺序,一旦probes数组中元素顺序调整,引用就会失效,所以不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:33:14