Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver 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.
Symtom
När en mall distribueras får du ett fel 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 omfattar vanligtvis en syntax eller ett strukturellt fel i mallen.
Lösning 1: Syntaxfel
Om du får ett felmeddelande som anger att mallen misslyckades med valideringen kan du ha 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.
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 felet finns i Lösa fel för namn och typmatchning.
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 den gränsen till 800 resursgrupper. För mer information, se hur man distribuerar 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 hindrar distributionen från att starta. En kombination av beroenden gör att två eller flera resurser väntar på andra resurser som också väntar. Till exempel resource1 beror på resource3, 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:
- Leta reda på resursen som identifierats i det cirkulära beroendet i mallen.
- För den resursen, undersök egenskapen dependsOnoch användningen av funktionernareferenceellerresourceIdför att se vilka resurser den är beroende av.
- Granska dessa resurser för att se vilka resurser de är beroende av. Följ beroendena tills du märker en resurs som är beroende av den ursprungliga resursen.
- För de resurser som ingår i det cirkulära beroendet undersöker du noggrant alla användningar av dependsOnegenskapen 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 .
- Återanvänd mallen.
Om du tar bort värden från egenskapen dependsOn kan det orsaka fel när du distribuerar mallen. Om du får ett fel lägger du till beroendet i mallen igen. Om du använde kommentarer för att kringgå kod i mallen kan du ta bort kommentarerna för att återställa koden.
Om den metoden inte löser det cirkulära beroendet kan du överväga att flytta en del av distributionslogik till underordnade resurser (till exempel tillägg eller konfigurationsinställningar). Konfigurera de underordnade resurser 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:
- VM1
- vm2
- Tillägget på vm1 beror på vm1 och vm2. Tillägget anger värden på vm1 som det hämtar från vm2.
- Tillägget på vm2 beror på vm1 och vm2. Tillägget anger värden på vm2 som det hämtar 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:
- webapp1 (på engelska)
- webapp2 (på engelska)
- Konfigurationen för webapp1 beror på webapp1 och webapp2. Den innehåller appinställningar med värden från webapp2.
- Konfigurationen för webapp2 beror på webapp1 och webapp2. Den innehåller appinställningar med värden från webapp1.
Lösning 6: Verifiera 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 exporterade 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: