Beheben von Fehlern des Typs „Auftragsgröße überschritten“
In diesem Artikel wird beschrieben, wie Sie die Fehler JobSizeExceededException
und DeploymentJobSizeExceededException
beheben. Die Fehler vom Typ „Auftragsgröße überschritten“ können auftreten, wenn Sie eine Bicep-Datei oder eine Azure Resource Manager-Vorlage (ARM-Vorlage) bereitstellen.
Symptom
Bei der Bereitstellung einer Vorlage erhalten Sie eine Fehlermeldung, die besagt, dass die Bereitstellung Grenzwerte überschritten hat.
Ursache
Dieser Fehler tritt auf, wenn die Bereitstellung die zulässigen Grenzwerte überschreitet. Er tritt in der Regel auf, wenn die Vorlage oder der Auftrag zur Bereitstellung zu groß ist. Beachten Sie, dass Vorlagen vor der Überprüfung ihrer Größe für die Bereitstellung komprimiert werden, sodass die effektiven Grenzwerte größer sein können als die tatsächliche Größe der Vorlage.
Der Grenzwert für die Bereitstellung von Aufträgen beträgt 1 MB nach der Komprimierung, einschließlich der Metadaten zur Anforderung. Bei großen Vorlagen kann die kombinierte Größe von Metadaten und Vorlage diesen Grenzwert überschreiten.
Die komprimierte Vorlagengröße selbst darf 4 MB nicht überschreiten, und jede einzelne Ressourcendefinition darf nach der Komprimierung 1 MB nicht überschreiten. Diese Grenzwerte gelten für den endgültigen Zustand der Vorlage nach der Erweiterung für alle Ressourcendefinitionen, die Schleifen verwenden, um mehrere Instanzen zu erstellen, einschließlich der aufgelösten Werte für alle Variablen und Parameter.
Dies sind weitere Grenzwerte für Vorlagen:
- 256 Parameter
- 256 Variablen
- 800 Ressourcen (einschließlich copy-Anzahl)
- 64 Ausgabewerte
- 24.576 Zeichen in einem Vorlagenausdruck
Lösung 1: Reduzieren der Größe des Namens
Versuchen Sie, die Länge der Namen zu kürzen, die Sie für Parameter, Variablen und Ausgaben verwenden. Wenn diese Werte in Schleifen wiederholt werden, wird ein langer Name viele Male multipliziert.
Lösung 2: Vereinfachen der Vorlage
Wenn Ihre Datei viele verschiedene Ressourcentypen bereitgestellt hat, sollten Sie sie in Module unterteilen. Unterteilen Sie Ihre Ressourcentypen in logische Gruppen, und fügen Sie ein Modul für jede Gruppe hinzu. Wenn Sie beispielsweise viele Netzwerkressourcen bereitstellen müssen, können Sie diese Ressourcen in ein Modul verschieben.
Sie können andere Ressourcen als implizite Abhängigkeiten festlegen und Werte aus der Ausgabe von Modulen abrufen.
Verwenden Sie Vorlagenspezifikationen statt Bicep-Module. Bicep-Module werden in eine einzelne ARM-Vorlage mit geschachtelten Vorlagen konvertiert.
Lösung 3: Verwenden Sie Abhängigkeiten vorsichtig
Verwenden Sie eine implizite Abhängigkeit, die erstellt wird, wenn eine Ressource mit ihrem symbolischen Namen auf eine andere Ressource verweist. Bei den meisten Bereitstellungen ist es nicht erforderlich, dependsOn
zu verwenden und eine explizite Abhängigkeit zu erstellen.
Komplexe Abhängigkeiten können die Datenlimits schnell verbrauchen. Wenn beispielsweise eine Schleife von n Ressourcen von einer anderen Schleife von n Ressourcen abhängt, führt dies zur Speicherung von O(n²) Daten. Wenn dagegen jede Ressource in einem Loop nur von ihrem Gegenstück im anderen Loop abhängt, ergeben sich O(n) Daten. Dieser Unterschied mag gering erscheinen, aber die Speicherbelastung steigt sehr schnell an.
Lösung 4: Reduzieren unkomprimierbarer Daten
Wenn Sie große Mengen nicht komprimierbarer Daten, wie Zertifikate oder Binärdateien, oder Daten mit einem niedrigen Komprimierungsverhältnis in eine Vorlage oder Parameter einfügen, wird die Größenbeschränkung schnell erreicht.