Esercizio - Distribuire più risorse usando i cicli

Completato

Fino a questo momento, il modello Bicep ha distribuito un singolo server logico Azure SQL, con le impostazioni di controllo incluse per l'ambiente di produzione. È ora necessario distribuire più server logici, uno per ogni area in cui l'azienda sta lanciando il nuovo orsacchiotto intelligente.

In questo esercizio si estenderà il codice Bicep creato in precedenza in modo da poter distribuire istanze dei database in più aree di Azure.

Durante il processo, si eseguiranno queste operazioni:

  • Spostare il codice Bicep esistente in un modulo.
  • Creare un nuovo file Bicep con un ciclo di copia per distribuire le risorse del modulo più volte.
  • Distribuire il file Bicep e verificare la distribuzione delle risorse.
  • Modificare il parametro per aggiungere un'altra località, distribuire di nuovo il file e quindi verificare che le nuove risorse siano state distribuite.

Spostare le risorse in un modulo

  1. In Visual Studio Code creare una nuova cartella denominata modules nella stessa cartella in cui è stato creato il file main.bicep.

  2. Spostare il file main.bicep nella cartella modules appena creata.

  3. Rinominare il file main.bicep in database.bicep.

Distribuire più istanze usando un ciclo di copia

  1. Creare un nuovo file main.bicep per sostituire quello appena spostato e rinominato.

  2. Aprire il nuovo file main.bicep e aggiungere i parametri seguenti:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
    ]
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
  3. Sotto le dichiarazioni di parametri aggiungere la dichiarazione di modulo seguente:

    module databases 'modules/database.bicep' = [for location in locations: {
      name: 'database-${location}'
      params: {
        location: location
        sqlServerAdministratorLogin: sqlServerAdministratorLogin
        sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }]
    

    Si noti che la dichiarazione di modulo esegue un ciclo su tutti i valori nel parametro della matrice locations.

  4. Salvare le modifiche apportate al file.

Verificare il file Bicep

Al termine di tutte le modifiche precedenti, il file main.bicep avrà un aspetto simile al seguente:

@description('The Azure regions into which the resources should be deployed.')
param locations array = [
  'westeurope'
  'eastus2'
]

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

module databases 'modules/database.bicep' = [for location in locations: {
  name: 'database-${location}'
  params: {
    location: location
    sqlServerAdministratorLogin: sqlServerAdministratorLogin
    sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}]

Il file database.bicep dovrebbe essere simile all'esempio seguente:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2021-11-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-11-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

In caso contrario, copiare l'esempio oppure modificare il modello in modo che corrisponda all'esempio.

Distribuire il modello Bicep in Azure

Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il codice seguente:

az deployment group create --template-file main.bicep

Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il comando di Azure PowerShell seguente:

New-AzResourceGroupDeployment -TemplateFile main.bicep

Attenzione

Assicurarsi di usare lo stesso account di accesso e la stessa password usati in precedenza o che la distribuzione non venga completata correttamente.

Attendere il completamento della distribuzione.

Verificare la distribuzione

Al termine della distribuzione, si vuole verificare che il nuovo server logico e il nuovo database siano distribuiti e che si trovino nelle aree di Azure corrette.

  1. Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione sandbox.

  2. Selezionare [nome gruppo di risorse sandbox].

  3. Verificare che il server logico e il database nuovi si trovino nell'area Stati Uniti orientali 2, specificata nel valore predefinito del parametro locations.

    Screenshot of the Azure portal, showing the deployment of the logical servers and databases in various locations.

  4. Lasciare aperta la pagina nel browser. Le distribuzioni verranno controllate di nuovo in un momento successivo.

Aggiornare e ridistribuire il modello in Azure con una località aggiuntiva per un server logico

Il team che si occupa dell'orsacchiotto sta per fare un nuovo lancio, questa volta in Asia. Il team chiede di distribuire un nuovo server e un nuovo database nell'area Asia orientale. A tale scopo, è necessario aggiornare il parametro Bicep e ridistribuire il modello.

  1. Tornare a Visual Studio Code. Nella parte superiore del file main.bicep aggiungere un nuovo valore alla matrice locations:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. Salvare le modifiche apportate al file.

  3. Nel terminale di Visual Studio Code ridistribuire il file eseguendo il codice seguente:

    az deployment group create --template-file main.bicep
    
  1. Tornare a Visual Studio Code. Nella parte superiore del file main.bicep aggiungere un nuovo valore alla matrice locations:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. Salvare le modifiche apportate al file.

  3. Nel terminale di Visual Studio Code ridistribuire il file eseguendo il codice seguente:

    New-AzResourceGroupDeployment -TemplateFile main.bicep
    

Attenzione

Assicurarsi di usare lo stesso account di accesso e la stessa password usati in precedenza o che la distribuzione non venga completata correttamente.

Attendere il completamento della distribuzione.

Verificare la nuova distribuzione

Dopo aver ridistribuito le risorse, è necessario verificare che le risorse aggiuntive server logico e database siano state create nell'area Asia orientale.

  1. Tornare al portale di Azure e selezionare il gruppo di risorse [nome gruppo di risorse sandbox]. Se necessario, selezionare Aggiorna per visualizzare le nuove risorse distribuite.

  2. Verificare che il server logico e il database nuovi siano stati distribuiti nell'area Asia orientale.

    Screenshot of the Azure portal, showing the deployment of a logical server and database in an additional region.