Résoudre les erreurs de dépassement de taille de la tâche

Cet article décrit comment résoudre les erreurs JobSizeExceededException et DeploymentJobSizeExceededException. Les erreurs de taille de poste dépassée peuvent se produire lorsque vous déployez un fichier Bicep ou un modèle Azure Resource Manager (modèle ARM).

Symptôme

Lors du déploiement d’un modèle, vous recevez une erreur indiquant que le déploiement a dépassé les limites.

Cause

Cette erreur se produit lorsque le déploiement dépasse les limites de taille autorisées. Elle apparaît généralement lorsque le modèle ou le travail de déploiement est trop volumineux. Notez que les modèles sont compressés avant que leurs tailles soient vérifiées pour le déploiement, de sorte que les limites effectives peuvent être supérieures à la taille réelle du modèle.

La limite de taille du travail de déploiement est de 1 Mo après la compression, y compris les métadonnées relatives à la requête. Pour les modèles volumineux, la taille combinée des métadonnées et le modèle peuvent dépasser cette limite.

En soi, la taille du modèle compressé ne peut pas dépasser 4 Mo, et chaque définition de ressource individuelle ne peut pas dépasser 1 Mo après la compression. Ces limites s’appliquent à l’état final du modèle après l’extension pour toutes les définitions de ressources qui utilisent des boucles pour créer plusieurs instances, ce qui inclut des valeurs résolues pour toutes les variables et paramètres.

Autres limites des modèles :

  • 256 paramètres
  • 256 variables
  • 800 ressources (incluant le nombre de copies)
  • 64 valeurs de sortie
  • 24 576 caractères dans une expression de modèle

Solution 1 : Réduire la taille du nom

Essayez de raccourcir la longueur des noms que vous utilisez pour les paramètres, variables et sorties. Lorsque ces valeurs sont répétées dans des boucles, un nom long est multiplié de nombreuses fois.

Solution 2 : Simplifier le modèle

Lorsque votre fichier déploie un grand nombre de types de ressources, envisagez de le diviser en modules. Divisez vos types de ressources en groupes logiques et ajoutez un module pour chaque groupe. Par exemple, si vous devez déployer un grand nombre de ressources réseau, vous pouvez déplacer ces ressources vers un module.

Vous pouvez définir d’autres ressources comme dépendances implicites et obtenir des valeurs à partir de la sortie des modules.

Utilisez des spécifications de modèle au lieu des modules Bicep. Les modules Bicep sont convertis en un seul modèle ARM avec des modèles imbriqués.

Solution 3 : Utiliser des dépendances avec soin

Utilisez une dépendance implicite créée lorsqu’une ressource fait référence à une autre ressource par son nom symbolique. Pour la plupart des déploiements, il n’est pas nécessaire d’utiliser dependsOn et de créer une dépendance explicite.

Les dépendances complexes peuvent rapidement consommer les limites de données. Par exemple, si une boucle de ressources n dépend d’une autre boucle de ressources n, elle entraîne un stockage des données O(n²). En revanche, si chaque ressource d’une boucle dépend uniquement de son équivalent dans l’autre boucle, elle génère des données O(n). Cette différence peut paraître minime, mais l’impact sur le stockage augmente très rapidement.

Solution 4 : Réduire les données incompressibles

L’inclusion de grandes quantités de données incompressibles, telles que des certificats ou des fichiers binaires, ou des données avec un faible taux de compression dans un modèle ou des paramètres consommera rapidement la limite de taille.