Dela via


Lösa fel för resursnamn och typmatchningsfel

Den här artikeln beskriver hur du löser felet när resursnamnets format inte matchar resurstypens format.

Symptom

När du distribuerar en mall får du ett fel med felkoden InvalidTemplate. Meddelandet anger att resurstypen och namnet inte matchar. Det föreslår att du åtgärdar antalet segment i namnet.

Orsak

En resurstyp innehåller resursproviderns namnområde och ett eller flera segment för typer. Varje segment representerar en nivå i resurshierarkin och avgränsas med ett snedstreck.

{resource-provider-namespace}/{type-segment-1}/{type-segment-2}

Resursnamnet innehåller ett eller flera segment avgränsade med snedstreck. Antalet segment måste matcha talet i resurstypen.

{name-segment-1}/{name-segment-2}

Om resurstypen och namnet innehåller ett annat antal segment får du det här felet.

Lösning

Se till att du förstår resurstypens nivå. En nyckelvalvsresurs har till exempel en fullständigt kvalificerad resurstyp som Microsoft.KeyVault/vaults. Du kan ignorera resursproviderns namnområde (Microsoft.KeyVault) och fokusera på typen (valv). Det har ett segment.

En nyckelvalvshemlighet är en underordnad resurs i valvet. Den har en fullständigt kvalificerad resurstyp som Microsoft.KeyVault/vaults/secrets. Den här resurstypen har två segment (valv/hemligheter).

Om du vill ange ett namn för nyckelvalvet anger du bara ett segment, till exempel examplevault123. Ange ett namn på hemligheten genom att ange två segment, till exempel examplevault123/examplesecret. Det första segmentet anger nyckelvalvet där den här hemligheten lagras.

I följande exempel visas ett giltigt format för resursnamnet.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

Du skulle se ett fel om du angav ett namn med fler än ett segment.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'contoso/examplevault123'
  ...
}

När du kapslade en underordnad resurs i den överordnade resursen anger du bara det extra segmentet. Den fullständiga resurstypen och namnet innehåller fortfarande värdena från den överordnade resursen, men de skapas åt dig. I följande exempel är secrets typen och namnet är examplesecret.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
  resource kvsecret 'secrets' = {
    name: 'examplesecret'
    properties: {
     value: secretValue
    }
  }
}

När du definierar den underordnade resursen utanför den överordnade anger du den fullständiga resurstypen. Ange det fullständiga resursnamnet för JSON.

För Bicep använder du parent egenskapen och anger det symboliska namnet på den överordnade resursen. När du använder den överordnade egenskapen skapas det fullständiga namnet åt dig, så du anger det underordnade resursnamnet som ett enskilt segment.

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'
  ...
}

Mer information finns i Ange namn och typ för underordnade resurser i Bicep eller Ange namn och typ för underordnade resurser i ARM-mallar.