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