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

Bicep批量创建托管标识遇类型错误:期望Object却收到Array

解决Bicep批量创建用户分配托管标识的类型不匹配问题

问题描述

批量创建用户分配托管标识时触发类型不匹配错误:Expected a value of type 'Object', but received a value of type 'Array'。原逻辑是通过JSON参数文件传递包含部署位置和托管标识名称数组的对象,意图循环生成资源,但代码存在参数声明、变量引用的错误。

原代码问题分析

  1. 主文件缺失参数声明:未声明用于接收参数文件中managedIdentities对象的参数,导致传递数组时类型校验失败。
  2. 模块文件循环变量错误:循环创建资源时引用了未定义的my_mi变量,而非已声明的managed_identitites数组参数。
  3. 模块参数冗余/未利用:managed_identity_properties参数未实际使用,且部署位置硬编码,无法复用参数文件中的配置。

修正后的代码

1. 参数文件(保持原有结构不变)

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "managedIdentities": {
            "value": {
                "location": "westeurope",
                "mi_names": [
                    "mi-app1",
                    "mi-app2",
                    "mi-app3",
                    "mi-app4"
                ]
            }
        }
    }
}

2. 模块文件(./modules/create_identity.bicep)

修正循环变量引用,同时将部署位置改为可传入参数,避免硬编码:

param managedIdentityNames array
param location string

resource createManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = [for name in managedIdentityNames: {
  name: name
  location: location
}]

3. 主文件

添加参数声明,正确传递对象中的数组和位置属性给模块:

param managedIdentities object

module createManagedIdentity './modules/create_identity.bicep' = {
  name: 'CreateManagedIdentity'
  params: {
    managedIdentityNames: managedIdentities.mi_names
    location: managedIdentities.location
  }
}

修正逻辑说明

  • 主文件先声明managedIdentities对象参数,匹配参数文件的结构,确保接收类型正确。
  • 模块文件调整为实际需要的参数(标识名称数组、部署位置字符串),移除冗余参数。
  • 循环创建资源时直接使用模块接收的数组参数,避免未定义变量错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:06:13