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

Azure Bicep问题:无法以数组形式引用父资源下的子资源

问题背景

资源类型

Microsoft.Cdn/profiles/originGroups/origins

API版本

2021-06-01

我正在为多个带自定义域名的Azure App Services部署Azure Front Door,已成功部署多个自定义域名并关联到各自的路由及WAF策略,但创建多个Origin Groups并添加对应Origin时遇到问题。

错误信息

'The template resource '[format('{0}/{1}/{2}', parameters('frontDoorName'), format('{0}-origins', replace(parameters('origins')[range(0, length(parameters('origins')))[parameters('origins')[copyIndex()]]], '.', '-')), replace(parameters('origins')[copyIndex()], '.', ''))]' at line '1' and column '5424' is not valid: Unable to evaluate named property or non-integer index 'web-app-name.azurewebsites.net' on an array value...

我的Bicep代码

resource frontDoorOriginGroup 'Microsoft.Cdn/profiles/originGroups@2021-06-01' = [for i in range(0, length(origins)): {
  name: replace(origins[i], '.', '-')
  parent: frontDoorProfile
  properties: {
    loadBalancingSettings: {
      sampleSize: 4
      successfulSamplesRequired: 2
    }
    healthProbeSettings: {
      probePath: healthCheckPath
      probeRequestType: 'GET'
      probeProtocol: 'Https'
      probeIntervalInSeconds: 120
    }
  }
}]

resource frontDoorOrigin 'Microsoft.Cdn/profiles/originGroups/origins@2021-06-01' = [for origin in origins: {
  name: frontDoorOriginGroup[origin].name
  parent: frontDoorOriginGroup[origin]
  properties: {
    hostName: '${origin}'
    httpPort: 80
    httpsPort: 443
    originHostHeader: '${origin}'
    priority: 1
    weight: 50
    enabledState: 'Enabled'
  }
}]

疑问

是否可以以数组形式引用父资源下的子资源?已查阅微软官方文档《Set name and type for child resources in Bicep》但未解决问题,可能操作有误,恳请协助。


解决方案

问题核心是:你尝试用字符串(origin域名)作为索引访问frontDoorOriginGroup数组,但Bicep数组仅支持整数索引,不能直接用字符串定位元素。以下两种方式可修复:

方式一:索引对齐循环

将Origin的循环改为和Origin Group一致的索引遍历,确保每个Origin对应到同索引的Origin Group:

resource frontDoorOrigin 'Microsoft.Cdn/profiles/originGroups/origins@2021-06-01' = [for i in range(0, length(origins)): {
  name: replace(origins[i], '.', '')
  parent: frontDoorOriginGroup[i]
  properties: {
    hostName: origins[i]
    httpPort: 80
    httpsPort: 443
    originHostHeader: origins[i]
    priority: 1
    weight: 50
    enabledState: 'Enabled'
  }
}]

方式二:字典映射Origin Group

先把Origin Group数组转为字典,用origin域名作为键,后续可通过字符串索引访问:

// 构建origin与对应Origin Group的映射字典
var originGroupMap = {
  for i in range(0, length(origins)): {
    key: origins[i]
    value: frontDoorOriginGroup[i]
  }
}

// 基于字典创建Origin
resource frontDoorOrigin 'Microsoft.Cdn/profiles/originGroups/origins@2021-06-01' = [for origin in origins: {
  name: replace(origin, '.', '')
  parent: originGroupMap[origin]
  properties: {
    hostName: origin
    httpPort: 80
    httpsPort: 443
    originHostHeader: origin
    priority: 1
    weight: 50
    enabledState: 'Enabled'
  }
}]

关键说明

  • Bicep数组仅支持整数索引,不能直接用字符串作为索引定位元素。
  • 推荐使用方式一,逻辑更直接,无需额外的字典映射步骤,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:41