Desasociación y eliminación de recursos de una pila de implementación
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óndeleteResources
: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administracióndetachAll
: 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ónDeleteResources
: elimina los recursos, pero desasocia los grupos de recursos y los grupos de administraciónDetachAll
: 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óndetachAll
: 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ónDetachAll
: 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óndeleteResources
: 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ónDeleteResources
: 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.