Övning – Använda variabel- och utdataloopar

Slutförd

För ditt leksaksföretag måste du distribuera virtuella nätverk i varje land/region där du lanserar nallebjörnen. Dina utvecklare har också bett dig att ge dem de fullständigt kvalificerade domännamnen (FQDN) för var och en av de regionala logiska Azure SQL-servrarna som du har distribuerat.

I den här övningen lägger du till det virtuella nätverket och dess konfiguration i Bicep-koden, och du matar ut de logiska server-FQDN:erna.

Under processen gör du följande:

  • Uppdatera Bicep-koden för att ange en parameter för varje virtuellt nätverks undernät.
  • Lägg till en variabelloop för att skapa en undernätsmatris som du använder i resursdeklarationen för virtuella nätverk.
  • Lägg till en utdataloop för att skapa listan över FQDN för logisk server.
  • Distribuera Bicep-filen och verifiera distributionen.

Lägg till det virtuella nätverket i Bicep-filen

  1. Öppna filen main.bicep.

  2. Lägg till följande parametrar under parameterdeklarationerna:

    @description('The IP address range for all virtual networks to use.')
    param virtualNetworkAddressPrefix string = '10.10.0.0/16'
    
    @description('The name and IP address range for each subnet in the virtual networks.')
    param subnets array = [
      {
        name: 'frontend'
        ipAddressRange: '10.10.5.0/24'
      }
      {
        name: 'backend'
        ipAddressRange: '10.10.10.0/24'
      }
    ]
    
  3. Under parametrarna lägger du till en tom rad och lägger sedan till variabelloopen subnetProperties :

    var subnetProperties = [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.ipAddressRange
      }
    }]
    
  4. Lägg till följande resursslinga under databases modulloopen längst ned i filen:

    resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: {
      name: 'teddybear-${location}'
      location: location
      properties:{
        addressSpace:{
          addressPrefixes:[
            virtualNetworkAddressPrefix
          ]
        }
        subnets: subnetProperties
      }
    }]
    

    Kommentar

    I det här exemplet används samma adressutrymme för alla virtuella nätverk. När du skapar flera virtuella nätverk ger du vanligtvis dem olika adressutrymmen om du behöver ansluta dem.

  5. Spara ändringarna i filen.

Lägga till utdata i databasmodulen

  1. Öppna filen modules/database.bicep.

  2. Lägg till följande utdata längst ned i filen:

    output serverName string = sqlServer.name
    output location string = location
    output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
    
  3. Spara ändringarna i filen.

Flöda utdata via den överordnade Bicep-filen

  1. Öppna filen main.bicep.

  2. Lägg till följande utdataloop längst ned i filen:

    output serverInfo array = [for i in range(0, length(locations)): {
      name: databases[i].outputs.serverName
      location: databases[i].outputs.location
      fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName
    }]
    
  3. 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'
  'eastasia'
]

@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 IP address range for all virtual networks to use.')
param virtualNetworkAddressPrefix string = '10.10.0.0/16'

@description('The name and IP address range for each subnet in the virtual networks.')
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.5.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.10.0/24'
  }
]

var subnetProperties = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

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

resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: {
  name: 'teddybear-${location}'
  location: location
  properties:{
    addressSpace:{
      addressPrefixes:[
        virtualNetworkAddressPrefix
      ]
    }
    subnets: subnetProperties
  }
}]

output serverInfo array = [for i in range(0, length(locations)): {
  name: databases[i].outputs.serverName
  location: databases[i].outputs.location
  fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName
}]

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 : ''
  }
}

output serverName string = sqlServer.name
output location string = location
output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName

Om de inte gör det kopierar du antingen exemplen eller justerar dina mallar så att de matchar exemplen.

Distribuera Bicep-mallen till Azure

I Visual Studio Code-terminalen distribuerar du Bicep-mallen till Azure genom att köra följande kod. Den här processen kan ta några minuter att slutföra och sedan har du en lyckad distribution.

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

Distribuera Bicep-mallen till Azure i Visual Studio Code-terminalen genom att köra följande Azure PowerShell-kommando. Den här processen kan ta några minuter att slutföra och sedan har du en lyckad distribution.

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 nya virtuella nätverk har distribuerats och att de har undernät konfigurerade som förväntat.

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

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

  3. Kontrollera att de virtuella nätverken har distribuerats till de tre Azure-platserna.

    Skärmbild av Azure Portal som visar en lista över virtuella nätverk efter distributionen.

  4. Välj det virtuella nätverket med namnet teddybear-eastasia.

  5. I sökfältet anger du Undernät. Under Inställningar väljer du Undernät.

    Skärmbild av det Azure Portal gränssnittet för det virtuella nätverket, som visar sökfältet med angivna undernät.

  6. Kontrollera att de distribuerade undernäten har de namn och IP-adresser som angavs i subnets parameterns standardvärde.

    Skärmbild av Azure Portal som visar två virtuella nätverksundernät efter distributionen.

  7. Kontrollera distributionskommandots utdata. Det bör innehålla namnet och FQDN för alla tre logiska servrarna som distribuerades, som du ser här:

    Skärmbild av distributionsutdata som visar egenskaperna för de logiska servrarna.

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

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

  3. Kontrollera att de virtuella nätverken har distribuerats till de tre Azure-platserna.

    Skärmbild av Azure Portal som visar en lista över virtuella nätverk efter distributionen.

  4. Välj det virtuella nätverket med namnet teddybear-eastasia.

  5. I sökfältet anger du Undernät. Under Inställningar väljer du Undernät.

    Skärmbild av det Azure Portal gränssnittet för det virtuella nätverket, som visar sökfältet med angivna undernät.

  6. Kontrollera att de distribuerade undernäten har de namn och IP-adresser som angavs i subnets parameterns standardvärde.

    Skärmbild av Azure Portal som visar två virtuella nätverksundernät efter distributionen.

  7. Kontrollera distributionskommandots utdata. Det bör innehålla namnet och FQDN för alla tre logiska servrarna som distribuerades, som du ser här:

    Skärmbild av distributionsutdata som visar egenskaperna för de logiska servrarna.