Åtgärda fel med en ogiltig mall

I den här artikeln beskrivs hur du löser ogiltiga mallfel för Bicep-filer och Azure Resource Manager-mallar (ARM-mallar). Felet uppstår av flera orsaker, till exempel ett syntaxfel, ogiltigt parametervärde eller cirkulärt beroende.

Symptom

När en mall distribueras får du ett felmeddelande som anger:

Code=InvalidTemplate
Message=<varies>

Felmeddelandet beror på typen av fel.

Orsak

Det här felet kan bero på flera olika typer av fel. De innehåller vanligtvis en syntax eller ett strukturellt fel i mallen.

Lösning 1: Syntaxfel

Om du får ett felmeddelande som anger att mallen inte kunde valideras kan det bero på ett syntaxproblem i mallen.

Code=InvalidTemplate
Message=Deployment template validation failed

Syntaxfel kan inträffa eftersom malluttryck har många element. Namntilldelningen för ett lagringskonto innehåller till exempel par med enkla eller dubbla citattecken, klammerparenteser, hakparenteser och parenteser. Uttryck innehåller också funktioner och tecken som dollartecken, kommatecken och punkter.

name: 'storage${uniqueString(resourceGroup().id)}'

När du får den här typen av fel granskar du uttryckets syntax. Om du vill identifiera mallfel kan du använda Visual Studio Code med det senaste Bicep-tillägget eller Azure Resource Manager Tools-tillägget.

Lösning 2: Felaktiga segmentlängder

Ett annat ogiltigt mallfel uppstår när resursnamnet inte har rätt format. Information om hur du löser det här felet finns i Lösa fel för namn och typmatchningsfel.

Lösning 3: Parametern är inte giltig

Du kan ange en parameters tillåtna värden i en mall. Om du anger ett värde som inte är ett tillåtet värde under distributionen får du ett meddelande som liknar följande fel:

Code=InvalidTemplate;
Message=Deployment template validation failed: 'The provided value {parameter value}
for the template parameter {parameter name} is not valid. The parameter value is not
part of the allowed values

Kontrollera mallen för parameterns tillåtna värden och använd ett tillåtet värde under distributionen. Mer information finns i tillåtna värden för Bicep - eller ARM-mallar.

Lösning 4: För många målresursgrupper

Du kan se det här felet i tidigare distributioner eftersom du var begränsad till fem målresursgrupper i en enda distribution. I maj 2020 höjdes gränsen till 800 resursgrupper. Mer information finns i distribuera till flera resursgrupper för Bicep - eller ARM-mallar.

Lösning 5: Cirkulärt beroende har identifierats

Du får det här felet när resurser är beroende av varandra på ett sätt som förhindrar att distributionen startar. En kombination av beroenden gör att två eller flera resurser väntar på andra resurser som också väntar. Beror till exempel resource1resource3, resource2 beror på resource1och resource3 är beroende av resource2. Du kan vanligtvis lösa det här problemet genom att ta bort onödiga beroenden.

Bicep skapar ett implicit beroende när en resurs använder det symboliska namnet på en annan resurs. Ett explicit beroende som använder dependsOn är vanligtvis inte nödvändigt. Mer information finns i Bicep-beroenden.

Så här löser du ett cirkulärt beroende:

  1. Leta reda på resursen som identifieras i det cirkulära beroendet i mallen.
  2. För den resursen dependsOn undersöker du egenskapen och eventuell användning av reference funktionerna eller resourceId för att se vilka resurser den är beroende av.
  3. Granska dessa resurser för att se vilka resurser de är beroende av. Följ beroendena tills du ser en resurs som är beroende av den ursprungliga resursen.
  4. För de resurser som ingår i det cirkulära beroendet undersöker du noggrant all användning av dependsOn egenskapen för att identifiera eventuella beroenden som inte behövs. Om du vill felsöka distributionen tar du bort de cirkulära beroendena. I stället för att ta bort koden kan du använda kommentarer så att koden inte körs under nästa distribution. Du kan använda enradskommentarer (//) eller flerradskommentarer (/* ... */) i ARM-mallar eller Bicep-filer .
  5. Distribuera om mallen.

Om du tar bort värden från dependsOn egenskapen kan det orsaka fel när du distribuerar mallen. Om du får ett felmeddelande lägger du till beroendet i mallen igen. Om du använde kommentarer för att kringgå koden i mallen kan du ta bort kommentarerna för att återställa koden.

Om den metoden inte löser det cirkulära beroendet bör du överväga att flytta en del av distributionslogik till underordnade resurser (till exempel tillägg eller konfigurationsinställningar). Konfigurera de underordnade resurserna som ska distribueras efter de resurser som ingår i det cirkulära beroendet. Anta till exempel att du distribuerar två virtuella datorer, men du måste ange egenskaper för var och en som refererar till den andra. Du kan distribuera dem i följande ordning:

  1. vm1
  2. vm2
  3. Tillägget på vm1 beror på vm1 och vm2. Tillägget anger värden på vm1 som hämtas från vm2.
  4. Tillägget på vm2 beror på vm1 och vm2. Tillägget anger värden på vm2 som hämtas från vm1.

Samma metod fungerar för App Service appar. Överväg att flytta konfigurationsvärden till en underordnad resurs för appresursen. Du kan distribuera två webbappar i följande ordning:

  1. webapp1
  2. webapp2
  3. Konfigurationen för webapp1 beror på webapp1 och webapp2. Den innehåller appinställningar med värden från webapp2.
  4. Konfigurationen för webapp2 beror på webapp1 och webapp2. Den innehåller appinställningar med värden från webapp1.

Lösning 6: Validera syntax för exporterade mallar

När du har distribuerat resurser i Azure kan du exportera ARM-mallens JSON och ändra den för andra distributioner. Du bör verifiera den exporterade mallen för korrekt syntax innan du använder den för att distribuera resurser.

Du kan exportera en mall från portalen, Azure CLI eller Azure PowerShell. Det finns rekommendationer om du har exporterat mallen från resursen eller resursgruppen eller från distributionshistoriken.

När du har exporterat en ARM-mall kan du dekompilera JSON-mallen till Bicep. Använd sedan metodtips och linter för att verifiera koden.

Mer information finns i följande artiklar: