分享方式:


解決資源名稱和類型不符的錯誤

本文說明當資源名稱的格式不符合資源類型的格式時,如何解決錯誤。

徵兆

部署範本時,您會收到帶有錯誤碼 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: 'examplevault123'
  ...
}

如果提供的名稱具有超過一個區段,您會看到錯誤訊息。

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 範本中設定子資源的名稱和類型