Share via


Tutorial: Verwenden eines Bereitstellungsstapels mit Bicep (Vorschau)

In diesem Tutorial erfahren Sie, wie Sie einen Bereitstellungsstapel erstellen und verwalten. Das Tutorial konzentriert sich auf das Erstellen des Bereitstellungsstapels im Ressourcengruppenbereich. Sie können jedoch auch Bereitstellungsstapel im Abonnementbereich erstellen. Weitere Erkenntnisse zum Erstellen von Bereitstellungsstapeln finden Sie unter Erstellen von Bereitstellungsstapeln.

Voraussetzungen

Erstellen einer Bicep-Datei

Erstellen Sie eine Bicep-Datei in Visual Studio Code, um ein Speicherkonto und ein virtuelles Netzwerk zu erstellen. Diese Datei wird verwendet, um Ihren Bereitstellungsstapel zu erstellen.

param resourceGroupLocation string = resourceGroup().location
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param vnetName string = 'vnet${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: resourceGroupLocation
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-11-01' = {
  name: vnetName
  location: resourceGroupLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'Subnet-1'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Speichern Sie die Bicep-Datei als main.bicep.

Erstellen eines Bereitstellungsstapels

Führen Sie zum Erstellen einer Ressourcengruppe und eines Bereitstellungsstapels die folgenden Befehle aus, und stellen Sie dabei sicher, dass Sie den entsprechenden Bicep-Dateipfad, basierend auf Ihrem Ausführungsspeicherort, angeben.

az group create \
  --name 'demoRg' \
  --location 'centralus'

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Der Schalter deny-settings-mode weist den verwalteten Ressourcen einen bestimmten Berechtigungstyp zu, der deren Löschung durch nicht autorisierte Sicherheitsprinzipale verhindert. Weitere Informationen finden Sie unter Schützen verwalteter Ressourcen vor dem Löschen.

Auflisten des Bereitstellungsstapels und der verwalteten Ressourcen

Um die Bereitstellung zu überprüfen, können Sie sowohl den Bereitstellungsstapel als auch die verwalteten Ressourcen des Bereitstellungsstapels auflisten.

So listen Sie den bereitgestellten Bereitstellungsstapel auf

az stack group show \
  --resource-group 'demoRg' \
  --name 'demoStack'

Die Ausgabe zeigt zwei verwaltete Ressourcen – ein Speicherkonto und ein virtuelles Netzwerk:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-08-14-58-28-fd6bb",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT30.1685405S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-08T14:58:28.377564+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-08T14:58:28.377564+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Sie können die Bereitstellung auch überprüfen, indem Sie die verwalteten Ressourcen im Bereitstellungsstapel auflisten:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Die Ausgabe sieht in etwa wie folgt aus:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-05-20-55-48-38d09",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT29.006353S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetzu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storezu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-05T20:55:48.006789+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-05T20:55:48.006789+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Aktualisieren des Bereitstellungsstapels

Um einen Bereitstellungsstapel zu aktualisieren, nehmen Sie die erforderlichen Änderungen an der zugrunde liegenden Bicep-Datei vor, und führen Sie dann den Befehl zum Erstellen des Bereitstellungsstapels erneut aus, oder verwenden Sie den set-Befehl in Azure PowerShell.

In diesem Tutorial führen Sie die folgenden Aktivitäten aus:

  • Aktualisieren einer Eigenschaft einer verwalteten Ressource.
  • Hinzufügen einer Ressource zum Stapel.
  • Trennen einer verwalteten Ressource.
  • Anfügen einer vorhandene Ressource an den Stapel.
  • Löschen einer verwalteten Ressource.

Aktualisieren einer verwalteten Ressource

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit zwei verwalteten Ressourcen. Sie werden eine Eigenschaft der Speicherkontoressource aktualisieren.

Bearbeiten Sie die Datei main.bicep, um den SKU-Namen von Standard_LRS in Standard_GRS zu ändern:

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_GRS'
  }
}

Aktualisieren Sie die verwaltete Ressource durch Ausführen des folgenden Befehls:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Sie können die SKU-Eigenschaft überprüfen, indem Sie den folgenden Befehl ausführen:

az resource list --resource-group 'demoRg'

Hinzufügen einer verwalteten Ressource

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit zwei verwalteten Ressourcen. Sie werden dem Stapel eine weitere Speicherkontoressource hinzufügen.

Bearbeiten Sie die Datei main.bicep, um eine weitere Speicherkontodefinition einzuschließen:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Aktualisieren Sie den Bereitstellungsstapel, indem Sie den folgenden Befehl ausführen:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Sie können die Bereitstellung überprüfen, indem Sie die verwalteten Ressourcen im Bereitstellungsstapel auflisten:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Das neue Speicherkonto wird zusätzlich zu den beiden vorhandenen Ressourcen angezeigt.

Trennen einer verwalteten Ressource

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit drei verwalteten Ressourcen. Sie werden eine der verwalteten Ressourcen trennen. Nachdem die Ressource getrennt wurde, verbleibt sie in der Ressourcengruppe.

Bearbeiten Sie die Datei main.bicep, um die folgende Speicherkontodefinition aus dem vorherigen Schritt zu entfernen:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Aktualisieren Sie den Bereitstellungsstapel, indem Sie den folgenden Befehl ausführen:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Sie können die Bereitstellung überprüfen, indem Sie die verwalteten Ressourcen im Bereitstellungsstapel auflisten:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Es werden zwei verwaltete Ressourcen im Stapel angezeigt. Die getrennte Ressource wird jedoch weiterhin in der Ressourcengruppe aufgelistet. Sie können die Ressourcen in der Ressourcengruppe auflisten, indem Sie den folgenden Befehl ausführen:

az resource list --resource-group 'demoRg'

Anfügen einer vorhandene Ressource an den Stapel

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit zwei verwalteten Ressourcen. Es gibt eine nicht verwaltete Ressource in derselben Ressourcengruppe wie die verwalteten Ressourcen. Sie werden diese nicht verwaltete Ressource an den Stapel anfügen.

Bearbeiten Sie die Datei main.bicep, um die Speicherkontodefinition der nicht verwalteten Ressource einzuschließen:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Aktualisieren Sie den Bereitstellungsstapel, indem Sie den folgenden Befehl ausführen:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Sie können die Bereitstellung überprüfen, indem Sie die verwalteten Ressourcen im Bereitstellungsstapel auflisten:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Es werden drei verwaltete Ressourcen angezeigt.

Löschen einer verwalteten Ressource

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit drei verwalteten Ressourcen. In einem der vorherigen Schritte haben Sie eine verwaltete Ressource getrennt. Manchmal möchten Sie möglicherweise eine Ressource löschen, anstatt sie zu trennen. Um eine Ressource zu löschen, verwenden Sie einen „delete-resources“-Schalter mit dem create- oder set-Befehl.

Bearbeiten Sie die Datei main.bicep, um die folgende Speicherkontodefinition zu entfernen:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Führen Sie den folgenden Befehl mit dem „delete-resources“-Schalter aus:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none' \
  --delete-resources

Zusätzlich zu dem delete-resources-Switch sind zwei weitere Schalter verfügbar: delete-all und delete-resource-groups. Weitere Informationen finden Sie unter Steuern von Trennen und Löschen.

Sie können die Bereitstellung überprüfen, indem Sie die verwalteten Ressourcen im Bereitstellungsstapel auflisten:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Es werden zwei verwaltete Ressourcen im Stapel angezeigt. Die Ressource wird auch aus der Ressourcengruppe entfernt. Sie können die Ressourcengruppe verifizieren, indem Sie den folgenden Befehl ausführen:

az resource list --resource-group 'demoRg'

Konfigurieren von Ablehnungseinstellungen

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.

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

  • deny-settings-mode: 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.
  • deny-settings-apply-to-child-scopes: Ablehnungseinstellungen werden auf untergeordnete Azure-Verwaltungsbereiche angewendet.
  • deny-settings-excluded-actions: Liste der Verwaltungsvorgänge mit rollenbasierter Zugriffssteuerung (Role-Based Access Control, RBAC), die von den Ablehnungseinstellungen ausgeschlossen sind. Bis zu 200 Aktionen sind zulässig.
  • deny-settings-excluded-principals: Liste der von der Sperre ausgeschlossenen Microsoft Entra-Prinzipal-IDs. Bis zu fünf Prinzipale sind zulässig.

In diesem Tutorial konfigurieren Sie den Modus der Ablehnungseinstellungen. Weitere Informationen zu anderen Ablehnungseinstellungen finden Sie unter Schützen verwalteter Ressourcen vor dem Löschen.

Am Ende des vorherigen Schritts verfügen Sie über einen Stapel mit zwei verwalteten Ressourcen.

Führen Sie den folgenden Befehl aus, wobei der Schalter für den Modus der Ablehnungseinstellungen auf „deny-delete“ festgelegt ist:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'denyDelete'

Der folgende Löschbefehl schlägt fehl, da der Modus der Ablehnungseinstellungen auf „deny-delete“ festgelegt ist:

az resource delete \
  --resource-group 'demoRg' \
  --name '<storage-account-name>' \
  --resource-type 'Microsoft.Storage/storageAccounts'

Aktualisieren Sie den Stapel mit dem Modus „None“ (Ohne) der Ablehnungseinstellungen, damit Sie den Rest des Tutorials absolvieren können:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Exportieren einer Vorlage aus dem Stapel

Durch Exportieren eines Bereitstellungsstapels können Sie eine Bicep-Datei generieren. Diese Bicep-Datei dient als Ressource für die zukünftige Entwicklung und nachfolgende Bereitstellungen.

az stack group export \
  --name 'demoStack' \
  --resource-group 'demoRg'

Sie können die Ausgabe in eine Datei umleiten (Pipe).

Löschen des Bereitstellungsstapels

Um den Bereitstellungsstapel und die verwalteten Ressourcen zu löschen, führen Sie den folgenden Befehl aus:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --delete-all

Wenn Sie die Löschbefehle ohne die delete all-Parameter ausführen, werden die verwalteten Ressourcen getrennt, aber nicht gelöscht. Beispiel:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg'

Die folgenden Parameter können verwendet werden, um zu steuern, ob Trennen oder Löschen verwendet wird.

  • --delete-all: Löscht sowohl die Ressourcen als auch die Ressourcengruppen.
  • --delete-resources: Löscht nur die Ressourcen.
  • --delete-resource-groups: Löscht nur die Ressourcengruppen.

Weitere Informationen finden Sie unter Löschen von Bereitstellungsstapeln.

Nächste Schritte