Bereitstellungsstapel (Vorschau)

Ein Azure-Bereitstellungsstapel ist ein Typ von Azure-Ressource, der die Verwaltung einer Gruppe von Azure-Ressourcen als atomische Einheit ermöglicht. Wenn eine Bicep-Datei oder eine ARM-JSON-Vorlage an einen Bereitstellungsstapel übermittelt wird, definiert sie die Ressourcen, die von dem Stapel verwaltet werden. Wenn eine Ressource, die zuvor in der Vorlage enthalten war, entfernt wird, wird sie basierend auf dem angegebenen actionOnUnmanage-Verhalten des Bereitstellungsstapels entweder getrennt oder gelöscht. Ähnlich wie bei anderen Azure-Ressourcen kann der Zugriff auf den Bereitstellungsstapel mithilfe der rollenbasierten Zugriffssteuerung in Azure (Azure RBAC) eingeschränkt werden.

Zum Erstellen und Aktualisieren eines Bereitstellungsstapels können Sie die Azure CLI, Azure PowerShell oder das Azure-Portal zusammen mit Bicep-Dateien verwenden. Diese Bicep-Dateien werden in ARM-JSON-Vorlagen transpiliert, die dann vom Stapel als Bereitstellungsobjekt bereitgestellt werden. Der Bereitstellungsstapel bietet zusätzliche Funktionen, die über die vertrauten Bereitstellungsressourcen hinausgehen und als Obermenge dieser Funktionen dienen.

Microsoft.Resources/deploymentStacks ist der Ressourcentyp für Bereitstellungsstapel. Er besteht aus einer Hauptvorlage, die bereichsübergreifend 1:n-Aktualisierungen für die darin beschriebenen Ressourcen durchführen und alle unerwünschten Änderungen an diesen Ressourcen blockieren kann.

Wenn Sie Ihre Bereitstellung planen und bestimmen, welche Ressourcengruppen Teil desselben Stapels sein sollen, ist es wichtig, den Verwaltungslebenszyklus dieser Ressourcen zu berücksichtigen, der das Erstellen, Aktualisieren und Löschen umfasst. Angenommen, Sie müssen beispielsweise ein paar Test-VMs für verschiedene Anwendungsteams in verschiedenen Ressourcengruppenbereichen bereitstellen. In diesem Fall kann ein Bereitstellungsstapel verwendet werden, um diese Testumgebungen zu erstellen und die Konfigurationen der Test-VMs durch nachfolgende Updates des Bereitstellungsstapels zu aktualisieren. Nach Abschluss des Projekts kann es erforderlich sein, alle Ressourcen zu entfernen oder zu löschen, die erstellt wurden, z. B. die Test-VMs. Durch die Verwendung eines Bereitstellungsstapels können die verwalteten Ressourcen leicht entfernt werden, indem das entsprechende Löschflag angegeben wird. Dieser optimierte Ansatz spart Zeit während der Umgebungsbereinigung, da er eine einzelne Aktualisierung der Stapelressource umfasst, anstatt jede Test-VM in verschiedenen Ressourcengruppenbereichen einzeln zu ändern oder zu entfernen.

Der Bereitstellungsstapel erfordert Azure PowerShell, Version 10.1.0 oder höher, oder Azure CLI, Version 2.50.0 oder höher.

Um Ihren ersten Bereitstellungsstapel zu erstellen, arbeiten Sie Schnellstart: Erstellen eines Bereitstellungsstapels durch.

Gründe für das Verwenden von Bereitstellungsstapeln

Bereitstellungsstapel bieten die folgenden Vorteile:

  • Vereinfachte Bereitstellung und Verwaltung von Ressourcen in verschiedenen Bereichen als zusammenhängende Entität.
  • Verhindern unerwünschter Änderungen an verwalteten Ressourcen durch Ablehnungseinstellungen.
  • Effiziente Umgebungsbereinigung durch Verwendung von Löschflags während Aktualisierungen des Bereitstellungsstapels.
  • Verwenden von Standardvorlagen wie Bicep, ARM-Vorlagen oder Vorlagenspezifikationen für Ihre Bereitstellungsstapel.

Bekannte Einschränkungen

  • Implizit erstellte Ressourcen werden nicht vom Stapel verwaltet. Daher sind keine Ablehnungszuweisungen oder Bereinigungen möglich.
  • Ablehnungszuweisungen unterstützen keine Tags.
  • Ablehnungszuweisungen werden im Verwaltungsgruppenbereich nicht unterstützt.
  • Bereitstellungsstapel können Schlüsseltresorgeheimnisse nicht löschen. Wenn Sie Schlüsseltresorgeheimnisse aus einer Vorlage entfernen, stellen Sie sicher, dass Sie auch den Befehl zum Aktualisieren/Löschen des Bereitstellungsstapels mit dem Trennmodus ausführen.

Bekannte Probleme

  • Beim Löschen von Ressourcengruppen werden derzeit Ablehnungszuweisungen umgangen. Beim Erstellen eines Bereitstellungsstapels im Ressourcengruppenbereich enthält die Bicep-Datei nicht die Definition für die Ressourcengruppe. Trotz der Einstellung „Ablehnungszuweisung“ ist es möglich, die Ressourcengruppe und den enthaltenen Stapel zu löschen. Wenn jedoch eine Sperre für eine Ressource innerhalb der Gruppe aktiv ist, schlägt der Löschvorgang fehl.
  • Was-wäre-wenn ist in der Vorschau nicht verfügbar.
  • Ein Verwaltungsgruppenbereichsstapel ist auf die Bereitstellung in einer anderen Verwaltungsgruppe beschränkt. Er kann nur für die Verwaltungsgruppe des Stapels selbst oder für ein untergeordnetes Abonnement bereitgestellt werden.

Erstellen von Bereitstellungsstapeln

Eine Bereitstellungsstapelressource kann im Ressourcengruppen-, Abonnement- oder Verwaltungsgruppenbereich erstellt werden. Die an einen Bereitstellungsstapel übergebene Vorlage definiert die Ressourcen, die im für die Vorlagenbereitstellung angegebenen Zielbereich erstellt oder aktualisiert werden sollen.

  • Ein Stapel im Ressourcengruppenbereich kann die übergebene Vorlage im selben Ressourcengruppenbereich bereitstellen, in dem sich der Bereitstellungsstapel befindet.
  • Ein Stapel im Abonnementbereich kann die übergebene Vorlage in einem Ressourcengruppenbereich (sofern angegeben) oder im selben Abonnementbereich bereitstellen, in dem sich der Bereitstellungsstapel befindet.
  • Ein Stapel im Verwaltungsgruppenbereich kann die übergebene Vorlage im angegebenen Abonnementbereich bereitstellen.

Es ist wichtig zu beachten, dass dort, wo ein Bereitstellungsstapel vorhanden ist, auch die Ablehnungszuweisung mit der Ablehnungseinstellungen-Funktion erstellt wird. Wenn Sie beispielsweise einen Bereitstellungsstapel im Abonnementbereich erstellen, der die Vorlage im Ressourcengruppenbereich und im Ablehnungseinstellungsmodus DenyDelete bereitstellt, können Sie verwaltete Ressourcen ganz einfach in der angegebenen Ressourcengruppe bereitstellen und Löschversuche für diese Ressourcen blockieren. Mit diesem Ansatz erhöhen Sie auch die Sicherheit des Bereitstellungsstapels, indem Sie ihn auf Abonnementebene und nicht auf Ressourcengruppenebene trennen. Durch diese Trennung wird sichergestellt, dass die Entwicklerteams, die mit den bereitgestellten Ressourcen arbeiten, nur Sichtbarkeit und Schreibzugriff auf die Ressourcengruppen haben, während der Bereitstellungsstapel auf einer höheren Ebene isoliert bleibt. Dadurch wird die Anzahl der Benutzer minimiert, die einen Bereitstellungsstapel bearbeiten und Änderungen an seiner Ablehnungszuweisung vornehmen können. Weitere Informationen finden Sie unter Schützen einer verwalteten Ressource vor dem Löschen.

Die „create-stack“-Befehle können auch verwendet werden, um Bereitstellungsstapel zu aktualisieren.

So erstellen Sie einen Bereitstellungsstapel im Ressourcengruppenbereich

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

So erstellen Sie einen Bereitstellungsstapel im Abonnementbereich

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Der DeploymentResourceGroupName-Parameter gibt die Ressourcengruppe an, die zum Speichern der verwalteten Ressourcen verwendet wird. Wenn der Parameter nicht angegeben ist, werden die verwalteten Ressourcen im Abonnementbereich gespeichert.

So erstellen Sie einen Bereitstellungsstapel im Verwaltungsgruppenbereich

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Der deploymentSubscriptionId-Parameter gibt das Abonnement an, das zum Speichern der verwalteten Ressourcen verwendet wird. Wenn der Parameter nicht angegeben ist, werden die verwalteten Ressourcen im Verwaltungsgruppenbereich gespeichert.

Auflisten von Bereitstellungsstapeln

So listen Sie Ressourcen des Bereitstellungsstapels im Ressourcengruppenbereich auf

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

So listen Sie Ressourcen des Bereitstellungsstapels im Abonnementbereich auf

Get-AzSubscriptionDeploymentStack

So listen Sie Ressourcen des Bereitstellungsstapels im Verwaltungsgruppenbereich auf

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Aktualisieren von Bereitstellungsstapeln

Zum Aktualisieren eines Bereitstellungsstapels, was das Hinzufügen oder Löschen einer verwalteten Ressource umfassen kann, müssen Sie Änderungen an den zugrunde liegenden Bicep-Dateien vornehmen. Nachdem die Änderungen vorgenommen wurden, haben Sie zwei Optionen zum Aktualisieren des Bereitstellungsstapels: Ausführen des update-Befehls oder erneutes Ausführen des create-Befehls.

Die Liste der verwalteten Ressourcen kann vollständig über das IaC-Entwurfsmuster (Infrastructure-as-Code) gesteuert werden.

Verwenden des Set-Befehls

So aktualisieren Sie einen Bereitstellungsstapel im Ressourcengruppenbereich

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

So aktualisieren Sie einen Bereitstellungsstapel im Abonnementbereich

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Der DeploymentResourceGroupName-Parameter gibt die Ressourcengruppe an, die zum Speichern der Ressourcen des Bereitstellungsstapels verwendet wird. Wenn Sie keinen Ressourcengruppennamen angeben, erstellt der Bereitstellungsstapeldienst eine neue Ressourcengruppe für Sie.

So aktualisieren Sie einen Bereitstellungsstapel im Verwaltungsgruppenbereich

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Den Befehl „Neu“ verwenden

Sie erhalten eine Warnung ähnlich der folgenden:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Weitere Informationen finden Sie unter Erstellen von Bereitstellungsstapeln.

Steuern des Trennens und Löschens

Eine getrennte (oder nicht verwaltete) Ressource bezieht sich auf eine Ressource, die vom Bereitstellungsstapel weder nachverfolgt noch verwaltet wird, in Azure aber noch vorhanden ist.

Um Azure anzuweisen, nicht verwaltete Ressourcen zu löschen, aktualisieren Sie den Stapel mit dem „create stack“-Befehl mit einem der folgenden Löschflags. Weitere Informationen finden Sie unter Erstellen eines Bereitstellungsstapels.

  • DeleteAll: Verwenden Sie für verwaltete Ressourcen und Ressourcengruppen löschen anstatt trennen.
  • DeleteResources: Verwenden Sie nur für verwaltete Ressourcen löschen anstatt trennen.
  • DeleteResourceGroups: Verwenden Sie nur für verwaltete Ressourcengruppen löschen anstatt trennen. Die Verwendung von DeleteResourceGroups ist an sich ungültig. DeleteResourceGroups muss zusammen mit DeleteResources verwendet werden.

Beispiel:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

Warnung

Beim Löschen von Ressourcengruppen mit einer der Eigenschaften DeleteAll oder DeleteResourceGroups werden auch die verwalteten Ressourcengruppen sowie alle darin enthaltenen Ressourcen gelöscht.

Löschen von Bereitstellungsstapeln

Wenn Sie die Löschbefehle ohne die Löschflags ausführen, werden die nicht verwalteten Ressourcen getrennt, aber nicht gelöscht. Um die nicht verwalteten Ressourcen zu löschen, verwenden Sie die folgenden Optionen:

  • DeleteAll: Löscht sowohl die Ressourcen als auch die Ressourcengruppen.
  • DeleteResources: Löscht nur die Ressourcen.
  • DeleteResourceGroups: Löscht nur die Ressourcengruppen.

Selbst wenn Sie den „delete all“-Schalter angeben, werden sowohl die nicht verwaltete Ressource als auch die Ressourcengruppe selbst nicht gelöscht, wenn in der Ressourcengruppe, in der sich der Bereitstellungsstapel befindet, nicht verwaltete Ressourcen vorhanden sind.

So löschen Sie Ressourcen des Bereitstellungsstapels im Ressourcengruppenbereich

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

So löschen Sie Ressourcen des Bereitstellungsstapels im Abonnementbereich

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

So löschen Sie Ressourcen des Bereitstellungsstapels im Verwaltungsgruppenbereich

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Anzeigen verwalteter Ressourcen im Bereitstellungsstapel

Während der öffentlichen Vorschau verfügt der Bereitstellungsstapeldienst noch nicht über eine grafische Azure-Portalbenutzeroberfläche (GUI). Um die verwalteten Ressourcen in einem Bereitstellungsstapel anzuzeigen, verwenden Sie die folgenden Azure PowerShell/Azure CLI-Befehle:

So zeigen Sie verwaltete Ressourcen im Ressourcengruppenbereich an

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

So zeigen Sie verwaltete Ressourcen im Abonnementbereich an

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

So zeigen Sie verwaltete Ressourcen im Verwaltungsgruppenbereich an

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Hinzufügen von Ressourcen zum Bereitstellungsstapel

Um eine verwaltete Ressource hinzuzufügen, fügen Sie den zugrunde liegenden Bicep-Dateien die Ressourcendefinition hinzu, und führen Sie dann den update-Befehl aus, oder führen Sie erneut den create-Befehl aus. Weitere Informationen finden Sie unter Aktualisieren von Bereitstellungsstapeln.

Löschen verwalteter Ressourcen aus dem Bereitstellungsstapel

Um eine verwaltete Ressource zu löschen, entfernen Sie die Ressourcendefinition aus den zugrunde liegenden Bicep-Dateien, und führen Sie dann den update-Befehl aus, oder führen Sie erneut den create-Befehl aus. Weitere Informationen finden Sie unter Aktualisieren von Bereitstellungsstapeln.

Schützen verwalteter Ressourcen vor dem Löschen

Beim Erstellen eines Bereitstellungsstapels ist es möglich, den verwalteten Ressourcen einen bestimmten Berechtigungstyp zuzuweisen, der deren Löschung durch nicht autorisierte Sicherheitsprinzipale verhindert. Diese Einstellungen werden als Ablehnungseinstellungen bezeichnet. Sie möchten den Stapel in einem übergeordneten Bereich speichern.

Die Azure PowerShell enthält die folgenden Parameter, um die Ablehnungszuweisung anzupassen:

  • DenySettingsMode: Definiert die Vorgänge, die für die verwalteten Ressourcen verboten sind, um sie vor nicht autorisierten Sicherheitsprinzipalen zu schützen, die versuchen, sie zu löschen oder zu aktualisieren. Diese Einschränkung gilt für alle Personen, es sei denn, der Zugriff wurde explizit gewährt. Diese Werte schließen Folgendes ein: None, DenyDelete und DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: Ablehnungseinstellungen werden auf geschachtelte Ressourcen unter verwalteten Ressourcen angewendet.
  • DenySettingsExcludedAction: Liste der rollenbasierten Verwaltungsvorgänge, die von den Ablehnungseinstellungen ausgeschlossen sind. Bis zu 200 Aktionen sind zulässig.
  • DenySettingsExcludedPrincipal: Liste der von der Sperre ausgeschlossenen Microsoft Entra-Prinzipal-IDs. Bis zu fünf Prinzipale sind zulässig.

So wenden Sie Ablehnungseinstellungen im Ressourcengruppenbereich an

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

So wenden Sie Ablehnungseinstellungen im Abonnementbereich an

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Verwenden Sie den DeploymentResourceGroupName-Parameter, um den Namen der Ressourcengruppe anzugeben, in der der Bereitstellungsstapel erstellt wird. Wenn kein Bereich angegeben wird, wird der Bereich des Bereitstellungsstapels verwendet.

So wenden Sie Ablehnungseinstellungen im Verwaltungsgruppenbereich an

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Verwenden Sie den DeploymentSubscriptionId -Parameter, um die Abonnement-ID anzugeben, unter der der Bereitstellungsstapel erstellt wird. Wenn kein Bereich angegeben wird, wird der Bereich des Bereitstellungsstapels verwendet.

Trennen verwalteter Ressourcen vom Bereitstellungsstapel

Standardmäßig trennen Bereitstellungsstapel nicht verwaltete Ressourcen, anstatt sie zu löschen, wenn sie nicht mehr im Verwaltungsbereich des Stapels befinden. Weitere Informationen finden Sie unter Aktualisieren von Bereitstellungsstapeln.

Exportieren von Vorlagen aus Bereitstellungsstapeln

Sie können die Ressourcen aus einem Bereitstellungsstapel in eine JSON-Ausgabe exportieren. Sie können die Ausgabe in eine Datei umleiten (Pipe).

So exportieren Sie einen Bereitstellungsstapel im Ressourcengruppenbereich

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

So exportieren Sie einen Bereitstellungsstapel im Abonnementbereich

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

So exportieren Sie einen Bereitstellungsstapel im Verwaltungsgruppenbereich

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Nächste Schritte

Eine Schnellstartanleitung finden Sie unter Schnellstart: Erstellen eines Bereitstellungsstapels.