Scollegare ed eliminare risorse da uno stack di distribuzione

Completato

Le modifiche continuano con l'applicazione depositi. Il team ha deciso di rimuovere risorse dall'applicazione. Alcune risorse devono continuare a esistere in Azure, mentre possono essere eliminate in sicurezza. È necessario apprendere altre informazioni su come Azure gestisce le risorse che uno stack di distribuzione non gestisce più.

In questa unità si apprenderà come usare il modo in cui Azure gestisce le risorse scollegate da uno stack di distribuzione usando il parametro action on unmanage.

Nota

I comandi riportati in questa unità vengono illustrati per spiegare i concetti. Non eseguire ancora i comandi. Presto sarà possibile provare quanto appreso.

Action on unmanage rivisitato

Con gli stack di distribuzione, il parametro action on unmanage viene usato per controllare come Azure gestisce le risorse scollegate, i gruppi di risorse e i gruppi di gestione. È possibile impostare il parametro action on unmanage durante la creazione, la modifica o l'eliminazione di uno stack di distribuzione. Tutte e tre le operazioni possono impostare il comportamento del parametro action on unmanage. Tenere presente che il valore impostato più di recente ha la precedenza.

Esistono tre valori possibili per il parametro --action-on-unmanage:

  • deleteAll: elimina risorse, gruppi di risorse e gruppi di gestione
  • deleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione
  • detachAll: scollega tutte le risorse, i gruppi di risorse e i gruppi di gestione

Esistono tre valori possibili per il parametro -ActionOnUnmanage:

  • DeleteAll: elimina risorse, gruppi di risorse e gruppi di gestione
  • DeleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione
  • DetachAll: scollega tutte le risorse, i gruppi di risorse e i gruppi di gestione

Scollegare una risorsa gestita

Una risorsa scollegata, detta anche "risorsa non gestita", è una risorsa che non è più tracciata o gestita da uno stack di distribuzione, ma la risorsa esiste ancora in Azure. Il comportamento predefinito degli stack di distribuzione consiste nello scollegamento delle risorse anziché nell'eliminazione. Ad esempio, potrebbe essere necessario mantenere la risorsa in modo da poterla usare in un altro stack di distribuzione in futuro oppure potrebbe essere necessario verificare manualmente che i relativi dati possano essere eliminati in sicurezza.

Esistono due valori del parametro action on unmanage che imposta risorse, gruppi di risorse e gruppi di gestione da scollegare quando lo stack di distribuzione non li gestisce più.

Gli stack di distribuzione non possono eliminare segreti di Key Vault. Se si rimuovono segreti di Key Vault da un modello, assicurarsi di eseguire anche il comando di aggiornamento/eliminazione dello stack di distribuzione con la modalità di scollegamento.

  • deleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione
  • detachAll: scollega tutte le risorse, i gruppi di risorse e i gruppi di gestione

L'uso di deleteResources o detachAll durante la creazione, la modifica o l'eliminazione degli stack di distribuzione offre una protezione aggiuntiva contro l'eliminazione accidentale. Si consideri lo scenario dell'ultima unità. È stata aggiunta un'area di lavoro Log Analytics esistente allo stack di distribuzione. L'area di lavoro viene usata da altre applicazioni, non solo dall'applicazione di depositi. Deve persistere oltre la durata dell'applicazione. Usando detachAll come parametro action on unmanage, le risorse necessarie continuano a esistere in Azure.

  • DeleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione
  • DetachAll: scollega tutte le risorse, i gruppi di risorse e i gruppi di gestione

L'uso di DeleteResources o DetachAll durante la creazione, la modifica o l'eliminazione degli stack di distribuzione offre una protezione aggiuntiva contro l'eliminazione accidentale. Si consideri lo scenario dell'ultima unità. È stata aggiunta un'area di lavoro Log Analytics esistente allo stack di distribuzione. L'area di lavoro viene usata da altre applicazioni, non solo dall'applicazione di depositi. Deve persistere oltre la durata dell'applicazione. Usando DetachAll come parametro action on unmanage, le risorse necessarie continuano a esistere in Azure.

Si consideri il file Bicep dell'ultima unità. Il file modello definisce un piano di servizio app, un'app Web, un server e un database SQL di Azure, un'area di lavoro Log Analytics e un'istanza di Application Insights. Si supponga che sia necessario rimuovere l'area di lavoro Log Analytics e l'istanza di Application Insights creata nell'ultima unità. Il file Bicep viene modificato rimuovendo il codice evidenziato che fa riferimento all'app Web.

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

Per applicare le modifiche, è necessario aggiornare lo stack di distribuzione. Per aggiornare uno stack di distribuzione usando l'interfaccia della riga di comando di Azure, usare il comando az stack group create.

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

Una volta completata l'operazione di aggiornamento, lo stack di distribuzione non gestisce più l'area di lavoro Log Analytics esistente e l'istanza di Application Insights. Nel comando è stato usato --action-on-unmanage detachAll per specificare come Azure gestisce le risorse che uno stack di distribuzione non gestisce più. In questo caso, le risorse vengono scollegate dallo stack di distribuzione, ma esistono ancora nel gruppo di risorse.

Per applicare le modifiche, è necessario aggiornare lo stack di distribuzione. Per aggiornare uno stack di distribuzione con Azure PowerShell, usare il comando Set-AzResourceGroupDeploymentStack.

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

Una volta completata l'operazione di aggiornamento, lo stack di distribuzione non gestisce più l'area di lavoro Log Analytics esistente e l'istanza di Application Insights. Nel comando è stato usato -ActionOnUnmanage DetachAll per specificare come Azure gestisce le risorse che uno stack di distribuzione non gestisce più. In questo caso, le risorse vengono scollegate dallo stack di distribuzione, ma esistono ancora nel gruppo di risorse.

Eliminare una risorsa gestita

Gli stack di distribuzione offrono una pulizia affidabile delle risorse. Quando si aggiorna o si elimina uno stack di distribuzione, è anche possibile eliminare le risorse gestite, i gruppi di risorse e i gruppi di gestione. Esistono due valori del parametro action on unmanage che imposta risorse, gruppi di risorse e gruppi di gestione da eliminare quando lo stack di distribuzione non li gestisce più.

  • deleteAll: elimina risorse, gruppi di risorse e gruppi di gestione
  • deleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione

Considerare l'applicazione dei depositi. Si supponga che il team di sviluppo decida di usare un database di Azure per PostgreSQL anziché il database SQL di Azure. È necessario prima aggiornare lo stack di distribuzione per rimuovere ed eliminare completamente il server e il database SQL di Azure da Azure. Per ottenere questo comportamento, usare il parametro action on unmanage deleteAll o deleteResources durante l'aggiornamento o l'eliminazione dello stack di distribuzione.

  • DeleteAll: elimina risorse, gruppi di risorse e gruppi di gestione
  • DeleteResources: elimina risorse, ma scollega gruppi di risorse e gruppi di gestione

Considerare l'applicazione dei depositi. Si supponga che il team di sviluppo decida di usare un database di Azure per PostgreSQL anziché il database SQL di Azure. È necessario prima aggiornare lo stack di distribuzione per rimuovere ed eliminare completamente il server e il database SQL di Azure da Azure. Per ottenere questo comportamento, usare il parametro action on unmanage DeleteAll o DeleteResources durante l'aggiornamento o l'eliminazione dello stack di distribuzione.

Si consideri il file Bicep della sezione precedente. Il file modello definisce un piano di servizio app, un'app Web e un server e un database SQL di Azure. Si supponga che sia necessario rimuovere il server e il database SQL di Azure. Il file Bicep viene modificato rimuovendo il codice evidenziato che fa riferimento all'app Web.

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

Nel file viene lasciato il codice seguente:

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

Per applicare le modifiche, è necessario aggiornare lo stack di distribuzione. Per aggiornare uno stack di distribuzione usando l'interfaccia della riga di comando di Azure, usare il comando az stack group create. Questa volta si usa --action-on-unmanage deleteAll invece di --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

Una volta completata l'operazione di aggiornamento, le uniche risorse che rimangono sono il piano di servizio app e l'app Web. Nel comando è stato usato --action-on-unmanage deleteAll per specificare come Azure gestisce le risorse che uno stack di distribuzione non gestisce più. In questo caso, le risorse vengono eliminate dallo stack di distribuzione e da Azure.

Per applicare le modifiche, è necessario aggiornare lo stack di distribuzione. Per aggiornare uno stack di distribuzione con Azure PowerShell, usare il comando Set-AzResourceGroupDeploymentStack.

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

Una volta completata l'operazione di aggiornamento, le uniche risorse che rimangono sono il piano di servizio app e l'app Web. Nel comando è stato usato -ActionOnUnmanage DeleteAll per specificare come Azure gestisce le risorse che uno stack di distribuzione non gestisce più. In questo caso, le risorse vengono eliminate dallo stack di distribuzione e da Azure.