Résoudre les erreurs de modèle non valide

Cet article décrit comment résoudre les erreurs de modèle non valide pour des fichiers Bicep ou des modèles Azure Resource Manager (ARM). L’erreur peut se produire pour plusieurs raisons, comme une erreur de syntaxe, une valeur de paramètre non valide ou une dépendance circulaire.

Symptôme

Quand un modèle est déployé, vous recevez une erreur qui indique :

Code=InvalidTemplate
Message=<varies>

Le message d’erreur varie selon le type d’erreur.

Cause

Cette erreur peut résulter de différents types d’erreurs. Elles impliquent généralement une erreur de syntaxe ou de structure dans le modèle.

Solution 1 : Erreur de syntaxe

Si vous recevez un message d’erreur qui indique que la validation du modèle a échoué, vous avez peut-être 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 inclut des paires de guillemets simples ou doubles, d’accolades, de crochets et de parenthèses. Les expressions contiennent également des fonctions et des caractères tels que des signes dollar, des virgules et des points.

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

Lorsque vous recevez ce type d’erreur, examinez la syntaxe d’expression. Pour identifier les erreurs de modèle, vous pouvez utiliser Visual Studio Code avec la dernière extension Bicep ou l’extension Outils Azure Resource Manager.

Solution 2 : Longueurs de segments incorrectes

Une autre erreur de modèle non valide se produit lorsque le nom de la ressource n’est pas au format approprié. Pour résoudre cette erreur, consultez Résoudre les erreurs d’incompatibilité de nom et 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 semblable à 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

Consultez 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 fichiers Bicep ou les modèles ARM.

Solution 4 : Trop de groupes de ressources cibles

Vous pouvez voir cette erreur dans les déploiements antérieurs, car vous étiez limité à cinq groupes de ressources cibles dans un déploiement unique. 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 des ressources dépendant les unes des autres empêchent le déploiement de démarrer. À cause de l’effet combiné d’interdépendances, plusieurs ressources attendent d’autres ressources qui sont elles aussi 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 à l’aide de dependsOn n’est généralement pas nécessaire. Pour plus d’informations, consultez Dépendances Bicep.

Pour résoudre une dépendance circulaire :

  1. Dans votre modèle, recherchez la ressource identifiée dans la dépendance circulaire.
  2. Pour cette ressource, examinez la propriété dependsOn et les utilisations des fonctions reference ou resourceId pour voir de quelles ressources elle dépend.
  3. Examinez ces ressources pour voir de quelles ressources elles dépendent. Suivez les dépendances jusqu’à ce que vous trouviez une ressource qui dépend de la ressource d’origine.
  4. Pour les ressources impliquées dans la dépendance circulaire, examinez attentivement toutes les utilisations de la propriété dependsOn 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 monolignes (//) ou des commentaires multilignes (/* ... */) dans des modèles ARM ou des fichiers Bicep.
  5. Redéployez le modèle.

La suppression de valeurs de la propriété dependsOn peut provoquer des erreurs lors du déploiement du modèle. Si vous obtenez une erreur, rajoutez la dépendance dans le modèle. Si vous avez utilisé des commentaires pour contourner le code dans votre modèle, vous pouvez les supprimer pour restaurer le code.

Si cette approche ne résout pas le problème de dépendance circulaire, essayez de déplacer une partie de votre logique de déploiement dans les ressources enfants (par exemple, 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 :

  1. Machine virtuelle 1
  2. Machine virtuelle 2
  3. L’extension sur 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.
  4. 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.

Cette approche fonctionne aussi pour les applications App Service. Essayez 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 :

  1. Application web 1
  2. Application web 2
  3. La configuration de l’application web 1 dépend des applications web 1 et 2. Elle contient des paramètres d’application avec les valeurs de l’application web 2.
  4. La configuration de l’application web 2 dépend des applications web 1 et 2. Elle contient des paramètres d’application avec les valeurs de l’application web 1.

Solution 6 : Valider la syntaxe des modèles exportés

Après avoir déployé des ressources dans Azure, vous pouvez exporter le modèle JSON ARM et le modifier pour d’autres déploiements. Vous devez valider le modèle exporté pour la syntaxe correcte avant de l’utiliser pour déployer des ressources.

Vous pouvez exporter un modèle depuis le portail, Azure CLI ou Azure PowerShell. Il existe des recommandations, selon que vous avez exporté le modèle depuis la ressource, le groupe de ressources ou depuis l’historique des déploiements.

Après l’exportation du 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, suivez les articles suivants :