Koppla från och ta bort resurser från en distributionsstack

Slutförd

Ändringarna fortsätter med inlåningsprogrammet. Teamet bestämde sig för att ta bort resurser från programmet. Vissa av resurserna måste finnas kvar i Azure, medan andra är säkra att ta bort. Du behöver lära dig mer om hur Azure hanterar resurser som en distributionsstack inte längre hanterar.

I den här lektionen får du lära dig hur du använder kontroll över hur Azure hanterar resurser som kopplas från en distributionsstack med hjälp av åtgärden för ohanterade parametrar.

Kommentar

Kommandona i den här enheten visas för att illustrera begrepp. Kör inte kommandona än. Du kommer att öva på det du lär dig här snart.

Åtgärd vid ohanterad återbesökt

Med distributionsstackar används åtgärden för ohanterade parametrar för att styra hur Azure hanterar fristående resurser, resursgrupper och hanteringsgrupper. Du kan ange åtgärden för ohanterad parameter när du skapar, ändrar eller tar bort en distributionsstack. Alla tre åtgärderna har möjlighet att ange beteendet för åtgärden på ohanterad parameter. Tänk på att den senaste värdeuppsättningen har företräde.

Det finns tre möjliga värden för parametern --action-on-unmanage :

  • deleteAll – tar bort resurser, resursgrupper och hanteringsgrupper
  • deleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper
  • detachAll – kopplar från alla resurser, resursgrupper och hanteringsgrupper

Det finns tre möjliga värden för parametern -ActionOnUnmanage :

  • DeleteAll – tar bort resurser, resursgrupper och hanteringsgrupper
  • DeleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper
  • DetachAll – kopplar från alla resurser, resursgrupper och hanteringsgrupper

Koppla från en hanterad resurs

En frånkopplad resurs, även kallad ohanterad resurs, är en resurs som inte längre spåras eller hanteras av en distributionsstack, men resursen finns fortfarande i Azure. Standardbeteendet för distributionsstackar är att koppla från resurser i stället för att ta bort. Du kan till exempel behöva behålla resursen så att du kan använda den i en annan distributionsstack i framtiden, eller så kan du behöva kontrollera att dess data är säkra att ta bort manuellt.

Det finns två värden för åtgärden för ohanterade parametrar som anger att resurser, resursgrupper och hanteringsgrupper ska kopplas från när distributionsstacken inte längre hanterar dem.

Distributionsstackar kan inte ta bort Key Vault-hemligheter. Om du tar bort key vault-hemligheter från en mall ska du även köra kommandot update/delete för distributionsstacken med frånkopplat läge.

  • deleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper
  • detachAll – kopplar från alla resurser, resursgrupper och hanteringsgrupper

Om du använder antingen deleteResources eller detachAll när du skapar, ändrar eller tar bort dina distributionsstackar får du ytterligare skydd mot oavsiktlig borttagning. Tänk på vårt scenario från den senaste lektionen. Vi har lagt till en befintlig Log Analytics-arbetsyta i vår distributionsstack. Arbetsytan används av andra program, inte bara programmet för inlåning. Den måste finnas kvar efter programmets livslängd. Genom att använda detachAll som åtgärd för ohanterad parameter fortsätter nödvändiga resurser att finnas i Azure.

  • DeleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper
  • DetachAll – kopplar från alla resurser, resursgrupper och hanteringsgrupper

Om du använder antingen DeleteResources eller DetachAll när du skapar, ändrar eller tar bort dina distributionsstackar får du ytterligare skydd mot oavsiktlig borttagning. Tänk på vårt scenario från den senaste lektionen. Vi har lagt till en befintlig Log Analytics-arbetsyta i vår distributionsstack. Arbetsytan används av andra program, inte bara programmet för inlåning. Den måste finnas kvar efter programmets livslängd. Genom att använda DetachAll som åtgärd för ohanterad parameter fortsätter nödvändiga resurser att finnas i Azure.

Nu ska vi överväga vår Bicep-fil från den senaste lektionen. Mallfilen definierar en apptjänstplan, en webbapp, en Azure SQL-server och databas, en Log Analytics-arbetsyta och en Application Insights-instans. Anta att vi måste ta bort Log Analytics-arbetsytan och Application Insights-instansen som vi skapade i den senaste lektionen. Vi redigerar vår Bicep-fil och tar bort den markerade koden som refererar till vår webbapp.

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

För att tillämpa ändringarna måste vi uppdatera distributionsstacken. Om du vill uppdatera en distributionsstack med Hjälp av Azure CLI använder du az stack group create kommandot .

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

När uppdateringsåtgärden är klar hanterar distributionsstacken inte längre Log Analytics-arbetsytan och Application Insights-instansen. I vårt kommando använde --action-on-unmanage detachAll vi för att ange hur Azure hanterar resurser som en distributionsstack inte längre hanterar. I det här fallet kopplas resurserna från distributionsstacken, men de finns fortfarande i resursgruppen.

För att tillämpa ändringarna måste vi uppdatera distributionsstacken. Om du vill uppdatera en distributionsstack med Hjälp av Azure PowerShell använder du Set-AzResourceGroupDeploymentStack kommandot .

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

När uppdateringsåtgärden är klar hanterar distributionsstacken inte längre Log Analytics-arbetsytan och Application Insights-instansen. I vårt kommando använde -ActionOnUnmanage DetachAll vi för att ange hur Azure hanterar resurser som en distributionsstack inte längre hanterar. I det här fallet kopplas resurserna från distributionsstacken, men de finns fortfarande i resursgruppen.

Ta bort en hanterad resurs

Distributionsstackar ger tillförlitlig resursrensning. När du uppdaterar eller tar bort en distributionsstack kan du även ta bort hanterade resurser, resursgrupper och hanteringsgrupper. Det finns två värden för åtgärden för ohanterade parametrar som anger resurser, resursgrupper och hanteringsgrupper som ska tas bort när distributionsstacken inte längre hanterar dem.

  • deleteAll – tar bort resurser, resursgrupper och hanteringsgrupper
  • deleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper

Överväg vår insättningsapp. Anta att utvecklingsteamet bestämmer sig för att använda en Azure Database for PostgreSQL i stället för Azure SQL Database. Vi måste först uppdatera vår distributionsstack för att ta bort och ta bort Azure SQL-servern och databasen helt från Azure. För att utföra det här beteendet använder du deleteAll åtgärden eller deleteResourcespå ohanterad parameter när du uppdaterar eller tar bort distributionsstacken.

  • DeleteAll – tar bort resurser, resursgrupper och hanteringsgrupper
  • DeleteResources – tar bort resurser, men kopplar från resursgrupper och hanteringsgrupper

Överväg vår insättningsapp. Anta att utvecklingsteamet bestämmer sig för att använda en Azure Database for PostgreSQL i stället för Azure SQL Database. Vi måste först uppdatera vår distributionsstack för att ta bort och ta bort Azure SQL-servern och databasen helt från Azure. För att utföra det här beteendet använder du DeleteAll åtgärden eller DeleteResourcespå ohanterad parameter när du uppdaterar eller tar bort distributionsstacken.

Nu ska vi överväga vår Bicep-fil från föregående avsnitt. Mallfilen definierar en apptjänstplan, en webbapp och en Azure SQL-server och databas. Anta att vi måste ta bort Azure SQL-servern och databasen. Vi redigerar vår Bicep-fil och tar bort den markerade koden som refererar till vår webbapp.

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

Vi har kvar följande kod i filen:

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

För att tillämpa ändringarna måste vi uppdatera distributionsstacken. Om du vill uppdatera en distributionsstack med Hjälp av Azure CLI använder du az stack group create kommandot . Den här gången använder --action-on-unmanage deleteAll vi i stället för --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

När uppdateringsåtgärden är klar är de enda resurser som återstår apptjänstplanen och webbappen. I vårt kommando använde --action-on-unmanage deleteAll vi för att ange hur Azure hanterar resurser som distributionsstacken inte längre hanterar. I det här fallet tas resurserna bort från distributionsstacken och från Azure.

För att tillämpa ändringarna måste vi uppdatera distributionsstacken. Om du vill uppdatera en distributionsstack med Hjälp av Azure PowerShell använder du Set-AzResourceGroupDeploymentStack kommandot .

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

När uppdateringsåtgärden är klar är de enda resurser som återstår apptjänstplanen och webbappen. I vårt kommando använde -ActionOnUnmanage DeleteAll vi för att ange hur Azure hanterar resurser som distributionsstacken inte längre hanterar. I det här fallet tas resurserna bort från distributionsstacken och från Azure.