Risolvere gli errori relativi al superamento delle dimensioni del processo

Questo articolo descrive come risolvere gli errori JobSizeExceededException e DeploymentJobSizeExceededException. Gli errori di superamento delle dimensioni del processo si possono verificare quando si distribuisce un file Bicep o un modello di Azure Resource Manager (modello di ARM).

Sintomo

Durante la distribuzione di un modello, viene visualizzato un errore che indica che la distribuzione ha superato i limiti.

Causa

Questo errore si verifica quando la distribuzione supera i limiti di dimensione consentiti. In genere viene visualizzato quando il modello o il processo di distribuzione è troppo grande. Si noti che i modelli vengono compressi prima della verifica delle dimensioni per la distribuzione, pertanto i limiti effettivi possono essere maggiori delle dimensioni effettive del modello.

Il limite di dimensioni del processo di distribuzione è di 1 MB dopo la compressione, inclusi i metadati relativi alla richiesta. Per i modelli di grandi dimensioni, le dimensioni combinate dei metadati e il modello possono superare questo limite.

Le dimensioni del modello compresso non possono superare i 4 MB e ogni singola definizione di risorsa non può superare 1 MB dopo la compressione. Questi limiti si applicano allo stato finale del modello dopo l'espansione per tutte le definizioni di risorse che usano cicli per creare più istanze, inclusi i valori risolti per tutte le variabili e i parametri.

Altri limiti del modello sono riportati di seguito:

  • 256 parametri
  • 256 variabili
  • 800 risorse (incluso il conteggio copie)
  • 64 valori di output
  • 24.576 caratteri in un'espressione di modello

Soluzione 1: Ridurre le dimensioni del nome

Provare a ridurre la lunghezza dei nomi usati per parametri, variabili e output. Quando questi valori si ripetono in cicli, un nome lungo viene moltiplicato più volte.

Soluzione 2: semplificare il modello

Quando un file distribuisce molti tipi di risorse diversi, è consigliabile la suddivisione in moduli. Suddividere i tipi di risorse in gruppi logici e aggiungere un modulo a ciascun gruppo. Ad esempio, se fosse necessario distribuire molte risorse di networking, si possono spostare tali risorse in un modulo.

È possibile impostare altre risorse come dipendenze implicite e ottenere valori dall'output dei moduli.

Usare le specifiche di modello anziché i moduli Bicep. I moduli Bicep vengono convertiti in un singolo modello di Resource Manager con modelli annidati.

Soluzione 3: Usare attentamente le dipendenze

Usare una dipendenza implicita che viene creata quando una risorsa fa riferimento a un'altra risorsa in base al nome simbolico. Per la maggior parte delle distribuzioni non è necessario usare dependsOn e creare una dipendenza esplicita.

Le dipendenze complesse possono usare rapidamente i limiti dei dati. Ad esempio, se un ciclo di n risorse dipende da un altro ciclo di n risorse, si ottiene l'archiviazione dei dati O(n²). Al contrario, se ogni risorsa in un ciclo dipende solo dalla controparte dell'altro ciclo, genera dati O(n). Questa differenza può sembrare sottile, ma l'impatto sull'archiviazione cresce molto rapidamente.

Soluzione 4: Ridurre i dati incompressibili

Includendo grandi quantità di dati incomprimibili, ad esempio certificati o file binari, o dati con un rapporto di compressione basso in un modello o parametri utilizzeranno rapidamente il limite di dimensioni.