Odpojení a odstranění prostředků ze zásobníku nasazení

Dokončeno

Změny budou pokračovat v aplikaci pro vklady. Tým se rozhodl odebrat prostředky z aplikace. Některé prostředky musí v Azure nadále existovat, zatímco jiné jsou bezpečné odstranit. Potřebujete se dozvědět více o tom, jak Azure zpracovává prostředky, které už zásobník nasazení nespravuje.

V této lekci se naučíte používat řízení, jak Azure zpracovává prostředky odpojené od zásobníku nasazení pomocí akce u nespravovaného parametru.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Akce s nespravovanými revisitami

Při použití zásobníků nasazení se akce na nespravovaný parametr používá k řízení způsobu, jakým Azure zpracovává odpojené prostředky, skupiny prostředků a skupiny pro správu. Akci u nespravujícího parametru můžete nastavit při vytváření, úpravách nebo odstraňování zásobníku nasazení. Všechny tři operace mají možnost nastavit chování akce u nespravovaných parametrů. Mějte na paměti, že poslední sada hodnot má přednost.

Parametr má tři možné hodnoty --action-on-unmanage :

  • deleteAll – odstraní prostředky, skupiny prostředků a skupiny pro správu.
  • deleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.
  • detachAll – odpojte všechny prostředky, skupiny prostředků a skupiny pro správu.

Parametr má tři možné hodnoty -ActionOnUnmanage :

  • DeleteAll – odstraní prostředky, skupiny prostředků a skupiny pro správu.
  • DeleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.
  • DetachAll – odpojte všechny prostředky, skupiny prostředků a skupiny pro správu.

Odpojení spravovaného prostředku

Odpojený prostředek, označovaný také jako nespravovaný prostředek, je prostředek, který už není sledován nebo spravován zásobníkem nasazení, ale prostředek stále existuje v Azure. Výchozím chováním zásobníků nasazení je odpojit prostředky místo odstranění. Můžete například potřebovat zachovat prostředek, abyste ho mohli použít v jiném zásobníku nasazení v budoucnu, nebo budete muset ručně ověřit, jestli jsou jejich data bezpečná k odstranění.

Existují dvě hodnoty akce u nespravovaných parametrů, které nastavují prostředky, skupiny prostředků a skupiny pro správu, aby se odpojily, když je už zásobník nasazení nespravuje.

Zásobníky nasazení nemůžou odstranit tajné kódy trezoru klíčů. Pokud odebíráte tajné kódy trezoru klíčů ze šablony, nezapomeňte také spustit příkaz update/delete zásobníku nasazení s režimem odpojení.

  • deleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.
  • detachAll – odpojte všechny prostředky, skupiny prostředků a skupiny pro správu.

deleteResources Použití buď nebo detachAll při vytváření, úpravě nebo odstraňování zásobníků nasazení nabízí další ochranu před náhodným odstraněním. Představte si náš scénář z poslední lekce. Do našeho zásobníku nasazení jsme přidali existující pracovní prostor služby Log Analytics. Pracovní prostor je používán jinými aplikacemi, nejen aplikací pro vklady. Musí trvat po dobu životnosti aplikace. detachAll Použití jako akce s nespravováním parametru, potřebné prostředky v Azure nadále existují.

  • DeleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.
  • DetachAll – odpojte všechny prostředky, skupiny prostředků a skupiny pro správu.

DeleteResources Použití buď nebo DetachAll při vytváření, úpravě nebo odstraňování zásobníků nasazení nabízí další ochranu před náhodným odstraněním. Představte si náš scénář z poslední lekce. Do našeho zásobníku nasazení jsme přidali existující pracovní prostor služby Log Analytics. Pracovní prostor je používán jinými aplikacemi, nejen aplikací pro vklady. Musí trvat po dobu životnosti aplikace. DetachAll Použití jako akce s nespravováním parametru, potřebné prostředky v Azure nadále existují.

Podívejme se na náš soubor Bicep z poslední lekce. Soubor šablony definuje plán služby App Service, webovou aplikaci, server Azure SQL a databázi, pracovní prostor služby Log Analytics a instanci Application Insights. Řekněme, že potřebujeme odebrat pracovní prostor služby Log Analytics a instanci Application Insights, kterou jsme vytvořili v poslední lekci. Upravíme soubor Bicep a odebereme zvýrazněný kód, který odkazuje na naši webovou aplikaci.

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

Abychom mohli změny použít, musíme aktualizovat zásobník nasazení. Pokud chcete aktualizovat zásobník nasazení pomocí Azure CLI, použijte az stack group create tento příkaz.

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

Po dokončení operace aktualizace už zásobník nasazení nespravuje pracovní prostor služby Log Analytics a instanci Application Insights. V našem příkazu jsme použili --action-on-unmanage detachAll k určení, jak Azure zpracovává prostředky, které už zásobník nasazení nespravuje. V tomto případě jsou prostředky odpojené od zásobníku nasazení, ale stále existují ve skupině prostředků.

Abychom mohli změny použít, musíme aktualizovat zásobník nasazení. Pokud chcete aktualizovat zásobník nasazení pomocí Azure PowerShellu Set-AzResourceGroupDeploymentStack , použijte tento příkaz.

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

Po dokončení operace aktualizace už zásobník nasazení nespravuje pracovní prostor služby Log Analytics a instanci Application Insights. V našem příkazu jsme použili -ActionOnUnmanage DetachAll k určení, jak Azure zpracovává prostředky, které už zásobník nasazení nespravuje. V tomto případě jsou prostředky odpojené od zásobníku nasazení, ale stále existují ve skupině prostředků.

Odstranění spravovaného prostředku

Zásobníky nasazení poskytují spolehlivé vyčištění prostředků. Při aktualizaci nebo odstranění zásobníku nasazení můžete také odstranit spravované prostředky, skupiny prostředků a skupiny pro správu. Existují dvě hodnoty akce u nespravovaných parametrů, které nastaví prostředky, skupiny prostředků a skupiny pro správu, které se mají odstranit, když je už zásobník nasazení nespravuje.

  • deleteAll – odstraní prostředky, skupiny prostředků a skupiny pro správu.
  • deleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.

Zvažte naši aplikaci pro vklady. Řekněme, že se vývojový tým rozhodne místo Služby Azure SQL Database používat Azure Database for PostgreSQL. Nejprve musíme aktualizovat náš zásobník nasazení, abychom z Azure odebrali a plně odstranili server a databázi Azure SQL. K dosažení tohoto chování použijte deleteAll při aktualizaci nebo odstranění zásobníku nasazení parametr nebo deleteResources akci s nespravovatelným parametrem.

  • DeleteAll – odstraní prostředky, skupiny prostředků a skupiny pro správu.
  • DeleteResources – odstraní prostředky, ale oddělí skupiny prostředků a skupiny pro správu.

Zvažte naši aplikaci pro vklady. Řekněme, že se vývojový tým rozhodne místo Služby Azure SQL Database používat Azure Database for PostgreSQL. Nejprve musíme aktualizovat náš zásobník nasazení, abychom z Azure odebrali a plně odstranili server a databázi Azure SQL. K dosažení tohoto chování použijte DeleteAll při aktualizaci nebo odstranění zásobníku nasazení parametr nebo DeleteResources akci s nespravovatelným parametrem.

Pojďme se podívat na náš soubor Bicep z předchozí části. Soubor šablony definuje plán služby App Service, webovou aplikaci a server a databázi Azure SQL. Řekněme, že potřebujeme odebrat server a databázi Azure SQL. Upravíme soubor Bicep a odebereme zvýrazněný kód, který odkazuje na naši webovou aplikaci.

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

V našem souboru zůstaneme s následujícím kódem:

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

Abychom mohli změny použít, musíme aktualizovat zásobník nasazení. Pokud chcete aktualizovat zásobník nasazení pomocí Azure CLI, použijte az stack group create tento příkaz. Tentokrát používáme --action-on-unmanage deleteAll místo --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

Po dokončení operace aktualizace jsou jedinými prostředky, které zůstanou plánem služby App Service a webovou aplikací. V našem příkazu jsme použili --action-on-unmanage deleteAll k určení, jak Azure zpracovává prostředky, které už zásobník nasazení nespravuje. V tomto případě se prostředky odstraní ze zásobníku nasazení a z Azure.

Abychom mohli změny použít, musíme aktualizovat zásobník nasazení. Pokud chcete aktualizovat zásobník nasazení pomocí Azure PowerShellu Set-AzResourceGroupDeploymentStack , použijte tento příkaz.

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

Po dokončení operace aktualizace jsou jedinými prostředky, které zůstanou plánem služby App Service a webovou aplikací. V našem příkazu jsme použili -ActionOnUnmanage DeleteAll k určení, jak Azure zpracovává prostředky, které už zásobník nasazení nespravuje. V tomto případě se prostředky odstraní ze zásobníku nasazení a z Azure.