Desanexar e excluir recursos de uma pilha de implantação

Concluído

As alterações continuam com a aplicação de depósitos. A equipe decidiu remover recursos do aplicativo. Alguns dos recursos precisam continuar a existir no Azure, enquanto outros são seguros para exclusão. Você precisa saber mais sobre como o Azure lida com recursos que uma pilha de implantação não gerencia mais.

Nesta unidade, você aprenderá a usar o controle como o Azure lida com recursos separados de uma pilha de implantação usando o parâmetro action on unmanage .

Nota

Os comandos nesta unidade são mostrados para ilustrar conceitos. Não execute os comandos ainda. Você vai praticar o que você aprende aqui em breve.

Ação sobre a gestão não gerenciada revisitada

Com pilhas de implantação, a ação no parâmetro unmanage é usada para controlar como o Azure lida com recursos desanexados, grupos de recursos e grupos de gerenciamento. Você pode definir a ação no parâmetro unmanage ao criar, modificar ou excluir uma pilha de implantação. Todas as três operações têm a capacidade de definir o comportamento da ação no parâmetro unmanage . Tenha em mente que o valor definido por último tem precedência.

Existem três valores possíveis para o --action-on-unmanage parâmetro:

  • deleteAll - exclui recursos, grupos de recursos e grupos de gerenciamento
  • deleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento
  • detachAll - desanexa todos os recursos, grupos de recursos e grupos de gerenciamento

Existem três valores possíveis para o -ActionOnUnmanage parâmetro:

  • DeleteAll - exclui recursos, grupos de recursos e grupos de gerenciamento
  • DeleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento
  • DetachAll - desanexa todos os recursos, grupos de recursos e grupos de gerenciamento

Desanexar um recurso gerenciado

Um recurso desanexado, também conhecido como recurso não gerenciado, é um recurso que não é mais rastreado ou gerenciado por uma pilha de implantação, mas o recurso ainda existe no Azure. O comportamento padrão das pilhas de implantação é desanexar recursos em vez de excluir. Por exemplo, talvez seja necessário manter o recurso para poder usá-lo em outra pilha de implantação no futuro ou verificar manualmente se seus dados são seguros para exclusão.

Há dois valores da ação no parâmetro unmanage que definem recursos, grupos de recursos e grupos de gerenciamento a serem desanexados quando a pilha de implantação não os gerencia mais.

As pilhas de implantação não podem excluir segredos do cofre de chaves. Se você estiver removendo segredos do cofre de chaves de um modelo, certifique-se de executar também o comando update/delete da pilha de implantação com o modo de desanexação.

  • deleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento
  • detachAll - desanexa todos os recursos, grupos de recursos e grupos de gerenciamento

Usar um ou ao deleteResources detachAll criar, modificar ou excluir suas pilhas de implantação oferece alguma proteção adicional contra exclusão acidental. Considere o nosso cenário da última unidade. Adicionamos um espaço de trabalho existente do Log Analytics à nossa pilha de implantação. O espaço de trabalho é usado por outros aplicativos, não apenas pelo aplicativo de depósitos. Ele precisa persistir após a vida útil do aplicativo. detachAll Usando como a ação no parâmetro unmanage, os recursos necessários continuam a existir no Azure.

  • DeleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento
  • DetachAll - desanexa todos os recursos, grupos de recursos e grupos de gerenciamento

Usar um ou ao DeleteResources DetachAll criar, modificar ou excluir suas pilhas de implantação oferece alguma proteção adicional contra exclusão acidental. Considere o nosso cenário da última unidade. Adicionamos um espaço de trabalho existente do Log Analytics à nossa pilha de implantação. O espaço de trabalho é usado por outros aplicativos, não apenas pelo aplicativo de depósitos. Ele precisa persistir após a vida útil do aplicativo. DetachAll Usando como a ação no parâmetro unmanage, os recursos necessários continuam a existir no Azure.

Vamos considerar nosso arquivo Bicep da última unidade. O arquivo de modelo define um plano de serviço de aplicativo, um aplicativo Web, um servidor SQL e banco de dados do Azure, um espaço de trabalho do Log Analytics e uma instância do Application Insights. Digamos que precisamos remover o espaço de trabalho do Log Analytics e a instância do Application Insights que criamos na última unidade. Editamos nosso arquivo Bicep, removendo o código destacado que faz referência ao nosso aplicativo 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
  }
}

Para aplicar as alterações, precisamos atualizar a pilha de implantação. Para atualizar uma pilha de implantação usando a CLI do Azure, use o az stack group create comando.

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

Após a conclusão da operação de atualização, a pilha de implantação não gerencia mais o espaço de trabalho do Log Analytics e a instância do Application Insights. Em nosso comando, costumávamos --action-on-unmanage detachAll especificar como o Azure lida com recursos que uma pilha de implantação não gerencia mais. Nesse caso, os recursos são separados da pilha de implantação, mas ainda existem no grupo de recursos.

Para aplicar as alterações, precisamos atualizar a pilha de implantação. Para atualizar uma pilha de implantação usando o Azure PowerShell, use o Set-AzResourceGroupDeploymentStack comando.

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

Após a conclusão da operação de atualização, a pilha de implantação não gerencia mais o espaço de trabalho do Log Analytics e a instância do Application Insights. Em nosso comando, costumávamos -ActionOnUnmanage DetachAll especificar como o Azure lida com recursos que uma pilha de implantação não gerencia mais. Nesse caso, os recursos são separados da pilha de implantação, mas ainda existem no grupo de recursos.

Excluir um recurso gerenciado

As pilhas de implantação fornecem uma limpeza confiável de recursos. Ao atualizar ou excluir uma pilha de implantação, você também pode excluir os recursos gerenciados, os grupos de recursos e os grupos de gerenciamento. Há dois valores da ação no parâmetro unmanage que definem recursos, grupos de recursos e grupos de gerenciamento a serem excluídos quando a pilha de implantação não os gerencia mais.

  • deleteAll - exclui recursos, grupos de recursos e grupos de gerenciamento
  • deleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento

Considere a nossa aplicação de depósitos. Digamos que a equipe de desenvolvimento decida usar um Banco de Dados do Azure para PostgreSQL em vez do Banco de Dados SQL do Azure. Precisamos primeiro atualizar nossa pilha de implantação para remover e excluir totalmente o servidor SQL do Azure e o banco de dados do Azure. Para realizar esse comportamento, use o deleteAll parâmetro ou deleteResources action on unmanage ao atualizar ou excluir a pilha de implantação.

  • DeleteAll - exclui recursos, grupos de recursos e grupos de gerenciamento
  • DeleteResources - exclui recursos, mas desanexa grupos de recursos e grupos de gerenciamento

Considere a nossa aplicação de depósitos. Digamos que a equipe de desenvolvimento decida usar um Banco de Dados do Azure para PostgreSQL em vez do Banco de Dados SQL do Azure. Precisamos primeiro atualizar nossa pilha de implantação para remover e excluir totalmente o servidor SQL do Azure e o banco de dados do Azure. Para realizar esse comportamento, use o DeleteAll parâmetro ou DeleteResources action on unmanage ao atualizar ou excluir a pilha de implantação.

Vamos considerar nosso arquivo Bicep da seção anterior. O arquivo de modelo define um plano de serviço de aplicativo, um aplicativo Web e um servidor SQL e banco de dados do Azure. Digamos que precisamos remover o servidor SQL do Azure e o banco de dados. Editamos nosso arquivo Bicep, removendo o código destacado que faz referência ao nosso aplicativo 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'
  }
}

Resta-nos o seguinte código no nosso ficheiro:

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

Para aplicar as alterações, precisamos atualizar a pilha de implantação. Para atualizar uma pilha de implantação usando a CLI do Azure, use o az stack group create comando. Desta vez, usamos --action-on-unmanage deleteAll em vez de --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

Após a conclusão da operação de atualização, os únicos recursos que restam são o plano de serviço do aplicativo e o aplicativo Web. Em nosso comando, usamos --action-on-unmanage deleteAll para especificar como o Azure lida com recursos que a pilha de implantação não gerencia mais. Nesse caso, os recursos são excluídos da pilha de implantação e do Azure.

Para aplicar as alterações, precisamos atualizar a pilha de implantação. Para atualizar uma pilha de implantação usando o Azure PowerShell, use o Set-AzResourceGroupDeploymentStack comando.

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

Após a conclusão da operação de atualização, os únicos recursos que restam são o plano de serviço do aplicativo e o aplicativo Web. Em nosso comando, usamos -ActionOnUnmanage DeleteAll para especificar como o Azure lida com recursos que a pilha de implantação não gerencia mais. Nesse caso, os recursos são excluídos da pilha de implantação e do Azure.