Övning – Distribuera flera resurser med hjälp av loopar

Slutförd

Hittills har din Bicep-mall distribuerat en enda logisk Azure SQL-server, med granskningsinställningar som ingår i produktionsmiljön. Nu måste du distribuera flera logiska servrar, en för varje region där företaget lanserar sin nya smarta nallebjörn.

I den här övningen utökar du Bicep-koden som du skapade tidigare så att du kan distribuera instanser av dina databaser till flera Azure-regioner.

Under processen gör du följande:

  • Flytta din befintliga Bicep-kod till en modul.
  • Skapa en ny Bicep-fil med en kopieringsloop för att distribuera modulens resurser flera gånger.
  • Distribuera Bicep-filen och verifiera distributionen av resurserna.
  • Ändra parametern för att lägga till ytterligare en plats, distribuera om filen och kontrollera sedan att de nya resurserna har distribuerats.

Flytta resurser till en modul

  1. I Visual Studio Code skapar du en ny mapp med namnet moduler i samma mapp där du skapade main.bicep-filen.

  2. Flytta filen main.bicep till mappen modules som du nyss skapade.

  3. Byt namn på filen main.bicep till database.bicep.

Distribuera flera instanser med hjälp av en kopieringsloop

  1. Skapa en ny main.bicep-fil för att ersätta den som du precis har flyttat och bytt namn på.

  2. Öppna den nya filen main.bicep och lägg till följande parametrar:

    @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. Lägg till följande moduldeklaration under parameterdeklarationerna:

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

    Observera att moduldeklarationen loopar över alla värden i matrisparametern locations .

  4. Spara ändringarna i filen.

Verifiera Bicep-filen

När du har slutfört alla föregående ändringar bör filen main.bicep se ut så här:

@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
  }
}]

Filen database.bicep bör se ut så här:

@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@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

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

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

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-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 : ''
  }
}

Om den inte gör det kopierar du antingen exemplet eller justerar mallen så att den matchar exemplet.

Distribuera Bicep-mallen till Azure

I Visual Studio Code-terminalen distribuerar du Bicep-mallen till Azure genom att köra följande kod:

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

I Visual Studio Code-terminalen distribuerar du Bicep-mallen till Azure genom att köra följande Azure PowerShell-kommando:

New-AzResourceGroupDeployment -TemplateFile main.bicep

Varning

Se till att använda samma inloggning och lösenord som du använde tidigare, annars slutförs inte distributionen.

Vänta tills distributionen är klar.

Verifiera distributionen

När distributionen är klar vill du kontrollera att den nya logiska servern och databasen har distribuerats och att de finns i rätt Azure-regioner.

  1. Gå till Azure Portal och kontrollera att du är i sandbox-prenumerationen.

  2. Välj [resursgruppsnamn för sandbox-miljö].

  3. Kontrollera att den nya logiska servern och databasen finns i regionen USA, östra 2, som du angav i locations parameterns standardvärde.

    Skärmbild av Azure Portal som visar distributionen av logiska servrar och databaser på olika platser.

  4. Lämna sidan öppen i webbläsaren. Du går tillbaka till distributionerna senare.

Uppdatera och distribuera om mallen till Azure med ytterligare en plats för en logisk server

Nallebjörnens leksaksteam är på väg att starta igen, den här gången till Asien. Teamet ber dig att distribuera en ny server och databas i regionen Asien, östra. För att göra det måste du uppdatera Bicep-parametern och distribuera om mallen.

  1. Gå tillbaka till Visual Studio Code. Överst i filen main.bicep lägger du till ett nytt värde i matrisen locations :

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. Spara ändringarna i filen.

  3. I Visual Studio Code-terminalen distribuerar du om filen genom att köra följande kod:

    az deployment group create --template-file main.bicep
    
  1. Gå tillbaka till Visual Studio Code. Överst i filen main.bicep lägger du till ett nytt värde i matrisen locations :

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. Spara ändringarna i filen.

  3. I Visual Studio Code-terminalen distribuerar du om filen genom att köra följande kod:

    New-AzResourceGroupDeployment -TemplateFile main.bicep
    

Varning

Se till att använda samma inloggning och lösenord som du använde tidigare, annars slutförs inte distributionen.

Vänta tills distributionen är klar.

Verifiera omdistributionen

Nu när du har distribuerat om resurserna vill du kontrollera att ytterligare logiska server- och databasresurser har skapats i regionen Asien, östra.

  1. Gå tillbaka till Azure Portal och välj resursgruppen [resursgruppsnamn för sandbox-miljö]. Om det behövs väljer du Uppdatera för att se de nyligen distribuerade resurserna.

  2. Kontrollera att den nya logiska servern och databasen har distribuerats i regionen Asien, östra.

    Skärmbild av Azure Portal som visar distributionen av en logisk server och databas i ytterligare en region.