Adición de recursos a una pila de implementación
La aplicación de depósitos continúa evolucionando a lo largo del desarrollo. El equipo va a agregar recursos y probar características a diario. La observabilidad se agrega a la aplicación con un área de trabajo de Log Analytics existente y una nueva instancia de Application Insights. Desea seguir administrando los recursos como una sola unidad atómica. Debe obtener más información sobre cómo agregar recursos existentes y nuevos a una pila de implementación.
En esta unidad, aprenderá a agregar recursos existentes y nuevos a una pila de implementación como recursos administrados.
Nota:
Los comandos de esta unidad se muestran para ilustrar conceptos. No los ejecute todavía. Pronto va a practicar lo que aprenderá aquí.
Adición de un recurso existente
Los recursos que usa una aplicación cambian con el tiempo. ¿Cómo se actualiza una pila de implementación para incluir un recurso ya existente en Azure?
Bicep permite definir un recurso que ya existe en Azure. Definir un recurso existente es similar a definir un nuevo recurso, con ligeras diferencias. Por ejemplo, puede definir un recurso existente en una declaración de recursos mediante la palabra clave existing
:
resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing = {
name: 'log-deposits'
}
Cuando se agrega un recurso existente como recurso administrado a una pila de implementación, no es necesario usar la palabra clave existing
. Solo tenemos que definir el recurso existente en nuestro archivo de Bicep, la plantilla JSON de ARM o la especificación de plantilla. Al final, la pila de implementación administra el recurso existente.
Consideremos nuestro archivo Bicep de la última unidad. Nuestro archivo define un plan de App Service, una aplicación web y una base de datos y un servidor de Azure SQL. Queremos agregar un área de trabajo de Log Analytics existente a la pila de implementación. El área de trabajo se encuentra en el mismo grupo de recursos en el que existen nuestros recursos administrados.
Para agregar el área de trabajo de Log Analytics existente, es necesario agregar su definición al archivo Bicep. Tenga en cuenta que no es necesario incluir ningún código que describa el área de trabajo como un recurso existente.
// 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'
@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
}
}
// 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'
}
}
}
Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en los recursos del archivo Bicep.
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
Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en los recursos del archivo Bicep.
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
Adición de un nuevo recurso administrado
El proceso de agregar un nuevo recurso a una pila de implementación es idéntico a agregar un recurso existente a la pila. Solo tenemos que definir el recurso existente en nuestro archivo de Bicep, la plantilla JSON de ARM o la especificación de plantilla. Al final, la pila de implementación administra el nuevo recurso.
Consideremos nuestro archivo Bicep de la sección anterior. Nuestro archivo define ahora un plan de App Service, un servicio de aplicaciones, una base de datos y un servidor de Azure SQL y un área de trabajo de Log Analytics. Queremos agregar una nueva instancia de Application Insights a la pila de implementación y configurar el servicio de aplicaciones para que use la instancia. Para agregar la nueva instancia de Application Insights, es necesario agregar su definición al archivo Bicep y actualizar el servicio de aplicaciones para usar la nueva instancia.
// 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
}
}
Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en los recursos del archivo Bicep.
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
Nota:
La CLI de Azure no tiene un comando dedicado para actualizar una pila de implementación. Use el comando create para actualizar la pila.
Al realizar una actualización en la pila, recibirá un mensaje que indica que la pila ya existe en la suscripción actual. Si el valor de la acción en el parámetro no administrado cambia, la advertencia le avisa de los nuevos valores.
Con el archivo Bicep modificado, queremos actualizar la pila de implementación para que se implementen los cambios realizados en los recursos del archivo Bicep.
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
Como puede ver, el proceso de añadir un recurso existente o uno nuevo es el mismo.