Dela via


Åtgärda fel på grund av resursnamn och typmissmatchning

I den här artikeln beskrivs hur du löser felet när resursnamnets format inte matchar resurstypens format.

Symtom

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ås att du korrigerar segmentens antal 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 antalet 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 av Microsoft.KeyVault/vaults. Du kan ignorera resursproviderns namnområde (Microsoft.KeyVault) och fokusera på typen (valv). Den har ett segment.

En nyckelvalvshemlighet är en underordnad resurs i valvet. Den har en fullständigt specificerad resurstyp av 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 kapslar en underordnad resurs i den överordnade resursen, ange bara det extra segmentet. Den fullständiga resurstypen och namnet innehåller fortfarande värdena från den överordnade resursen, men de är skapade å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 resursen 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.