Atualizando e excluindo uma pilha de implantação

Concluído

As pilhas de implantação permitem que você gerencie seus recursos do Azure usando processos e modelos padrão. À medida que seu aplicativo muda, o mesmo acontece com os recursos que compõem o aplicativo. Adicionar e remover recursos gerenciados é uma parte crítica do gerenciamento do ciclo de vida.

Você concluiu o sprint 1 e a implantação inicial do aplicativo de depósitos usando pilhas de implantação. Agora, você precisa se preparar para o sprint 2 introduz novos serviços para o aplicativo. Você deseja saber mais sobre como atualizar e excluir pilhas de implantação e recursos gerenciados.

Nesta unidade, você aprenderá como atualizar uma pilha de implantação adicionando recursos ao seu arquivo Bicep. Além disso, você aprende a excluir uma pilha de implantação e seus recursos gerenciados.

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.

Atualizando uma pilha de implantação

À medida que uma aplicação evolui, os seus recursos também evoluem. Como atualizamos uma pilha de implantação e seus recursos gerenciados quando novos serviços e recursos são adicionados? Que situações exigem que atualizemos uma pilha de implantação? Adicionar um novo recurso ou alterar a propriedade de um recurso gerenciado existente exigiria que atualizássemos a pilha de implantação.

Atualizar uma pilha significa atualizar os recursos definidos em nosso modelo JSON ARM, arquivo Bicep ou especificação de modelo. Depois que a alteração é feita no arquivo de modelo, atualizamos a pilha de implantação usando o comando apropriado.

Digamos que nosso aplicativo de depósitos precise adicionar um novo banco de dados SQL do Azure e queremos que a pilha de implantação gerencie o banco de dados. Para adicionar o novo banco de dados, atualizamos nosso arquivo Bicep para definir um novo servidor SQL do Azure e um novo banco de dados.

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

O código destacado define nosso novo banco de dados SQL do Azure para nosso aplicativo de depósitos. Com nosso novo recurso definido, 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

Nota

A CLI do Azure não tem um comando dedicado para atualizar uma pilha de implantação. Use o comando create para atualizar a pilha.

Ao executar uma atualização na pilha, você recebe uma mensagem informando que a pilha já existe na assinatura atual. Se o valor da ação em unmanage parameter for alterado, o aviso alertará você sobre os novos valores.

Uma captura de tela mostrando a linha de comando da CLI do Azure avisando que a pilha de implantação já existe.

Para verificar se a pilha está gerenciando os novos recursos, use o az stack group show comando.

az stack group show \
    --resource-group rg-depositsApplication
    --name stack-deposits
{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "bypassStackOutOfSyncError": null,
  "correlationId": ".",
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deployments/stack-deposits",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT2M53.2734284S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deploymentStacks/stack-deposits",
  "location": null,
  "name": "stack-deposits",
  "outputs": null,
  "parameters": {
    "sqlServerAdminPassword": {
      "reference": null,
      "type": "securestring",
      "value": ""
    },
    "sqlServerAdminUserName": {
      "reference": null,
      "type": "string",
      "value": "sqladmin"
    }
  },
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "rg-depositsApplication",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/././rg-depositsApplication/././servers/sql-eque2jlrboltq",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/././rg-depositsApplication/././servers/sql-eque2jlrboltq/databases/sqldb-eque2jlrboltq",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-eque2jlrboltq",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2024-01-01T00:00:01.000000+00:00",
    "createdBy": "depositsapplication@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-01-01T00:00:01.000000+00:00",
    "lastModifiedBy": "depositsapplication@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": {},
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

O código realçado mostra o novo servidor SQL do Azure e o banco de dados SQL do Azure conforme gerenciado pela 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

Para verificar se a pilha está gerenciando os novos recursos, use o Get-AzResourceGroupDeploymentStack comando.

Get-AzResourceGroupDeploymentStack `
    -ResourceGroupName rg-depositsApplication `
    -Name stack-deposits
Id                            : /subscriptions/././rg-depositsApplication/././deploymentStacks/stack-deposits
Name                          : stack-deposits
ProvisioningState             : succeeded
resourcesCleanupAction        : detach
resourceGroupsCleanupAction   : detach
managementGroupsCleanupAction : detach
CorrelationId                 : .
DenySettingsMode              : none
CreationTime(UTC)             : 1/01/2024 0:00:01 AM
DeploymentId                  : /subscriptions/././rg-depositsApplication/././deployments/stack-deposits
Resources                     : /subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits
                                /subscriptions/././rg-depositsApplication/././sites/webapp-eque2jlrboltq
                                /subscriptions/././rg-depositsApplication/././servers/sql-eque2jlrboltq
                                /subscriptions/././rg-depositsApplication/././servers/sql-eque2jlrboltq/databases/sqldb-eque2jlrboltq
Parameters                    : 
                                Name                      Type                       Value     
                                ========================  =========================  ==========
                                sqlServerAdminUserName    string                     "sqladmin"
                                sqlServerAdminPassword    securestring               ""

O código realçado mostra o novo servidor SQL do Azure e o banco de dados SQL do Azure conforme gerenciado pela pilha de implantação.

No próximo módulo, você trabalha no gerenciamento de ciclos de vida de recursos, incluindo adicionar, atualizar, desanexar e excluir recursos gerenciados.

Excluindo uma pilha de implantação

A limpeza confiável de recursos é um recurso fundamental das pilhas de implantação. Ao excluir uma pilha de implantação, você também pode excluir os recursos gerenciados, os grupos de recursos e os grupos de gerenciamento. O uso de uma única chamada de API elimina a necessidade de entender as dependências. Assim como acontece com a criação e atualização de pilhas de implantação, a ação no parâmetro unmanage determina como o Azure lida com recursos desanexados.

Nota

Neste módulo, estamos trabalhando com pilhas de implantação com escopo de grupo resrouce. Nessa situação, o grupo de recursos não é gerenciado pela pilha. O valor 'excluir tudo' para a ação no parâmetro unmanage não dissuade o grupo de recursos onde a pilha existe. É necessário excluir o grupo de recursos depois que a pilha e seus recursos são excluídos.

Para excluir uma pilha de implantação usando a CLI do Azure, use o az stack group delete comando. O --action-on-unmanaged argumento determina como o Azure lida com recursos desanexados, grupos de recursos e grupos de gerenciamento.

az stack group delete \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --action-on-unmanage deleteAll

Para excluir uma pilha de implantação usando o Azure PowerShell, use o Remove-AzResourceGroupDeploymentStack comando. O -ActionOnUnmanage argumento determina como o Azure lida com recursos desanexados, grupos de recursos e grupos de gerenciamento.

Remove-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -ActionOnUnmanage -DeleteAll