Azure Machine Learning Bicep模板计算资源命名段长度报错排查
报错根因
这个段长度报错和计算资源名称后缀无关,核心是违反了Bicep的资源命名段匹配规则:
- 去掉API版本部分后,资源类型按
/拆分得到的段数,和资源名称按/拆分的段数必须满足固定关系:根级资源的名称段数 = 类型段数 - 1;嵌套在父资源内的子资源,名称段数和类型的子层级段数一致。
你定义的计算资源类型为Microsoft.MachineLearningServices/workspaces/computes,去掉API版本后按/拆分共3段,作为根级资源部署时需要名称有2段(用/分隔),但你写的计算资源名称是无分隔符的单段字符串,不管删不删cluster后缀,段数始终为1,自然持续触发报错。
修复方案
两类资源保留在同一文件中有两种合法写法,任选其一即可。
- 写法1:计算资源作为工作区的嵌套子资源(推荐):直接把计算资源块写在工作区资源声明内部,此时计算资源名称只需要写单段的集群名,不需要带工作区前缀,Bicep会自动识别父子依赖关系,不需要手动配置
dependsOn。 - 写法2:保留根级资源声明,修正名称格式:如果不想嵌套结构,只需要把计算资源名称改为
父工作区名称/计算集群名称的两段式格式,再显式添加对工作区的依赖保证部署顺序即可。
修正后可直接部署的模板代码(写法2,改动最小)
resource machineLearning 'Microsoft.MachineLearningServices/workspaces@2022-01-01-preview' = { name: 'mlw-${project}-${env}' location: loc tags: tags identity: { type: 'SystemAssigned' } properties: { applicationInsights: appInsights.id containerRegistry: containerRegistry.id keyVault: keyVaultId storageAccount: storage.id } } resource amlci 'Microsoft.MachineLearningServices/workspaces/computes@2022-01-01-preview' = { name: '${machineLearning.name}/aml-cluster' location: loc dependsOn: [ machineLearning ] properties: { computeType: 'AmlCompute' properties: { vmSize: 'Standard_DS3_v2' subnet: json('null') osType: 'Linux' scaleSettings: { maxNodeCount: 5 minNodeCount: 0 } } } }
可选优化:上述代码把计算资源的API版本统一到了和工作区一致的
2022-01-01-preview,避免旧版本API的兼容问题,不属于强制修复项。
内容的提问来源于stack exchange,提问作者user17260574
相关产品推荐
相关产品推荐

