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

Ez a cikk azt 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 szintaxishiba, érvénytelen paraméterérték vagy körkörös függőség.

Hibajelenség

A sablon üzembe helyezésekor 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: Szintaxishiba

Ha egy hibaüzenet jelenik meg, amely azt jelzi, hogy a sablon érvényesítése sikertelen volt, előfordulhat, hogy szintaxisproblémája van a sablonban.

Code=InvalidTemplate
Message=Deployment template validation failed

A szintaxishibák azért fordulhatnak elő, mert a sablonkifejezések sok elemet tartalmaznak. A tárfiók névhozzárendelése például egy vagy két idézőjel párját, 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énysel.

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 lásd: A név és a típuseltérés hibáinak elhárítása.

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

Egy paraméter megengedett értékeit megadhatja egy sablonban. Az üzembe helyezés során, ha olyan értéket ad meg, amely nem engedélyezett érték, a következő hibához 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 akkor jelenik meg, ha az erőforrások egymástól függnek oly módon, hogy megakadályozzák 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 resource1 a resource3resource2 függ, a resource1függ, és resource3 a függvénytől resource2függ. 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 az egyik erőforrás egy másik erőforrás szimbolikus nevét használja. Az explicit függőség általában dependsOn 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 annak megtekintéséhez, hogy mely erőforrásoktól függ.
  3. Vizsgálja meg ezeket az erőforrásokat, és ellenőrizze, hogy mely erőforrásoktól függenek. 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, fontolja meg az üzembehelyezési logika egy részének gyermekerőforrásokba való áthelyezését (például bővítmények vagy konfigurációs beállítások). 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 tulajdonságokat, amelyek a másikra hivatkoznak. 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ékekkel rendelkező alkalmazásbeállításokat tartalmaz.
  4. A webapp2 konfigurációja a webapp1-től és a webapp2-től függ. A webapp1 értékeit tartalmazó alkalmazásbeállításokat tartalmaz.

6. megoldás: Az exportált sablonok szintaxisának ellenőrzése

Miután üzembe helyezi az erőforrásokat az Azure-ban, exportálhatja a JSON ARM-sablont, és módosíthatja azt más üzemelő példányokhoz. Az erőforrások üzembe helyezése előtt ellenőriznie kell az exportált sablont a megfelelő szintaxishoz.

Sablont exportálhat a portálról, az Azure CLI-ből vagy Azure PowerShell. Vannak javaslatok, hogy exportálta-e a sablont az erőforrásból vagy az erőforráscsoportból, vagy az üzembe helyezési előzményekből.

Miután exportált egy ARM-sablont, a JSON-sablont a Bicep-be bonthatja. Ezután használja az ajánlott eljárásokat és a lintert a kód érvényesítéséhez.

További információkért tekintse meg a következő cikkeket: