Aggiungere risorse a uno stack di distribuzione
L'applicazione depositi continua a evolversi durante tutto lo sviluppo. Il team aggiunge le risorse e le funzionalità di test su base giornaliera. L'osservabilità viene aggiunta all'applicazione con un'area di lavoro Log Analytics esistente e una nuova istanza di Application Insights. Si vuole continuare a gestire le risorse come singola unità atomica. È necessario ottenere altre informazioni sull'aggiunta di risorse esistenti e nuove a uno stack di distribuzione.
In questa unità si apprenderà come aggiungere risorse nuove e esistenti a uno stack di distribuzione come risorse gestite.
Nota
I comandi riportati in questa unità vengono illustrati per spiegare i concetti. Non eseguire ancora i comandi. Presto sarà possibile provare quanto appreso.
Aggiungere una risorsa esistente
Le risorse usate da un'applicazione cambiano nel tempo. Come si aggiorna uno stack di distribuzione per includere una risorsa già esistente in Azure?
Bicep consente di definire una risorsa già esistente in Azure. La definizione di una risorsa esistente è simile alla definizione di una nuova risorsa, con lievi differenze. Ad esempio, è possibile definire una risorsa esistente in una dichiarazione di risorsa usando la parola chiave existing
:
resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing = {
name: 'log-deposits'
}
Quando si aggiunge una risorsa esistente come risorsa gestita a uno stack di distribuzione, non è necessario usare questa parola chiave existing
. È sufficiente definire la risorsa esistente nel file Bicep, nel modello JSON ARM o nella specifica di modello. Infine, lo stack di distribuzione gestisce la risorsa esistente.
Si consideri il file Bicep dell'ultima unità. Il file definisce un piano di servizio app, un'app Web e server e database di Azure SQL. Si vuole aggiungere un'area di lavoro Log Analytics esistente allo stack di distribuzione. L'area di lavoro si trova nello stesso gruppo di risorse in cui sono presenti le risorse gestite.
Per aggiungere l'area di lavoro Log Analytics esistente, è necessario aggiungerla al file Bicep. Si noti che non è necessario includere il codice che descrive l'area di lavoro come risorsa esistente.
// 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'
}
}
}
Dopo aver modificato il file Bicep, si vuole aggiornare lo stack di distribuzione in modo che vengano implementate le modifiche apportate alle risorse nel file Bicep.
Per aggiornare uno stack di distribuzione usando l'interfaccia della riga di comando di Azure, usare il 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
Dopo aver modificato il file Bicep, si vuole aggiornare lo stack di distribuzione in modo che vengano implementate le modifiche apportate alle risorse nel file Bicep.
Per aggiornare uno stack di distribuzione con Azure PowerShell, usare il comando Set-AzResourceGroupDeploymentStack
.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Aggiungere una nuova risorsa gestita
Il processo di aggiunta di una nuova risorsa a uno stack di distribuzione è identico all'aggiunta di una risorsa esistente allo stack. È sufficiente definire la risorsa esistente nel file Bicep, nel modello JSON ARM o nella specifica di modello. Alla fine, lo stack di distribuzione gestisce la nuova risorsa.
Si consideri il file Bicep della sezione precedente. Il file definisce ora un piano di servizio app, un servizio app, server e database di Azure SQL e un'area di lavoro Log Analytics. Si vuole aggiungere una nuova istanza di Application Insights allo stack di distribuzione e configurare il servizio app per l'uso dell'istanza. Per aggiungere la nuova istanza di Application Insights, è necessario aggiungere la relativa definizione al file Bicep e aggiornare il servizio app per usare la nuova istanza.
// 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
}
}
Dopo aver modificato il file Bicep, si vuole aggiornare lo stack di distribuzione in modo che vengano implementate le modifiche apportate alle risorse nel file Bicep.
Per aggiornare uno stack di distribuzione usando l'interfaccia della riga di comando di Azure, usare il 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
L'interfaccia della riga di comando di Azure non dispone di un comando dedicato per aggiornare uno stack di distribuzione. Usare il comando Crea per aggiornare lo stack.
Quando si esegue un aggiornamento nello stack, viene visualizzato un messaggio che informa che lo stack esiste già nella sottoscrizione corrente. Se il valore dell'azione sul parametro non gestito cambia, l'avviso notifica gli utenti dei nuovi valori.
Dopo aver modificato il file Bicep, si vuole aggiornare lo stack di distribuzione in modo che vengano implementate le modifiche apportate alle risorse nel file Bicep.
Per aggiornare uno stack di distribuzione con Azure PowerShell, usare il comando Set-AzResourceGroupDeploymentStack
.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Come si può notare, il processo di aggiunta di una risorsa esistente o di una nuova risorsa è lo stesso.