Řešení chyb kvůli neplatné šabloně

Tento článek popisuje, jak vyřešit chyby neplatných šablon pro soubory Bicep a šablony Azure Resource Manager (šablony ARM). K této chybě dochází z několika důvodů, jako je chyba syntaxe, neplatná hodnota parametru nebo cyklický závislost.

Příznak

Při nasazení šablony se zobrazí chyba, která značí:

Code=InvalidTemplate
Message=<varies>

Chybová zpráva závisí na typu chyby.

Příčina

Tato chyba může být výsledkem několika různých typů chyb. Obvykle zahrnují syntaxi nebo strukturální chybu v šabloně.

Řešení 1: Syntaktická chyba

Pokud se zobrazí chybová zpráva, která značí, že se nepodařilo ověřit šablonu, může v šabloně dojít k problému se syntaxí.

Code=InvalidTemplate
Message=Deployment template validation failed

K chybám syntaxe může dojít, protože výrazy šablony mají mnoho prvků. Například přiřazení názvu pro účet úložiště zahrnuje dvojice jednoduchých nebo dvojitých uvozovek, složených závorek, hranatých závorek a závorek. Výrazy také obsahují funkce a znaky, jako jsou znaky dolaru, čárky a tečky.

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

Pokud se zobrazí tento typ chyby, zkontrolujte syntaxi výrazu. K identifikaci chyb šablon můžete použít Visual Studio Code s nejnovějším rozšířením Bicep nebo rozšířením Azure Resource Manager Tools.

Řešení 2: Nesprávné délky segmentů

K další neplatné chybě šablony dojde v případě, že název prostředku není ve správném formátu. Pokud chcete tuto chybu vyřešit, přečtěte si téma Řešení chyb kvůli neshodě názvů a typů.

Řešení 3: Parametr není platný

Povolené hodnoty parametru můžete zadat v šabloně. Pokud během nasazení zadáte hodnotu, která není povolená, zobrazí se zpráva podobná následující chybě:

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

Zkontrolujte v šabloně povolené hodnoty parametru a během nasazování použijte povolenou hodnotu. Další informace najdete v tématu povolené hodnoty pro šablonyBicep nebo ARM.

Řešení 4: Příliš mnoho cílových skupin prostředků

Tato chyba se může zobrazit v předchozích nasazeních, protože jste byli omezeni na pět cílových skupin prostředků v jednom nasazení. V květnu 2020 se tento limit zvýšil na 800 skupin prostředků. Další informace najdete v tématu nasazení do více skupin prostředků pro šablonyBicep nebo ARM.

Řešení 5: Zjištění cyklických závislostí

Tato chyba se zobrazí, když jsou prostředky na sobě závislé způsobem, který brání spuštění nasazení. Kombinace vzájemných závislostí způsobuje, že dva nebo více prostředků čekají na další prostředky, které také čekají. Například resource1 závisí na resource3, resource2 závisí na resource1a resource3 závisí na resource2. Tento problém obvykle můžete vyřešit odebráním nepotřebných závislostí.

Bicep vytvoří implicitní závislost, když jeden prostředek používá symbolický název jiného prostředku. Explicitní závislost, která používáte dependsOn , obvykle není nutná. Další informace najdete v tématu Závislosti Bicep.

Řešení cyklické závislosti:

  1. V šabloně vyhledejte prostředek identifikovaný v kruhové závislosti.
  2. U tohoto prostředku zkontrolujte dependsOn vlastnost a případná použití funkcí nebo resourceId a zjistěte, na kterých prostředcích reference závisí.
  3. Prozkoumejte tyto prostředky a zjistěte, na kterých prostředcích závisí. Postupujte podle závislostí, dokud si nevšimnete prostředku, který závisí na původním prostředku.
  4. V případě prostředků zahrnutých do cyklické závislosti pečlivě prozkoumejte všechna použití dependsOn vlastnosti a identifikujte případné závislosti, které nejsou potřeba. Při řešení potíží s nasazením odeberte cyklické závislosti. Místo odstranění kódu můžete použít komentáře, aby se kód nespustí během dalšího nasazení. V šablonách ARM nebo v souborech Bicep můžete použít jednořádkové komentáře (//) nebo víceřádkové komentáře (/* ... */).
  5. Znovu nasaďte šablonu.

Odebrání hodnot z dependsOn vlastnosti může způsobit chyby při nasazení šablony. Pokud se zobrazí chyba, přidejte závislost zpět do šablony. Pokud jste pomocí komentářů vynechali kód v šabloně, můžete je odebrat a kód tak obnovit.

Pokud tento přístup cyklickou závislost nevyřeší, zvažte přesun části logiky nasazení do podřízených prostředků (jako jsou rozšíření nebo nastavení konfigurace). Nakonfigurujte tyto podřízené prostředky tak, aby se nasadily po prostředcích zahrnutých do cyklických závislostí. Předpokládejme například, že nasazujete dva virtuální počítače, ale u každého z nich musíte nastavit vlastnosti, které odkazují na druhý. Můžete je nasadit v následujícím pořadí:

  1. vm1
  2. vm2
  3. Rozšíření na virtuálním počítači vm1 závisí na virtuálních počítačích vm1 a vm2. Rozšíření nastaví na vm1 hodnoty, které získá z vm2.
  4. Rozšíření na virtuálním počítači vm2 závisí na virtuálních počítačích vm1 a vm2. Rozšíření nastaví na vm2 hodnoty, které získá z vm1.

Stejný přístup platí i pro App Service aplikace. Zvažte přesunutí hodnot konfigurace do podřízeného prostředku prostředku aplikace. Můžete nasadit dvě webové aplikace v následujícím pořadí:

  1. webová aplikace1
  2. webová aplikace2
  3. Konfigurace pro webapp1 závisí na webapp1 a webapp2. Obsahuje nastavení aplikace s hodnotami z webapp2.
  4. Konfigurace pro webapp2 závisí na webapp1 a webapp2. Obsahuje nastavení aplikace s hodnotami z webapp1.

Řešení 6: Ověření syntaxe exportovaných šablon

Po nasazení prostředků v Azure můžete exportovat json šablony ARM a upravit ho pro další nasazení. Před nasazením prostředků byste měli v exportované šabloně ověřit správnou syntaxi.

Šablonu můžete exportovat z portálu, Azure CLI nebo Azure PowerShell. Existují doporučení, jestli jste šablonu exportovali z prostředku nebo skupiny prostředků, nebo z historie nasazení.

Po exportu šablony ARM můžete šablonu JSON dekompilovat do bicepu. Pak kód ověřte pomocí osvědčených postupů a linteru.

Další informace najdete v následujících článcích: