Érvénytelen sablonnal kapcsolatos hibák elhárítása

Ez a cikk ismerteti, hogyan háríthatja el a Bicep-fájlok és az Azure Resource Manager-sablonok (ARM-sablonok) érvénytelen sablonhibáit. A hiba több okból is előfordul, például szintaktikai hiba, érvénytelen paraméterérték vagy körkörös függőség.

Hibajelenség

Amikor üzembe helyez egy sablont, a következő hibaüzenet jelenik meg:

Code=InvalidTemplate
Message=<varies>

A hibaüzenet a hiba típusától függ.

Ok

Ez a hiba számos különböző típusú hibából eredhet. Ezek általában szintaxissal vagy szerkezeti hibával járnak a sablonban.

1. megoldás: Szintaktikai hiba

Ha olyan hibaüzenetet kap, amely azt jelzi, hogy a sablon érvényesítése sikertelen volt, lehet, hogy szintaktikai probléma merült fel a sablonban.

Code=InvalidTemplate
Message=Deployment template validation failed

Szintaktikai hibák akkor fordulhatnak elő, ha a sablonkifejezések sok elemet tartalmaznak. Egy tárfiók névhozzárendelése például egy- vagy dupla idézőjelpárokat, kapcsos zárójeleket, szögletes zárójeleket és zárójeleket tartalmaz. A kifejezések olyan függvényeket és karaktereket is tartalmaznak, mint a dollárjelek, a vesszők és a pont.

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

Ha ilyen típusú hibaüzenetet kap, tekintse át a kifejezés szintaxisát. A sablonhibák azonosításához használhatja a Visual Studio Code-ot a legújabb Bicep-bővítménnyel vagy az Azure Resource Manager Tools bővítménnyel.

2. megoldás: Helytelen szegmenshosszok

Egy másik érvénytelen sablonhiba akkor fordul elő, ha az erőforrás neve nem a megfelelő formátumban van. A hiba elhárításához tekintse meg a névvel és a típuseltérésekkel kapcsolatos hibák elhárítását ismertető cikket.

3. megoldás: A paraméter nem érvényes

A sablonban megadhatja egy paraméter engedélyezett értékeit. Ha az üzembe helyezés során olyan értéket ad meg, amely nem engedélyezett érték, a következő hibaüzenethez hasonló üzenet jelenik meg:

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

Ellenőrizze a sablonban a paraméter engedélyezett értékeit, és használjon egy engedélyezett értéket az üzembe helyezés során. További információ: Bicep - vagy ARM-sablonok engedélyezett értékei.

4. megoldás: Túl sok célerőforrás-csoport

Előfordulhat, hogy ez a hiba a korábbi üzemelő példányokban jelenik meg, mert egyetlen üzemelő példányban öt célerőforrás-csoportra volt korlátozva. 2020 májusában ezt a korlátot 800 erőforráscsoportra növelték. További információ: Üzembe helyezés több erőforráscsoportban Bicep - vagy ARM-sablonokhoz.

5. megoldás: Körkörös függőség észlelhető

Ez a hibaüzenet akkor jelenik meg, ha az erőforrások egymástól függenek, és ez megakadályozza az üzembe helyezés indítását. Az egymásrautaltságok kombinációja miatt két vagy több erőforrás várakozik más, szintén várakozó erőforrásokra. Például függ a függvénytől, resource1 a függ a függvénytőlresource1, és resource3 a függvénytőlresource2. resource2resource3 Ezt a problémát általában a szükségtelen függőségek eltávolításával oldhatja meg.

A Bicep implicit függőséget hoz létre, ha egy erőforrás egy másik erőforrás szimbolikus nevét használja. Explicit függőség használata dependsOn általában nem szükséges. További információ: Bicep-függőségek.

Körkörös függőség megoldása:

  1. A sablonban keresse meg a körkörös függőségben azonosított erőforrást.
  2. Ehhez az erőforráshoz vizsgálja meg a tulajdonságot és a dependsOnreference vagy resourceId függvények bármely használatát, és ellenőrizze, hogy mely erőforrásoktól függ.
  3. Vizsgálja meg ezeket az erőforrásokat, hogy lássa, mely erőforrásoktól függnek. Kövesse a függőségeket, amíg az eredeti erőforrástól függő erőforrást nem észlel.
  4. A körkörös függőségben részt vevő erőforrások esetében gondosan vizsgálja meg a tulajdonság összes használatát a dependsOn szükségtelen függőségek azonosításához. Az üzembe helyezés hibaelhárításához távolítsa el a körkörös függőségeket. A kód törlése helyett megjegyzéseket is használhat, hogy a kód ne fusson a következő üzembe helyezés során. Arm-sablonokban vagy Bicep-fájlokban használhat egysoros megjegyzéseket (//) vagy többsoros megjegyzéseket (/* ... */).
  5. Helyezze újra üzembe a sablont.

A tulajdonság értékeinek dependsOn eltávolítása hibákat okozhat a sablon üzembe helyezésekor. Ha hibaüzenetet kap, adja hozzá újra a függőséget a sablonhoz. Ha megjegyzésekkel megkerülte a sablon kódját, eltávolíthatja a megjegyzéseket a kód visszaállításához.

Ha ez a megközelítés nem oldja meg a körkörös függőséget, érdemes lehet az üzembehelyezési logika egy részét gyermekerőforrásokba (például bővítményekbe vagy konfigurációs beállításokba) áthelyezni. Konfigurálja ezeket a gyermekerőforrásokat a körkörös függőségben érintett erőforrások utáni üzembe helyezésre. Tegyük fel például, hogy két virtuális gépet helyez üzembe, de mindegyiken meg kell adnia a másikra hivatkozó tulajdonságokat. Ezeket a következő sorrendben helyezheti üzembe:

  1. vm1
  2. vm2
  3. A vm1 bővítménye a vm1-től és a vm2-től függ. A bővítmény beállítja a vm1 azon értékeit, amelyeket a vm2-ből kap.
  4. A vm2 bővítménye a vm1-től és a vm2-től függ. A bővítmény beállítja a vm2 azon értékeit, amelyeket a vm1-ből kap.

Ugyanez a megközelítés App Service alkalmazások esetében is működik. Fontolja meg a konfigurációs értékek áthelyezését az alkalmazáserőforrás gyermekerőforrásába. Két webalkalmazást a következő sorrendben helyezhet üzembe:

  1. webapp1
  2. webapp2
  3. A webapp1 konfigurációja a webapp1-től és a webapp2-től függ. A webapp2-ből származó értékeket tartalmazó alkalmazásbeállításokat tartalmaz.
  4. A webapp2 konfigurációja a webapp1-től és a webapp2-től függ. Alkalmazásbeállításokat tartalmaz a webapp1 értékeivel.