ARM模板嵌套资源类型段数不匹配错误求助
解决ARM模板验证错误:嵌套资源类型段数与名称段数不匹配
这错误我之前部署Azure资源时也踩过坑,核心问题就是你的ARM模板里,存储账户资源的命名格式和资源类型的层级不匹配,直接违反了ARM模板的资源命名规则。
先搞懂错误背后的核心规则
错误提示里已经说得很明确,这里再拆解下好理解:
A nested resource type must have identical number of segments as its resource name. A root resource type must have segment length one greater than its resource name.
翻译过来就是:
- 根资源(比如独立的存储账户、虚拟机,不依赖其他资源存在):资源类型的段数必须比资源名称的段数多1。比如存储账户的类型是
Microsoft.Storage/storageAccounts(2段),那名称就只能是单段(比如mystorageaccount)。 - 嵌套资源(比如虚拟机的扩展、SQL数据库的防火墙规则):资源类型的段数要和资源名称的段数完全一致。比如虚拟机扩展的类型是
Microsoft.Compute/virtualMachines/extensions(3段),名称就得是myvm/myextension(2段?不对,准确说:类型的完整路径段数,和名称包含父资源名称的段数是一一对应的)。
看你的错误案例,比如资源diukwestdbuk1/storageAccounts,类型是Microsoft.Storage/storageAccounts:
- 名称是2段(
diukwestdbuk1+storageAccounts) - 类型是2段(
Microsoft.Storage+storageAccounts)
但存储账户是根资源,本应满足「类型段数比名称多1」的规则,你却把它当成嵌套资源来命名,而存储账户本身根本不支持嵌套部署,自然触发了验证错误。
具体修复步骤
- 定位错误资源:打开你的ARM模板,找到名称为
diukwestdbuk1/storageAccounts和diagnosticst1/storageAccounts的存储账户资源定义。 - 修改资源名称:把名称改成不带
/的单段格式,比如diukwestdbuk1storage或者diagnosticst1sa(要符合Azure存储账户命名规则:仅小写字母、数字,长度3-24位)。 - 保留正确的资源类型:存储账户的类型依然用
Microsoft.Storage/storageAccounts,这是根资源的标准类型。
正确的存储账户资源示例
{ "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2023-01-01", "name": "diukwestdbuk1storage", "location": "[resourceGroup().location]", "sku": { "name": "Standard_LRS" }, "kind": "StorageV2", "properties": {} }
额外提醒
别用/来拼接存储账户的名称,这个符号在ARM模板里是用来表示真正的父子嵌套资源关系的(比如虚拟机和它的扩展、SQL服务器和它的数据库)。存储账户本身是独立的根资源,不能嵌套在其他资源下,所以名称里绝对不能出现/。
内容的提问来源于stack exchange,提问作者user1716729
相关产品推荐
相关产品推荐

