Fouten oplossen voor taakgrootte overschreden
In dit artikel wordt beschreven hoe u de JobSizeExceededException
en DeploymentJobSizeExceededException
fouten kunt oplossen. De taakgrootte overschrijdt fouten kunnen optreden wanneer u een Bicep-bestand of Azure Resource Manager-sjabloon (ARM-sjabloon) implementeert.
Symptoom
Bij het implementeren van een sjabloon krijgt u een foutmelding waarin wordt aangegeven dat de implementatie de limieten heeft overschreden.
Oorzaak
Deze fout treedt op wanneer de implementatie de toegestane groottelimieten overschrijdt. Dit wordt meestal weergegeven wanneer de sjabloon of de implementatietaak te groot is. Houd er rekening mee dat sjablonen worden gecomprimeerd voordat hun grootten worden geverifieerd voor implementatie, zodat de effectieve limieten mogelijk groter zijn dan de werkelijke grootte van de sjabloon.
De limiet voor de grootte van de implementatietaak is 1 MB na compressie, inclusief metagegevens over de aanvraag. Voor grote sjablonen kan de gecombineerde grootte van metagegevens en de sjabloon deze limiet overschrijden.
De gecomprimeerde sjabloongrootte zelf mag niet groter zijn dan 4 MB en elke afzonderlijke resourcedefinitie mag niet groter zijn dan 1 MB na compressie. Deze limieten gelden voor de uiteindelijke status van de sjabloon na uitbreiding voor resourcedefinities die gebruikmaken van lussen om meerdere exemplaren te maken, waaronder opgeloste waarden voor alle variabelen en parameters.
Andere sjabloonlimieten zijn:
- 256 parameters
- 256 variabelen
- 800 resources (inclusief het aantal kopieën)
- 64 uitvoerwaarden
- 24.576 tekens in een sjabloonexpressie
Oplossing 1: Naamgrootte verkleinen
Probeer de lengte van de namen die u gebruikt voor parameters, variabelen en uitvoer te verkorten. Wanneer deze waarden in lussen worden herhaald, wordt een lange naam vaak vermenigvuldigd.
Oplossing 2: Sjabloon vereenvoudigen
Wanneer uw bestand veel verschillende resourcetypen implementeert, kunt u overwegen het op te delen in modules. Verdeel uw resourcetypen in logische groepen en voeg een module toe voor elke groep. Als u bijvoorbeeld veel netwerkresources wilt implementeren, kunt u deze resources verplaatsen naar een module.
U kunt andere resources instellen als impliciete afhankelijkheden en waarden ophalen uit de uitvoer van modules.
Sjabloonspecificaties gebruiken in plaats van Bicep-modules. Bicep-modules worden geconverteerd naar één ARM-sjabloon met geneste sjablonen.
Oplossing 3: Afhankelijkheden zorgvuldig gebruiken
Gebruik een impliciete afhankelijkheid die wordt gemaakt wanneer een resource verwijst naar een andere resource met de symbolische naam. Voor de meeste implementaties is het niet nodig om een expliciete afhankelijkheid te gebruiken dependsOn
en te maken.
Complexe afhankelijkheden kunnen snel de gegevenslimieten verbruiken. Als een lus met n resources bijvoorbeeld afhankelijk is van een andere lus van n resources, resulteert dit in het opslaan van O(n²)-gegevens. Als elke resource in één lus daarentegen alleen afhankelijk is van de tegenhanger in de andere lus, resulteert dit in O(n) -gegevens. Dit verschil kan subtiel lijken, maar de opslagimpact groeit zeer snel.
Oplossing 4: Incompressibele gegevens verminderen
Als u grote hoeveelheden incomprimeerbare gegevens, zoals certificaten of binaire bestanden, of gegevens met een lage compressieverhouding in een sjabloon of parameters opneemt, wordt de groottelimiet snel verbruikt.