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

在Bicep中部署命名规范时遭遇数组索引越界问题

问题解决:ARM模板数组索引越界错误

核心原因分析

你遇到的The language expression property array index '1' is out of bounds错误,主要来自两个关键问题:

  1. ARM模板数组索引从0开始:你误以为索引1对应第一个元素(westus2/azw2),但实际上数组索引起始值是0,索引1对应的是第二个元素(eastus/aze)。如果要获取azw2,locationIndex应该设为0。
  2. 属性名大小写不匹配:你的参数文件中属性是LocationShortName(首字母大写),但主模块中写的是locationShortname(小写l和结尾n),ARM模板对属性名大小写敏感,这会导致无法正确读取属性,间接引发索引相关的错误提示。

分步修正方案

1. 修正参数文件的索引值与格式

将Dev参数文件中的locationIndex值改为0,同时修正JSON格式错误(原代码存在多余空格和引号问题):

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "locationIndex": {
      "value": 0
    },
    "locationList": {
      "value": [
        {
          "Location": "westus2",
          "LocationShortName": "azw2"
        },
        {
          "Location": "eastus",
          "LocationShortName": "aze"
        },
        {
          "Location": "westus",
          "LocationShortName": "azw"
        },
        {
          "Location": "centralus",
          "LocationShortName": "azc"
        },
        {
          "Location": "westus3",
          "LocationShortName": "azw3"
        }
      ]
    }
  }
}

2. 修正主模块中的属性引用

确保主模块中参数定义正确,且属性名大小写完全匹配:

// 主模块参数定义
"parameters": {
  "locationIndex": {
    "type": "int",
    "metadata": {
      "description": "索引值,对应locationList中的元素位置"
    }
  },
  "locationList": {
    "type": "array",
    "metadata": {
      "description": "包含位置信息的数组"
    }
  }
},
// 定义变量简化引用
"variables": {
  "selectedLocationObj": "[parameters('locationList')[parameters('locationIndex')]]",
  "locationShortName": "[variables('selectedLocationObj').LocationShortName]"
},
// 传递给子模块时使用变量
"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "subModuleDeployment",
    "properties": {
      "mode": "Incremental",
      "templateLink": {
        "uri": "[uri(deployment().properties.templateLink.uri, 'subModule.json')]"
      },
      "parameters": {
        "locationShortName": {
          "value": "[variables('locationShortName')]"
        }
      }
    }
  }
]

3. 额外排查点

  • 确认PowerShell脚本正确传递参数文件:使用-TemplateParameterFile指定正确的环境参数文件,避免传递空值或错误的locationList数组。
  • 检查子模块参数定义:确保子模块中locationShortName参数类型为string,与主模块传递的值类型匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:35:19