Aggiungere risorse a uno stack di distribuzione

Completato 100 XP
Scegliere la shell di Azure

L'applicazione depositi continua a evolversi durante tutto lo sviluppo. Il team aggiunge risorse e funzionalità di test su base giornaliera. L'osservabilità viene aggiunta all'applicazione con un'area di lavoro Log Analitica 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 existing parola chiave :

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 existing parola chiave. È 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 risorsa esistente.

Si consideri il file Bicep dell'ultima unità. Il file definisce un piano di servizio app, un'app Web e un database SQL di Azure. Si vuole aggiungere un'area di lavoro log Analitica 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 Analitica esistente, è necessario aggiungerla al file Bicep. Si noti che non è necessario includere 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, un server SQL di Azure e un database e un'area di lavoro Log Analitica. 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.


Unità successiva: Esercizio - Aggiungere risorse a uno stack di distribuzione

Indietro Prossima