Resources loskoppelen en verwijderen uit een implementatiestack

Voltooid

Wijzigingen worden voortgezet met de stortingsaanvraag. Het team heeft besloten om resources uit de toepassing te verwijderen. Sommige resources moeten blijven bestaan in Azure, terwijl andere veilig kunnen worden verwijderd. Meer informatie over hoe Azure resources verwerkt die door een implementatiestack niet meer worden beheerd.

In deze les leert u hoe u bepaalt hoe Azure resources verwerkt die zijn losgekoppeld van een implementatiestack met behulp van de actie voor onbeheerde parameter.

Notitie

De opdrachten in deze les worden weergegeven om concepten te illustreren. Voer de opdrachten nog niet uit. U oefent wat u hier binnenkort leert.

Actie over niet-beheerde onbeheerde

Met implementatiestacks wordt de actie voor onbeheerde parameter gebruikt om te bepalen hoe Azure losgekoppelde resources, resourcegroepen en beheergroepen verwerkt. U kunt de actie voor een onbeheerde parameter instellen bij het maken, wijzigen of verwijderen van een implementatiestack. Alle drie de bewerkingen hebben de mogelijkheid om het gedrag van de actie op een onbeheerde parameter in te stellen. Houd er rekening mee dat de waardeset voor het laatst voorrang heeft.

Er zijn drie mogelijke waarden voor de --action-on-unmanage parameter:

  • deleteAll - verwijdert resources, resourcegroepen en beheergroepen
  • deleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los
  • detachAll - alle resources, resourcegroepen en beheergroepen loskoppelen

Er zijn drie mogelijke waarden voor de -ActionOnUnmanage parameter:

  • DeleteAll - verwijdert resources, resourcegroepen en beheergroepen
  • DeleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los
  • DetachAll - alle resources, resourcegroepen en beheergroepen loskoppelen

Een beheerde resource loskoppelen

Een losgekoppelde resource, ook wel een niet-beheerde resource genoemd, is een resource die niet meer wordt bijgehouden of beheerd door een implementatiestack, maar de resource bestaat nog steeds in Azure. Het standaardgedrag van implementatiestacks is het loskoppelen van resources in plaats van te verwijderen. U moet bijvoorbeeld de resource bewaren, zodat u deze in een andere implementatiestack in de toekomst kunt gebruiken, of u moet mogelijk handmatig controleren of de gegevens veilig zijn om te verwijderen.

Er zijn twee waarden van de actie voor onbeheerde parameters waarmee resources, resourcegroepen en beheergroepen worden ingesteld om los te koppelen wanneer de implementatiestack deze niet meer beheert.

Implementatiestacks kunnen Key Vault-geheimen niet verwijderen. Als u sleutelkluisgeheimen uit een sjabloon verwijdert, moet u ook de opdracht update/delete van de implementatiestack uitvoeren met de loskoppelmodus.

  • deleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los
  • detachAll - alle resources, resourcegroepen en beheergroepen loskoppelen

deleteResources detachAll Wanneer u uw implementatiestacks maakt, wijzigt of verwijdert, biedt u extra beveiliging tegen onbedoelde verwijdering. Bekijk ons scenario uit de laatste les. We hebben een bestaande Log Analytics-werkruimte toegevoegd aan onze implementatiestack. De werkruimte wordt gebruikt door andere toepassingen, niet alleen de stortingsaanvraag. Het moet na de levensduur van de toepassing blijven bestaan. Door de actie te gebruiken detachAll voor een onbeheerde parameter, blijven de benodigde resources bestaan in Azure.

  • DeleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los
  • DetachAll - alle resources, resourcegroepen en beheergroepen loskoppelen

DeleteResources DetachAll Wanneer u uw implementatiestacks maakt, wijzigt of verwijdert, biedt u extra beveiliging tegen onbedoelde verwijdering. Bekijk ons scenario uit de laatste les. We hebben een bestaande Log Analytics-werkruimte toegevoegd aan onze implementatiestack. De werkruimte wordt gebruikt door andere toepassingen, niet alleen de stortingsaanvraag. Het moet na de levensduur van de toepassing blijven bestaan. Door de actie te gebruiken DetachAll voor een onbeheerde parameter, blijven de benodigde resources bestaan in Azure.

Laten we eens kijken naar ons Bicep-bestand uit de laatste les. Het sjabloonbestand definieert een App Service-plan, een web-app, een Azure SQL-server en -database, een Log Analytics-werkruimte en een Application Insights-exemplaar. Stel dat we de Log Analytics-werkruimte en het Application Insights-exemplaar dat we in de laatste les hebben gemaakt, moeten verwijderen. We bewerken ons Bicep-bestand en verwijderen de gemarkeerde code die verwijst naar onze web-app.

// 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
  }
}

Als u de wijzigingen wilt toepassen, moet u de implementatiestack bijwerken. Gebruik de az stack group create opdracht om een implementatiestack bij te werken met behulp van Azure CLI.

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

Nadat de updatebewerking is voltooid, beheert de implementatiestack de Log Analytics-werkruimte en het Application Insights-exemplaar niet meer. In onze opdracht hebben we gebruikt --action-on-unmanage detachAll om op te geven hoe Azure resources verwerkt die een implementatiestack niet meer beheert. In dit geval worden de resources losgekoppeld van de implementatiestack, maar ze bestaan nog steeds in de resourcegroep.

Als u de wijzigingen wilt toepassen, moet u de implementatiestack bijwerken. Als u een implementatiestack wilt bijwerken met behulp van Azure PowerShell, gebruikt u de Set-AzResourceGroupDeploymentStack opdracht.

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

Nadat de updatebewerking is voltooid, beheert de implementatiestack de Log Analytics-werkruimte en het Application Insights-exemplaar niet meer. In onze opdracht hebben we gebruikt -ActionOnUnmanage DetachAll om op te geven hoe Azure resources verwerkt die een implementatiestack niet meer beheert. In dit geval worden de resources losgekoppeld van de implementatiestack, maar ze bestaan nog steeds in de resourcegroep.

Een beheerde resource verwijderen

Implementatiestacks bieden betrouwbare opschoning van resources. Wanneer u een implementatiestack bijwerkt of verwijdert, kunt u ook de beheerde resources, resourcegroepen en beheergroepen verwijderen. Er zijn twee waarden van de actie voor onbeheerde parameters waarmee resources, resourcegroepen en beheergroepen worden ingesteld die moeten worden verwijderd wanneer de implementatiestack deze niet meer beheert.

  • deleteAll - verwijdert resources, resourcegroepen en beheergroepen
  • deleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los

Kijk eens naar onze depositoaanvraag. Stel dat het ontwikkelteam besluit een Azure Database for PostgreSQL te gebruiken in plaats van Azure SQL Database. We moeten eerst onze implementatiestack bijwerken om de Azure SQL-server en -database uit Azure te verwijderen en volledig te verwijderen. Als u dit gedrag wilt uitvoeren, gebruikt u de deleteAll parameter of deleteResourcesactie voor onbeheerde parameters bij het bijwerken of verwijderen van de implementatiestack.

  • DeleteAll - verwijdert resources, resourcegroepen en beheergroepen
  • DeleteResources - verwijdert resources, maar koppelt resourcegroepen en beheergroepen los

Kijk eens naar onze depositoaanvraag. Stel dat het ontwikkelteam besluit een Azure Database for PostgreSQL te gebruiken in plaats van Azure SQL Database. We moeten eerst onze implementatiestack bijwerken om de Azure SQL-server en -database uit Azure te verwijderen en volledig te verwijderen. Als u dit gedrag wilt uitvoeren, gebruikt u de DeleteAll parameter of DeleteResourcesactie voor onbeheerde parameters bij het bijwerken of verwijderen van de implementatiestack.

Laten we eens kijken naar ons Bicep-bestand uit de vorige sectie. Het sjabloonbestand definieert een App Service-plan, een web-app en een Azure SQL-server en -database. Stel dat we de Azure SQL-server en -database moeten verwijderen. We bewerken ons Bicep-bestand en verwijderen de gemarkeerde code die verwijst naar onze web-app.

// 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'
  }
}

We blijven over met de volgende code in ons bestand:

// 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  
  }
}

Als u de wijzigingen wilt toepassen, moet u de implementatiestack bijwerken. Gebruik de az stack group create opdracht om een implementatiestack bij te werken met behulp van Azure CLI. Deze keer gebruiken --action-on-unmanage deleteAll we in plaats van --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

Nadat de updatebewerking is voltooid, zijn de enige resources die overblijven het App Service-plan en de web-app. In onze opdracht hebben we gebruikt --action-on-unmanage deleteAll om op te geven hoe Azure resources verwerkt die de implementatiestack niet meer beheert. In dit geval worden de resources verwijderd uit de implementatiestack en uit Azure.

Als u de wijzigingen wilt toepassen, moet u de implementatiestack bijwerken. Als u een implementatiestack wilt bijwerken met behulp van Azure PowerShell, gebruikt u de Set-AzResourceGroupDeploymentStack opdracht.

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

Nadat de updatebewerking is voltooid, zijn de enige resources die overblijven het App Service-plan en de web-app. In onze opdracht hebben we gebruikt -ActionOnUnmanage DeleteAll om op te geven hoe Azure resources verwerkt die de implementatiestack niet meer beheert. In dit geval worden de resources verwijderd uit de implementatiestack en uit Azure.