Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment résoudre les erreurs de modèle non valides pour les fichiers Bicep et les modèles Azure Resource Manager (modèles ARM). L’erreur se produit pour plusieurs raisons, comme une erreur de syntaxe, une valeur de paramètre non valide ou une dépendance circulaire.
Symptôme
Lorsqu’un modèle est déployé, vous recevez une erreur qui indique :
Code=InvalidTemplate
Message=<varies>
Le message d’erreur dépend du type d’erreur.
La cause
Cette erreur peut provenir de plusieurs types d’erreurs différents. Ils impliquent généralement une syntaxe ou une erreur structurelle dans le modèle.
Solution 1 : Erreur de syntaxe
Si vous recevez un message d’erreur indiquant que le modèle a échoué, vous pouvez rencontrer un problème de syntaxe dans votre modèle.
Code=InvalidTemplate
Message=Deployment template validation failed
Des erreurs de syntaxe peuvent se produire, car les expressions de modèle ont de nombreux éléments. Par exemple, l’attribution de nom pour un compte de stockage comprend des paires de guillemets simples ou doubles, accolades, crochets et parenthèses. Les expressions contiennent également des fonctions et des caractères tels que des signes dollar, des virgules et des points.
Lorsque vous recevez ce type d’erreur, passez en revue la syntaxe de l’expression. Pour identifier les erreurs de modèle, vous pouvez utiliser Visual Studio Code avec la dernière extension Bicep ou Azure Resource Manager Tools.
Solution 2 : Longueurs de segment incorrectes
Une autre erreur de modèle non valide se produit lorsque le nom de la ressource n’est pas au format correct. Pour résoudre cette erreur, consultez Résoudre les erreurs de nom et d’incompatibilité de type.
Solution 3 : Le paramètre n’est pas valide
Vous pouvez spécifier les valeurs autorisées d’un paramètre dans un modèle. Pendant le déploiement, si vous fournissez une valeur qui n’est pas une valeur autorisée, vous recevez un message similaire à l’erreur suivante :
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
Vérifiez le modèle pour connaître les valeurs autorisées du paramètre et utilisez une valeur autorisée pendant le déploiement. Pour plus d’informations, consultez les valeurs autorisées pour les modèles Bicep ou ARM.
Solution 4 : Trop de groupes de ressources cibles
Vous pouvez voir cette erreur dans les déploiements précédents, car vous avez été limité à cinq groupes de ressources cibles dans un seul déploiement. En mai 2020, cette limite a été augmentée à 800 groupes de ressources. Pour plus d’informations, consultez la procédure de déploiement sur plusieurs groupes de ressources pour Bicep ou les modèles ARM.
Solution 5 : Dépendance circulaire détectée
Vous recevez cette erreur lorsque les ressources dépendent les unes des autres d’une manière qui empêche le déploiement de démarrer. Une combinaison d'interdépendances amène deux ou plusieurs ressources à attendre, tandis que d'autres ressources se trouvent également en attente. Par exemple, resource1 dépend de resource3, resource2 dépend de resource1, et resource3 dépend de resource2. Vous pouvez généralement résoudre ce problème en supprimant les dépendances inutiles.
Bicep crée une dépendance implicite lorsqu’une ressource utilise le nom symbolique d’une autre ressource. Une dépendance explicite utilisant dependsOn généralement n’est pas nécessaire. Pour plus d’informations, consultez Dépendances Bicep.
Pour résoudre une dépendance circulaire :
- Dans votre modèle, recherchez la ressource identifiée dans la dépendance circulaire.
- Pour cette ressource, examinez la propriété
dependsOnet les utilisations des fonctionsreferenceouresourceIdpour identifier les ressources dont elle dépend. - Examinez ces ressources pour voir les ressources dont elles dépendent. Suivez les dépendances jusqu’à ce que vous notiez une ressource qui dépend de la ressource d’origine.
- Pour les ressources impliquées dans la dépendance circulaire, examinez attentivement toutes les utilisations de la
dependsOnpropriété pour identifier les dépendances qui ne sont pas nécessaires. Pour résoudre les problèmes de déploiement, supprimez les dépendances circulaires. Au lieu de supprimer le code, vous pouvez utiliser des commentaires pour que le code ne s’exécute pas pendant le déploiement suivant. Vous pouvez utiliser des commentaires à ligne unique (//) ou des commentaires à plusieurs lignes (/* ... */) dans des modèles ARM ou des fichiers Bicep . - Redéployez le modèle.
La suppression de valeurs de la dependsOn propriété peut entraîner des erreurs lorsque vous déployez le modèle. Si vous obtenez une erreur, ajoutez à nouveau la dépendance au modèle. Si vous avez utilisé des commentaires pour contourner le code dans votre modèle, vous pouvez supprimer les commentaires pour restaurer le code.
Si cette approche ne résout pas la dépendance circulaire, envisagez de déplacer une partie de votre logique de déploiement en ressources enfants (telles que les extensions ou les paramètres de configuration). Configurez ces ressources enfants pour qu’elles se déploient après les ressources impliquées dans la dépendance circulaire. Par exemple, supposons que vous déployiez deux machines virtuelles, mais que vous deviez définir sur chacune d’elles des propriétés faisant référence les unes aux autres. Vous pouvez les déployer dans l’ordre suivant :
- Machine virtuelle 1
- Machine virtuelle 2
- L'extension de la machine virtuelle 1 dépend des machines virtuelles 1 et 2. L’extension définit sur la machine virtuelle 1 des valeurs qu’elle obtient de la machine virtuelle 2.
- L’extension sur la machine virtuelle 2 dépend des machines virtuelles 1 et 2. L’extension définit sur la machine virtuelle 2 des valeurs qu’elle obtient de la machine virtuelle 1.
La même approche fonctionne pour les applications App Service. Envisagez de déplacer des valeurs de configuration dans une ressource enfant de la ressource d’application. Vous pouvez déployer deux applications web dans l’ordre suivant :
- Application web 1
- WebApp2
- La configuration de webapp1 dépend de webapp1 et de webapp2. Il contient des paramètres d’application avec des valeurs de webapp2.
- La configuration de webapp2 dépend de webapp1 et webapp2. Il contient des paramètres d’application avec des valeurs de webapp1.
Solution 6 : Valider la syntaxe pour les modèles exportés
Après avoir déployé des ressources dans Azure, vous pouvez exporter le modèle ARM JSON et le modifier pour d’autres déploiements. Vous devez valider le modèle exporté pour une syntaxe correcte avant de l’utiliser pour déployer des ressources.
Vous pouvez exporter un modèle à partir du portail, d’Azure CLI ou d’Azure PowerShell. Il existe des recommandations indiquant si vous avez exporté le modèle à partir de la ressource ou du groupe de ressources ou de l’historique de déploiement.
Après avoir exporté un modèle ARM, vous pouvez décompiler le modèle JSON vers Bicep. Utilisez ensuite les meilleures pratiques et le linter pour valider votre code.
Pour plus d'informations, consultez les articles suivants :