Desasociación y eliminación de recursos de una pila de implementación

Completado

Los cambios continúan con la solicitud de depósitos. El equipo decidió quitar los recursos de la aplicación. Algunos de los recursos deben seguir existiendo en Azure, mientras que otros pueden eliminarse. Debe obtener más información sobre cómo Azure controla los recursos que ya no administra una pila de implementación.

En esta unidad, aprenderá a usar el control de cómo Azure controla los recursos desasociados de una pila de implementación mediante el parámetro acción que deja de administrar.

Nota:

Los comandos de esta unidad se muestran para ilustrar conceptos. No los ejecute todavía. Pronto va a practicar lo que aprenderá aquí.

Revisión de acción que deja de administrar

Con las pilas de implementación, el parámetro de acción que deja de administrar se usa para controlar cómo Azure controla los recursos desasociados, los grupos de recursos y los grupos de administración. Puede establecer el parámetro de acción que deja de administrar al crear, modificar o eliminar una pila de implementación. Las tres operaciones tienen la capacidad de establecer el comportamiento del parámetro de acción que deja de administrar. Tenga en cuenta que el valor establecido por última vez tiene prioridad.

Hay tres valores posibles para el parámetro --action-on-unmanage:

  • deleteAll: elimina los recursos, grupos de recursos y grupos de administración
  • deleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración
  • detachAll: desasocia todos los recursos, grupos de recursos y grupos de administración

Hay tres valores posibles para el parámetro -ActionOnUnmanage:

  • DeleteAll: elimina los recursos, grupos de recursos y grupos de administración
  • DeleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración
  • DetachAll: desasocia todos los recursos, grupos de recursos y grupos de administración

Desasociación de un recurso administrado

Un recurso desasociado, también conocido como un recurso no administrado, es un recurso al que ya no se realiza el seguimiento ni se administra mediante una pila de implementación, pero el recurso sigue existiendo en Azure. El comportamiento predeterminado de las pilas de implementación es desasociar recursos en lugar de eliminar. Por ejemplo, es posible que tenga que mantener el recurso para poder usarlo en otra pila de implementación en el futuro, o es posible que tenga que comprobar manualmente que sus datos son seguros para eliminarlos.

Hay dos valores del parámetro de acción que deja de administrar que establecen recursos, grupos de recursos y grupos de administración para desasociarlos cuando la pila de implementación ya no las administra.

Las pilas de despliegue no pueden borrar los secretos del almacén de claves. Si va a quitar secretos del almacén de claves de una plantilla, asegúrese de ejecutar también el comando update/delete de la pila de implementación con el modo de desasociación.

  • deleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración
  • detachAll: desasocia todos los recursos, grupos de recursos y grupos de administración

El uso de deleteResources o detachAll al crear, modificar o eliminar las pilas de implementación ofrece cierta protección adicional contra la eliminación accidental. Considere nuestro escenario de la última unidad. Hemos agregado un área de trabajo de Log Analytics existente a la pila de implementación. Otras aplicaciones usan el área de trabajo, no solo la aplicación de depósitos. Debe conservarse más allá de la vida útil de la aplicación. Al usar detachAll como el parámetro de acción que deja de administrar, los recursos necesarios siguen existiendo en Azure.

  • DeleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración
  • DetachAll: desasocia todos los recursos, grupos de recursos y grupos de administración

El uso de DeleteResources o DetachAll al crear, modificar o eliminar las pilas de implementación ofrece cierta protección adicional contra la eliminación accidental. Considere nuestro escenario de la última unidad. Hemos agregado un área de trabajo de Log Analytics existente a la pila de implementación. Otras aplicaciones usan el área de trabajo, no solo la aplicación de depósitos. Debe conservarse más allá de la vida útil de la aplicación. Al usar DetachAll como el parámetro de acción que deja de administrar, los recursos necesarios siguen existiendo en Azure.

Consideremos nuestro archivo Bicep de la última unidad. El archivo de plantilla define un plan de App Service, una aplicación web, un servidor de Azure SQL Server y una base de datos, un área de trabajo de Log Analytics y una instancia de Application Insights. Supongamos que es necesario quitar el área de trabajo de Log Analytics y la instancia de Application Insights que hemos creado en la última unidad. Editamos nuestro archivo de Bicep, quitando el código resaltado que hace referencia a nuestra aplicación 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 los cambios, es necesario actualizar la pila de implementación. Para actualizar una pila de implementación mediante la CLI de Azure, use el 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 vez completada la operación de actualización, la pila de implementación ya no administra el área de trabajo de Log Analytics y la instancia de Application Insights. En nuestro comando, hemos usado --action-on-unmanage detachAll para especificar cómo Azure controla los recursos que ya no administra una pila de implementación. En este caso, los recursos se desasocian de la pila de implementación, pero siguen existiendo en el grupo de recursos.

Para aplicar los cambios, es necesario actualizar la pila de implementación. Para actualizar una pila de implementación mediante Azure PowerShell, use el comando Set-AzResourceGroupDeploymentStack.

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

Una vez completada la operación de actualización, la pila de implementación ya no administra el área de trabajo de Log Analytics y la instancia de Application Insights. En nuestro comando, hemos usado -ActionOnUnmanage DetachAll para especificar cómo Azure controla los recursos que ya no administra una pila de implementación. En este caso, los recursos se desasocian de la pila de implementación, pero siguen existiendo en el grupo de recursos.

Eliminación de un recurso administrado

Las pilas de implementación proporcionan una limpieza de recursos fiable. Al actualizar o eliminar una pila de implementación, también puede eliminar los recursos administrados, los grupos de recursos y los grupos de administración. Hay dos valores del parámetro de acción que deja de administrar que establecen recursos, grupos de recursos y grupos de administración para eliminarlos cuando la pila de implementación ya no las administra.

  • deleteAll: elimina recursos, grupos de recursos y grupos de administración
  • deleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración

Considere nuestra aplicación de depósitos. Supongamos que el equipo de desarrollo decide usar una instancia de Azure Database for PostgreSQL en lugar de Azure SQL Database. Es necesario actualizar primero la pila de implementación para quitar y eliminar completamente el servidor y la base de datos de Azure SQL Server. Para lograr este comportamiento, use el parámetro deleteAll o deleteResources de acción que deja de administrar al actualizar o eliminar la pila de implementación.

  • DeleteAll: elimina recursos, grupos de recursos y grupos de administración
  • DeleteResources: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administración

Considere nuestra aplicación de depósitos. Supongamos que el equipo de desarrollo decide usar una instancia de Azure Database for PostgreSQL en lugar de Azure SQL Database. Es necesario actualizar primero la pila de implementación para quitar y eliminar completamente el servidor y la base de datos de Azure SQL Server. Para lograr este comportamiento, use el parámetro DeleteAll o DeleteResources de acción que deja de administrar al actualizar o eliminar la pila de implementación.

Consideremos nuestro archivo Bicep de la sección anterior. El archivo de plantilla define un plan de App Service, una aplicación web y una base de datos y un servidor de Azure SQL. Supongamos que es necesario quitar el servidor y la base de datos de Azure SQL. Editamos nuestro archivo de Bicep, quitando el código resaltado que hace referencia a nuestra aplicación 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'
  }
}

Nos queda con el código siguiente en nuestro archivo:

// 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 los cambios, es necesario actualizar la pila de implementación. Para actualizar una pila de implementación mediante la CLI de Azure, use el comando az stack group create. Esta vez, usamos --action-on-unmanage deleteAll en lugar 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

Una vez completada la operación de actualización, los únicos recursos que permanecen son el plan de App Service y la aplicación web. En nuestro comando, hemos usado --action-on-unmanage deleteAll para especificar cómo Azure controla los recursos que ya no administra la pila de implementación. En este caso, los recursos se eliminan de la pila de implementación y de Azure.

Para aplicar los cambios, es necesario actualizar la pila de implementación. Para actualizar una pila de implementación mediante Azure PowerShell, use el comando Set-AzResourceGroupDeploymentStack.

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

Una vez completada la operación de actualización, los únicos recursos que permanecen son el plan de App Service y la aplicación web. En nuestro comando, hemos usado -ActionOnUnmanage DeleteAll para especificar cómo Azure controla los recursos que ya no administra la pila de implementación. En este caso, los recursos se eliminan de la pila de implementación y de Azure.