Freigeben über


Azure Resource Manager-Bereitstellungsmodi

Bei der Bereitstellung Ihrer Ressourcen geben Sie an, dass es sich bei der Bereitstellung entweder um ein inkrementelles Update oder um ein vollständiges Update handelt. Der Unterschied zwischen diesen beiden Modi besteht darin, wie Resource Manager vorhandene Ressourcen in der Ressourcengruppe behandelt, die nicht in der Vorlage enthalten sind.

Wichtig

Verwenden Sie Bereitstellungsstapel, um Ressourcenlöschungen durchzuführen, wenn Sie ARM-Vorlagen oder Bicep-Dateien verwenden, da der vollständige Modus schrittweise außer Betrieb genommen wird.

Für beide Modi versucht der Ressourcen-Manager, alle in der Vorlage angegebenen Ressourcen zu erstellen. Wenn die Ressource bereits in der Ressourcengruppe vorhanden ist und ihre Einstellungen unverändert sind, wird für diese Ressource kein Vorgang ausgeführt. Wenn Sie die Eigenschaftswerte für eine Ressource ändern, wird die Ressource mit diesen neuen Werten aktualisiert. Wenn Sie versuchen, den Speicherort oder typ einer vorhandenen Ressource zu aktualisieren, schlägt die Bereitstellung mit einem Fehler fehl. Stellen Sie stattdessen eine neue Ressource mit dem benötigten Speicherort oder Typ bereit.

Der Standardmodus ist inkrementell.

Inkrementeller Modus

Im inkrementellen Modus belässt der Ressourcen-Manager die unveränderten Ressourcen, die in der Ressourcengruppe vorhanden sind, aber nicht in der Vorlage angegeben sind. Ressourcen in der Vorlage werden der Ressourcengruppe hinzugefügt.

Wichtig

Der inkrementelle Modus ist der empfohlene Bereitstellungsmodus. Wenn Ressourcen als Teil einer Bicep-Datei oder ARM-JSON-Vorlage gelöscht werden müssen, verwenden Sie Bereitstellungsstapel.

Beim erneuten Bereitstellen einer vorhandenen Ressource im inkrementellen Modus werden alle Eigenschaften erneut angewendet. Die Eigenschaften werden nicht inkrementell hinzugefügt. Ein häufiges Missverständnis besteht darin, dass Eigenschaften, die nicht in der Vorlage angegeben sind, unverändert bleiben. Wenn Sie bestimmte Eigenschaften nicht angeben, interpretiert der Ressourcen-Manager die Bereitstellung als Überschreiben dieser Werte. Eigenschaften, die nicht in der Vorlage enthalten sind, werden auf die Standardwerte zurückgesetzt. Geben Sie alle nicht standardmäßigen Werte für die Ressource an, nicht nur die, die Sie aktualisieren. Die Ressourcendefinition in der Vorlage enthält immer den endgültigen Zustand der Ressource. Es kann keine teilweise Aktualisierung einer vorhandenen Ressource darstellen.

Warnung

In seltenen Fällen können Sie Eigenschaften entweder für eine Ressource oder für eine ihrer untergeordneten Ressourcen festlegen. Zwei häufige Beispiele sind Subnetze in virtuellen Netzwerken und Standortkonfigurationswerte für Web-Apps. In diesen Fällen müssen Sie inkrementelle Updates sorgfältig behandeln.

Geben Sie für Subnetze die Werte über die subnets Eigenschaft der Ressource Microsoft.Network/virtualNetworks an. Definieren Sie die Werte nicht über die untergeordnete Ressource "Microsoft.Network/virtualNetworks/subnets". Solange die Subnetze im virtuellen Netzwerk definiert sind, können Sie das virtuelle Netzwerk erneut bereitstellen und die Subnetze nicht verlieren.

Bei Standortkonfigurationswerten werden die Werte im untergeordneten Ressourcentyp Microsoft.Web/sites/configimplementiert. Wenn Sie die Web-App erneut bereitstellen und ein leeres Objekt für die Websitekonfigurationswerte angeben, wird die untergeordnete Ressource nicht aktualisiert. Der Typ der untergeordneten Ressource wird jedoch aktualisiert, wenn Sie neue Sitekonfigurationswerte angeben.

Vollständiger Modus

Warnung

Der vollständige Modus wird nicht empfohlen. Wenn Sie Löschvorgänge mit Bicep- oder ARM-Vorlagenbereitstellungen durchführen möchten, verwenden Sie Bereitstellungsstapel.

Im vollständigen Modus löscht der Ressourcen-Manager Ressourcen, die in der Ressourcengruppe vorhanden sind, aber nicht in der Vorlage angegeben sind.

Hinweis

Verwenden Sie immer den Was-wäre-wenn-Vorgang, bevor Sie eine Vorlage im vollständigen Modus bereitstellen. Anhand von „Was-wäre-wenn“-Vorgängen können Sie feststellen, welche Ressourcen erstellt, gelöscht oder geändert werden. Verwenden Sie Was-wäre-wenn, um ein unbeabsichtigtes Löschen von Ressourcen zu vermeiden.

Wenn Ihre Vorlage eine Ressource enthält, die nicht bereitgestellt wird, da die Bedingung als falsch ausgewertet wird, hängt das Ergebnis davon ab, welche REST-API-Version Sie für die Bereitstellung der Vorlage verwenden. Wenn Sie eine Frühere Version als 2019-05-10 verwenden, wird die Ressource nicht gelöscht. Bei Version 2019-05-10 oder höher wird die Ressource gelöscht. Die neuesten Versionen von Azure PowerShell und Azure CLI löschen die Ressource.

Seien Sie vorsichtig, wenn Sie den vollständigen Modus mit Kopierschleifen verwenden. Alle Ressourcen, die nach dem Auflösen der Kopierschleife nicht in der Vorlage angegeben sind, werden gelöscht.

Wenn Sie für mehr als eine Ressourcengruppe in einer Vorlage bereitstellen, können Ressourcen in der Ressourcengruppe, die im Bereitstellungsvorgang angegeben ist, gelöscht werden. Ressourcen in den sekundären Ressourcengruppen werden nicht gelöscht.

Bei der Verarbeitung von Löschungen im vollständigen Modus gibt es zwischen Ressourcentypen einige Unterschiede. Übergeordnete Ressourcen werden automatisch gelöscht, wenn sie nicht in einer Vorlage enthalten sind, die im vollständigen Modus bereitgestellt wird. Einige untergeordnete Ressourcen werden nicht automatisch gelöscht, wenn sie nicht in der Vorlage enthalten sind. Diese untergeordneten Ressourcen werden jedoch gelöscht, wenn die übergeordnete Ressource gelöscht wird.

Wenn Ihre Ressourcengruppe beispielsweise eine DNS-Zone (Microsoft.Network/dnsZones Ressourcentyp) und einen CNAME-Eintrag (Microsoft.Network/dnsZones/CNAME Ressourcentyp) enthält, ist die DNS-Zone die übergeordnete Ressource für den CNAME-Eintrag. Wenn Sie den vollständigen Modus bereitstellen und die DNS-Zone nicht in Ihre Vorlage einschließen, werden die DNS-Zone und der CNAME-Eintrag gelöscht. Wenn Sie die DNS-Zone in Ihre Vorlage einschließen, aber nicht den CNAME-Eintrag einschließen, wird der CNAME nicht gelöscht.

Eine Liste, wie Ressourcentypen mit der Löschung umgehen, finden Sie unter Löschen von Azure-Ressourcen für Bereitstellungen im vollständigen Modus.

Wenn die Ressourcengruppe gesperrt ist, löscht der vollständige Modus die Ressourcen nicht.

Hinweis

Nur Vorlagen auf Stammebene unterstützen den vollständigen Bereitstellungsmodus. Für verknüpfte oder geschachtelte Vorlagen müssen Sie den inkrementellen Modus verwenden.

Bereitstellungen auf Abonnementebene unterstützen keinen vollständigen Modus.

Derzeit unterstützt das Portal den vollständigen Modus nicht.

Beispielergebnis

Um den Unterschied zwischen inkrementellen und vollständigen Modi zu veranschaulichen, berücksichtigen Sie das folgende Szenario.

Die Ressourcengruppe enthält:

  • Ressource A
  • Ressource B
  • Ressource C

Die Vorlage enthält:

  • Ressource A
  • Ressource B
  • Ressource D

Wenn sie im inkrementellen Modus bereitgestellt wird, hat die Ressourcengruppe Folgendes:

  • Ressource A
  • Ressource B
  • Ressource C
  • Ressource D

Wenn sie im vollständigen Modus bereitgestellt wird, wird Ressource C gelöscht. Die Ressourcengruppe hat Folgendes:

  • Ressource A
  • Ressource B
  • Ressource D

Festlegen des Bereitstellungsmodus

Verwenden Sie Mode den Parameter, um den Bereitstellungsmodus bei der Bereitstellung mit PowerShell festzulegen.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Verwenden Sie mode den Parameter, um den Bereitstellungsmodus beim Bereitstellen mit Azure CLI festzulegen.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

Das folgende Beispiel zeigt eine verknüpfte Vorlage, die auf den inkrementellen Bereitstellungsmodus festgelegt ist:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Nächste Schritte