この記事では、JobSizeExceededException
および DeploymentJobSizeExceededException
エラーを解決する方法について説明します。 ジョブのサイズ超過エラーは、Bicep ファイルまたは Azure Resource Manager テンプレート (ARM テンプレート) をデプロイするときに発生する可能性があります。
症状
テンプレートをデプロイするときに、デプロイが制限を超えたことを示すエラーが表示されます。
原因
このエラーは、デプロイが許容されるサイズ制限を超えた場合に発生します。 通常は、テンプレートまたはデプロイ ジョブが大きすぎる場合に表示されます。 テンプレートはデプロイのためにサイズが検証される前に圧縮されるため、有効な制限はテンプレートの実際のサイズよりも大きくなる可能性があることに注意してください。
デプロイ ジョブのサイズ制限は、要求に関するメタデータを含め、圧縮後 1 MB です。 大きなテンプレートの場合、メタデータとテンプレートの合計サイズがこの制限を超える可能性があります。
圧縮されたテンプレートのサイズ自体は 4 MB を超えることはできません。また、個々のリソース定義は圧縮後に 1 MB を超えることはできません。 これらの制限は、ループを使用して複数のインスタンスを作成するリソース定義の展開後のテンプレートの最終状態に適用されます。これには、すべての変数とパラメーターの解決済みの値が含まれます。
テンプレートのその他の制限は次のとおりです。
- パラメーター 256 個
- 変数 256 個
- リソース (コピー数を含む) 800 個
- 出力値 64 個
- テンプレート式内で 24,576 文字
解決策 1: 名前のサイズを小さくする
解決策 2: テンプレートを簡略化する
ファイルでさまざまな種類のリソースをデプロイする場合は、モジュールに分割することを検討 してください。 リソースの種類を論理グループに分割し、グループごとにモジュールを追加します。 たとえば、多数のネットワーク リソースをデプロイする必要がある場合、それらのリソースをモジュールに移動できます。
他のリソースを暗黙的な依存関係として設定し、 モジュールの出力から値を取得できます。
Bicep モジュールではなくテンプレート スペックを使用します。 Bicep モジュールは、入れ子になったテンプレートを持つ単一の ARM テンプレートに変換されます。
解決策 3: 依存関係を慎重に使用する
リソースがシンボリック名で別のリソースを参照するときに作成される 暗黙的な依存関係 を使用します。 ほとんどのデプロイでは、 dependsOn
を使用して 明示的な依存関係を作成する必要はありません。
依存関係が複雑であると、すぐにデータ制限に達する可能性があります。 たとえば、 n 個のリソースのループが n 個のリソースの別のループに依存している場合、 O(n²) データが格納されます。 これに対し、1 つのループ内の各リソースが他方のループの対応するリソースのみに依存している場合、 O(n) データが返されます。 この差は微妙に見えるかもしれませんが、ストレージへの影響は急速に大きくなります。
解決策 4: 圧縮できないデータを削減する
証明書やバイナリなどの大量の圧縮できないデータや、圧縮率の低いデータをテンプレートやパラメーターに含めると、すぐにサイズ制限に達してしまいます。