你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍当资源名称的格式与资源类型的格式不匹配时如何解决该错误。
症状
部署模板时,您会收到错误代码 InvalidTemplate
的错误 。 该消息指示资源类型和名称不匹配。 它建议修复名称中的段数。
原因
资源类型包含资源提供程序命名空间和类型的一个或多个段。 每个段表示资源层次结构中的一个级别,并用斜杠分隔。
{resource-provider-namespace}/{type-segment-1}/{type-segment-2}
资源名称包含一个或多个用斜杠分隔的段。 分段数必须与资源类型中的数字匹配。
{name-segment-1}/{name-segment-2}
如果资源类型和名称包含不同数量的分段,则会收到此错误。
解决方案
确保您了解资源类型的级别。 例如,密钥保管库资源的完全限定资源类型为 Microsoft.KeyVault/vaults
。 您可以忽略资源提供程序命名空间 (Microsoft.KeyVault),而专注于类型 (vaults)。 它有一个段。
密钥保管库机密是保管库的子资源。 它具有完全限定的资源类型 Microsoft.KeyVault/vaults/secrets
。 此资源类型有两个分段 (vaults/secrets)。
若要指定密钥保管库的名称,请仅提供一个段,例如 examplevault123
. 要指定密钥的名称,请提供两个分段,例如 examplevault123/examplesecret
. 第一个段指示存储此密钥的密钥保管库。
以下示例显示了资源名称的有效格式。
如果您提供的名称包含多个区段,则会看到 错误 。
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'contoso/examplevault123'
...
}
当您在父资源中嵌套子资源时,请仅提供额外的 segment。 完整的资源类型和名称仍包含父资源中的值,但它们是为您构建的。 在以下示例中,type 为 secrets
,name 为 examplesecret
。
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
resource kvsecret 'secrets' = {
name: 'examplesecret'
properties: {
value: secretValue
}
}
}
在父资源之外定义子资源时,请提供完整的资源类型。 对于 JSON,请提供完整的资源名称。
对于 Bicep,请使用属性 parent
并提供父资源的符号名称。 当您使用 parent 属性时,将为您构建全名,因此您需要将子资源名称作为单个分段提供。
resource kvsecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = {
name: 'examplesecret'
parent: kv
properties: {
value: secretValue
}
}
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
}
有关详细信息,请参阅 在 Bicep 中设置子资源的名称和类型 或在 ARM 模板中设置子资源的名称和类型。