Scollegare ed eliminare risorse da uno stack di distribuzione

Completato 100 XP
Scegliere la shell di Azure

Le modifiche continuano con l'applicazione depositi. Il team ha deciso di rimuovere le risorse dall'applicazione. Alcune delle risorse devono continuare a esistere in Azure, mentre altre sono sicure da eliminare. Per 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 l'azione sul parametro non gestito .

Nota

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

Azione sulla rivisitazione non gestita

Con gli stack di distribuzione, l'azione sul parametro non gestito viene usata per controllare il modo in cui Azure gestisce risorse scollegate, gruppi di risorse e gruppi di gestione. È possibile impostare l'azione sul parametro non gestito durante la creazione, la modifica o l'eliminazione di uno stack di distribuzione. Tutte e tre le operazioni hanno la possibilità di impostare il comportamento dell'azione sul parametro non gestito . Tenere presente che l'ultimo valore impostato ha la precedenza.

Per il --action-on-unmanage parametro sono disponibili tre valori possibili:

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

Per il -ActionOnUnmanage parametro sono disponibili tre valori possibili:

  • DeleteAll - elimina risorse, gruppi di risorse e gruppi di gestione
  • DeleteResources - elimina le 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, nota anche come risorsa non gestita, è una risorsa non più monitorata o gestita da uno stack di distribuzione, ma la risorsa esiste ancora in Azure. Il comportamento predefinito degli stack di distribuzione consiste nello scollegare le risorse anziché eliminare. Ad esempio, potrebbe essere necessario mantenere la risorsa in modo che sia possibile usarla in un altro stack di distribuzione in futuro oppure potrebbe essere necessario verificare manualmente che i relativi dati siano sicuri da eliminare.

Esistono due valori dell'azione sul parametro non gestito che impostano 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 le 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 da eliminazioni accidentali. Si consideri lo scenario dell'ultima unità. È stata aggiunta un'area di lavoro log Analitica 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. detachAll Usando come azione sul parametro non gestito, le risorse necessarie continuano a esistere in Azure.

  • DeleteResources - elimina le 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 da eliminazioni accidentali. Si consideri lo scenario dell'ultima unità. È stata aggiunta un'area di lavoro log Analitica 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. DetachAll Usando come azione sul parametro non gestito, 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 SQL di Azure e un database, un'area di lavoro Log Analitica e un'istanza di Application Insights. Si supponga di dover rimuovere l'area di lavoro Log Analitica 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

Al termine dell'operazione di aggiornamento, lo stack di distribuzione non gestisce più l'area di lavoro Log Analitica 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 sono ancora presenti 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

Al termine dell'operazione di aggiornamento, lo stack di distribuzione non gestisce più l'area di lavoro Log Analitica 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 sono ancora presenti 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 dell'azione sul parametro non gestito che impostano 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 le risorse, ma scollega gruppi di risorse e gruppi di gestione

Considera la nostra domanda di depositi. Si supponga che il team di sviluppo decida di usare un Database di Azure per PostgreSQL invece di database SQL di Azure. È necessario prima aggiornare lo stack di distribuzione per rimuovere ed eliminare completamente il server SQL di Azure e il database da Azure. Per eseguire questo comportamento, usare l'azione o deleteResources sul parametro non gestito durante l'aggiornamento o l'eliminazione deleteAll dello stack di distribuzione.

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

Considera la nostra domanda di depositi. Si supponga che il team di sviluppo decida di usare un Database di Azure per PostgreSQL invece di database SQL di Azure. È necessario prima aggiornare lo stack di distribuzione per rimuovere ed eliminare completamente il server SQL di Azure e il database da Azure. Per eseguire questo comportamento, usare l'azione o DeleteResources sul parametro non gestito durante l'aggiornamento o l'eliminazione DeleteAll 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 database SQL di Azure. Si supponga di dover 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, usiamo --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

Al termine dell'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 lo 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

Al termine dell'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 lo stack di distribuzione non gestisce più. In questo caso, le risorse vengono eliminate dallo stack di distribuzione e da Azure.


Unità successiva: Eliminare gli stack di distribuzione

Indietro Prossima