解決資源名稱和類型不符的錯誤
本文說明當資源名稱的格式不符合資源類型的格式時,如何解決錯誤。
徵兆
部署範本時,您會收到帶有錯誤碼 InvalidTemplate
的錯誤訊息。 訊息指出資源類型和名稱不相符。 此時會建議您修正名稱中的區段數目。
原因
資源類型包含資源提供者命名空間,以及一或多個類型區段。 每個區段都代表資源階層中的一個層級,並以斜線分隔。
{resource-provider-namespace}/{type-segment-1}/{type-segment-2}
資源名稱包含一或多個區段 (以斜線分隔)。 區段數目必須符合資源類型中的數目。
{name-segment-1}/{name-segment-2}
如果資源類型和名稱包含的區段數不同,您就會收到此錯誤訊息。
解決方案
請確實了解資源類型的層級。 例如,金鑰保存庫資源具有完整資源類型 Microsoft.KeyVault/vaults
。 您可以忽略資源提供者命名空間 (Microsoft.KeyVault),將焦點放在類型 (保存庫) 上。 它具有一個區段。
金鑰保存庫秘密是保存庫的子資源。 它具有完整資源類型 Microsoft.KeyVault/vaults/secrets
。 此資源類型具有兩個區段 (保存庫/祕密)。
若要指定金鑰保存庫的名稱,請只提供一個區段 (例如 examplevault123
)。 若要指定秘密的名稱,請提供兩個區段 (例如 examplevault123/examplesecret
)。 第一個區段表示儲存此秘密的金鑰保存庫。
下列範例顯示資源名稱的有效格式。
如果提供的名稱具有超過一個區段,您會看到錯誤訊息。
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'contoso/examplevault123'
...
}
在父資源內為子資源建立巢狀結構時,請只提供額外的區段。 完整的資源類型和名稱仍包含來自父資源的值,但這些是專為您建構的。 在下列範例中,類型為 secrets
,而名稱為 examplesecret
。
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'examplevault123'
...
resource kvsecret 'secrets' = {
name: 'examplesecret'
properties: {
value: secretValue
}
}
}
在父系之外定義子資源時,請提供完整的資源類型。 若為 JSON,請提供完整的資源名稱。
若為 Bicep,請使用 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 範本中設定子資源的名稱和類型。