Löschen und Trennen von Ressourcen von einem Bereitstellungsstapel

Abgeschlossen

Änderungen werden mit der Depotanwendung fortgesetzt. Das Team hat beschlossen, Ressourcen aus der Anwendung zu entfernen. Einige der Ressourcen müssen weiterhin in Azure vorhanden sein, während andere problemlos gelöscht werden können. Sie müssen sich ausführlicher darüber informieren, wie Azure Ressourcen verarbeitet, die nicht mehr vom Bereitstellungsstapel verwaltet werden.

In dieser Lerneinheit erfahren Sie, wie Sie mithilfe des Parameters action on unmanage (Aktion für Nichtverwalten) steuern können, wie Azure von einem Bereitstellungsstapel getrennte Ressourcen verarbeitet.

Hinweis

Die Befehle in dieser Lerneinheit dienen der Veranschaulichung der Konzepte. Führen Sie die Befehle jetzt noch nicht aus. Sie können das Erlernte in Kürze üben.

Erneute Betrachtung von „action on unmanage“

Im Zusammenhang mit Bereitstellungsstapeln wird mit dem Parameter action on unmanage gesteuert, wie Azure getrennte Ressourcen sowie Ressourcen- und Verwaltungsgruppen verarbeitet. Sie können den Parameter action on unmanage beim Erstellen, Ändern oder Löschen eines Bereitstellungsstapels festlegen. Alle drei Vorgänge haben die Möglichkeit, das Verhalten des Parameters action on unmanage festzulegen. Denken Sie daran, dass der zuletzt festgelegte Wert Vorrang hat.

Es gibt drei mögliche Werte für den Parameter --action-on-unmanage:

  • deleteAll: Löscht Ressourcen sowie Ressourcen- und Verwaltungsgruppen
  • deleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen
  • detachAll: Trennt alle Ressourcen sowie Ressourcen- und Verwaltungsgruppen

Es gibt drei mögliche Werte für den Parameter -ActionOnUnmanage:

  • DeleteAll: Löscht Ressourcen sowie Ressourcen- und Verwaltungsgruppen
  • DeleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen
  • DetachAll: Trennt alle Ressourcen sowie Ressourcen- und Verwaltungsgruppen

Trennen einer verwalteten Ressource

Eine getrennte Ressource, auch bekannt als nicht verwaltete Ressource, ist eine Ressource, die nicht mehr von einem Bereitstellungsstapel nachverfolgt oder verwaltet wird. Die Ressource ist jedoch weiterhin in Azure vorhanden. Das Standardverhalten von Bereitstellungsstapeln besteht darin, Ressourcen zu trennen und nicht zu löschen. Beispielsweise müssen Sie die Ressource möglicherweise beibehalten, damit Sie sie in Zukunft in einem anderen Bereitstellungsstapel verwenden können, oder Sie müssen manuell überprüfen, ob die Daten sicher gelöscht werden können.

Es gibt zwei Werte des Parameters action on unmanage, die festlegen, dass Ressourcen, Ressourcengruppen und Verwaltungsgruppen getrennt werden sollen, wenn sie nicht mehr vom Bereitstellungsstapel verwaltet werden.

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.

  • deleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen
  • detachAll: Trennt alle Ressourcen sowie Ressourcen- und Verwaltungsgruppen

Die Verwendung von deleteResources oder detachAll beim Erstellen, Ändern oder Löschen Ihrer Bereitstellungsstapel bietet zusätzlichen Schutz vor versehentlichem Löschen. Betrachten Sie das Szenario aus der letzten Lerneinheit. Sie haben dem Bereitstellungsstapel einen vorhandenen Log Analytics-Arbeitsbereich hinzugefügt. Der Arbeitsbereich wird von anderen Anwendungen verwendet, nicht nur von der Depotanwendung. Er muss über die Lebensdauer der Anwendung hinaus beibehalten werden. Wenn Sie detachAll als Parameter action on unmanage verwenden, sind die erforderlichen Ressourcen weiterhin in Azure vorhanden.

  • DeleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen
  • DetachAll: Trennt alle Ressourcen sowie Ressourcen- und Verwaltungsgruppen

Die Verwendung von DeleteResources oder DetachAll beim Erstellen, Ändern oder Löschen Ihrer Bereitstellungsstapel bietet zusätzlichen Schutz vor versehentlichem Löschen. Betrachten Sie das Szenario aus der letzten Lerneinheit. Sie haben dem Bereitstellungsstapel einen vorhandenen Log Analytics-Arbeitsbereich hinzugefügt. Der Arbeitsbereich wird von anderen Anwendungen verwendet, nicht nur von der Depotanwendung. Er muss über die Lebensdauer der Anwendung hinaus beibehalten werden. Wenn Sie DetachAll als Parameter action on unmanage verwenden, sind die erforderlichen Ressourcen weiterhin in Azure vorhanden.

Sehen Sie sich die Bicep-Datei aus der letzten Lerneinheit an. Die Vorlagendatei definiert einen App Service-Plan, eine Web-App, einen Azure SQL-Server und eine Azure SQL-Datenbank, einen Log Analytics-Arbeitsbereich und eine Application Insights-Instanz. Angenommen, Sie müssen den Log Analytics-Arbeitsbereich und die Application Insights-Instanz entfernen, die Sie in der letzten Lerneinheit erstellt haben. Sie bearbeiten die Bicep-Datei und entfernen den hervorgehobenen Code, der auf Ihre Web-App verweist.

// Parameters
@description('The location for all resources.')
param location string = 'eastus'

@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'

@description('The password of the admin user.')
param sqlServerAdminUserName string

@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string

@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'

@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'

// Variables
@description('The name of the Application Insights instance.')
var applicationInsightsName = 'appinsights-deposits'

@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'

@description('The name of the Log Analytics Workspace.')
var logAnalyticsWorkspaceName = 'log-deposits'

// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'S1'
    capacity: 1
  }
}

// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
  name: webApplicationName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
          value: applicationInsights.properties.InstrumentationKey
        }     
      ]
    }    
  }
}

// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdminUserName
    administratorLoginPassword: sqlServerAdminPassword
  }
}

// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: 'Standard'
    tier: 'Standard'
  }
}

// Resource - Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
  name: logAnalyticsWorkspaceName
  location: location
  properties: {
    retentionInDays: 30
    sku: {
      name: 'PerGB2018'
    }
  }
}

// Resource - Application Insights
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: applicationInsightsName
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

Um die Änderungen anzuwenden, müssen Sie den Bereitstellungsstapel aktualisieren. Verwenden Sie den az stack group create-Befehl, um einen Bereitstellungsstapel mithilfe der Azure CLI zu aktualisieren.

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

Nach Abschluss der Aktualisierung verwaltet der Bereitstellungsstapel den Log Analytics-Arbeitsbereich und die Application Insights-Instanz nicht mehr. Im Befehl haben Sie mithilfe von --action-on-unmanage detachAll angegeben, wie Azure Ressourcen verarbeitet, die nicht mehr von einem Bereitstellungsstapel verwaltet werden. In diesem Fall werden die Ressourcen vom Bereitstellungsstapel getrennt, sind aber weiterhin in der Ressourcengruppe vorhanden.

Um die Änderungen anzuwenden, müssen Sie den Bereitstellungsstapel aktualisieren. Verwenden Sie den Befehl Set-AzResourceGroupDeploymentStack, um einen Bereitstellungsstapel mit Azure PowerShell zu aktualisieren.

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

Nach Abschluss der Aktualisierung verwaltet der Bereitstellungsstapel den Log Analytics-Arbeitsbereich und die Application Insights-Instanz nicht mehr. Im Befehl haben Sie mithilfe von -ActionOnUnmanage DetachAll angegeben, wie Azure Ressourcen verarbeitet, die nicht mehr von einem Bereitstellungsstapel verwaltet werden. In diesem Fall werden die Ressourcen vom Bereitstellungsstapel getrennt, sind aber weiterhin in der Ressourcengruppe vorhanden.

Löschen einer verwalteten Ressource

Bereitstellungsstapel bieten eine zuverlässige Ressourcenbereinigung. Wenn Sie einen Bereitstellungsstapel aktualisieren oder löschen, können Sie auch die verwalteten Ressourcen, Ressourcengruppen und Verwaltungsgruppen löschen. Es gibt zwei Werte des Parameters action on unmanage, die festlegen, dass Ressourcen, Ressourcengruppen und Verwaltungsgruppen gelöscht werden sollen, wenn sie nicht mehr vom Bereitstellungsstapel verwaltet werden.

  • deleteAll: Löscht Ressourcen sowie Ressourcen- und Verwaltungsgruppen
  • deleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen

Betrachten Sie die Depotanwendung. Angenommen, das Entwicklungsteam entscheidet sich für die Verwendung von Azure Database for PostgreSQL anstelle von Azure SQL-Datenbank. Sie müssen zuerst den Bereitstellungsstapel aktualisieren, um den Azure SQL-Server und die Azure SQL-Datenbank aus Azure zu entfernen und vollständig zu löschen. Um dieses Verhalten zu erreichen, verwenden Sie beim Aktualisieren oder Löschen des Bereitstellungsstapels den Parameter deleteAll oder deleteResources action on unmanage.

  • DeleteAll: Löscht Ressourcen sowie Ressourcen- und Verwaltungsgruppen
  • DeleteResources: Löscht Ressourcen, aber trennt Ressourcen- und Verwaltungsgruppen

Betrachten Sie die Depotanwendung. Angenommen, das Entwicklungsteam entscheidet sich für die Verwendung von Azure Database for PostgreSQL anstelle von Azure SQL-Datenbank. Sie müssen zuerst den Bereitstellungsstapel aktualisieren, um den Azure SQL-Server und die Azure SQL-Datenbank aus Azure zu entfernen und vollständig zu löschen. Um dieses Verhalten zu erreichen, verwenden Sie beim Aktualisieren oder Löschen des Bereitstellungsstapels den Parameter DeleteAll oder DeleteResources action on unmanage.

Sehen Sie sich die Bicep-Datei aus dem vorherigen Abschnitt an. Die Vorlagendatei definiert einen App Service-Plan, eine Web-App, einen Azure SQL-Server und eine Azure SQL-Datenbank. Angenommen, Sie müssen den Azure SQL-Server und die Azure SQL-Datenbank entfernen. Sie bearbeiten die Bicep-Datei und entfernen den hervorgehobenen Code, der auf Ihre Web-App verweist.

// Parameters
@description('The location for all resources.')
param location string = 'eastus'

@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'

@description('The password of the admin user.')
param sqlServerAdminUserName string

@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string

@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'

@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'

// Variables
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'

// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'F1'
    capacity: 1
  }
}

// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
  name: webApplicationName
  location: location
  properties: {
    serverFarmId: appServicePlan.id  
  }
}

// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdminUserName
    administratorLoginPassword: sqlServerAdminPassword
  }
}

// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: 'Standard'
    tier: 'Standard'
  }
}

Sie haben nun folgenden Code in Ihrer Datei:

// Parameters
@description('The location for all resources.')
param location string = 'eastus'

@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'

// Variables
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'

// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'F1'
    capacity: 1
  }
}

// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
  name: webApplicationName
  location: location
  properties: {
    serverFarmId: appServicePlan.id  
  }
}

Um die Änderungen anzuwenden, müssen Sie den Bereitstellungsstapel aktualisieren. Verwenden Sie den az stack group create-Befehl, um einen Bereitstellungsstapel mithilfe der Azure CLI zu aktualisieren. Diesmal verwenden Sie --action-on-unmanage deleteAll anstelle von --action-on-unmanage detachAll.

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage deleteAll \
    --deny-settings-mode none

Nach Abschluss der Aktualisierung sind als einzige Ressourcen der App Service-Plan und die Web-App übrig. Im Befehl haben Sie mithilfe von --action-on-unmanage deleteAll angegeben, wie Azure Ressourcen verarbeitet, die nicht mehr vom Bereitstellungsstapel verwaltet werden. In diesem Fall werden die Ressourcen aus dem Bereitstellungsstapel und aus Azure gelöscht.

Um die Änderungen anzuwenden, müssen Sie den Bereitstellungsstapel aktualisieren. Verwenden Sie den Befehl Set-AzResourceGroupDeploymentStack, um einen Bereitstellungsstapel mit Azure PowerShell zu aktualisieren.

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DeleteAll `
    -DenySettingsMode None

Nach Abschluss der Aktualisierung sind als einzige Ressourcen der App Service-Plan und die Web-App übrig. Im Befehl haben Sie mithilfe von -ActionOnUnmanage DeleteAll angegeben, wie Azure Ressourcen verarbeitet, die nicht mehr vom Bereitstellungsstapel verwaltet werden. In diesem Fall werden die Ressourcen aus dem Bereitstellungsstapel und aus Azure gelöscht.