Scollegare ed eliminare risorse da uno stack di distribuzione
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 gestionedeleteResources
: elimina risorse, ma scollega gruppi di risorse e gruppi di gestionedetachAll
: 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 gestioneDeleteResources
: elimina risorse, ma scollega gruppi di risorse e gruppi di gestioneDetachAll
: 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 gestionedetachAll
: 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 gestioneDetachAll
: 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 gestionedeleteResources
: 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 gestioneDeleteResources
: 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.