共用方式為


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

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

癥狀

部署範本時,您會收到錯誤碼 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。 此資源類型有兩個區段(保管庫/機密)。

若要指定金鑰儲存庫的名稱,請只提供一個區段,例如 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 範本中設定子資源的名稱和類型