Übung: Verwenden von Variablen- und Ausgabeschleifen

Abgeschlossen

Für Ihr Spielwarenunternehmen müssen Sie virtuelle Netzwerke in jedem Land/jeder Region bereitstellen, in dem bzw. der Sie den Teddybären auf den Markt bringen möchten. Ihre Entwickler haben Sie außerdem um die vollqualifizierten Domänennamen (Fully Qualified Domain Names, FQDNs) aller von Ihnen bereitgestellten regionalen logischen Azure SQL-Server gebeten.

In dieser Übung fügen Sie ihrem Bicep-Code das virtuelle Netzwerk und dessen Konfiguration hinzu und geben die FQDNs der logischen Server aus.

In dem Prozess gehen Sie wie folgt vor:

  • Sie aktualisieren Ihren Bicep-Code, um einen Parameter für die Subnetze der einzelnen virtuellen Netzwerke anzugeben.
  • Sie fügen eine Variablenschleife hinzu, um ein Subnetzarray zu erstellen, das Sie in der Ressourcendeklaration des virtuellen Netzwerks verwenden werden.
  • Sie fügen eine Ausgabeschleife hinzu, um die Liste der FQDNs der logischen Server zu erstellen.
  • Sie stellen die Bicep-Datei bereit und überprüfen die Bereitstellung.

Hinzufügen des virtuellen Netzwerks zu Ihrer Bicep-Datei

  1. Öffnen Sie die Datei main.bicep.

  2. Fügen Sie unter den Parameterdeklarationen die folgenden Parameter hinzu:

    @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. Fügen Sie unterhalb der Parameter eine leere Zeile hinzu, und fügen Sie dann die Variablenschleife subnetProperties hinzu:

    var subnetProperties = [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.ipAddressRange
      }
    }]
    
  4. Fügen Sie am Ende der Datei unterhalb der Modulschleife databases die folgende Ressourcenschleife hinzu:

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

    Hinweis

    In diesem Beispiel wird für alle virtuellen Netzwerke derselbe Adressraum verwendet. Wenn Sie mehrere virtuelle Netzwerke erstellen, würden Sie ihnen normalerweise unterschiedliche Adressräume für den Fall zuweisen, dass sie möglicherweise miteinander verbunden werden müssen.

  5. Speichern Sie die Änderungen in der Datei.

Hinzufügen von Ausgaben zum Datenbankmodul

  1. Öffnen Sie die Datei modules/database.bicep.

  2. Fügen Sie am Ende der Datei die folgenden Ausgaben hinzu:

    output serverName string = sqlServer.name
    output location string = location
    output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
    
  3. Speichern Sie die Änderungen in der Datei.

Durchlaufen der Ausgaben durch die übergeordnete Bicep-Datei

  1. Öffnen Sie die Datei main.bicep.

  2. Fügen Sie am Ende der Datei die folgende Ausgabeschleife hinzu:

    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. Speichern Sie die Änderungen in der Datei.

Überprüfen Ihrer Bicep-Datei

Nachdem Sie alle oben genannten Änderungen durchgeführt haben, sollte Ihre Datei main.bicep wie im folgenden Beispiel aussehen:

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

Die Datei database.bicep sollte wie im folgenden Beispiel aussehen:

@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

Andernfalls kopieren Sie die Beispiele, oder passen Ihre Vorlage an die Beispiele an.

Bereitstellen der Bicep-Vorlage in Azure

Stellen Sie die Bicep-Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Code ausführen. Dieser Vorgang kann einige Minuten dauern, und dann verfügen Sie über eine erfolgreiche Bereitstellung.

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

Stellen Sie die Bicep-Vorlage in Azure im Visual Studio Code-Terminal bereit, indem Sie den folgenden Azure PowerShell-Befehl ausführen. Dieser Vorgang kann einige Minuten dauern, und dann verfügen Sie über eine erfolgreiche Bereitstellung.

New-AzResourceGroupDeployment -TemplateFile main.bicep

Achtung

Achten Sie darauf, denselben Anmeldenamen und dasselbe Kennwort wie zuvor verwenden. Andernfalls wird die Bereitstellung nicht erfolgreich durchgeführt.

Warten Sie, bis die Bereitstellung abgeschlossen ist.

Überprüfen der Bereitstellung

Nachdem Abschluss der Bereitstellung möchten Sie überprüfen, ob neue virtuelle Netzwerke bereitgestellt werden und Subnetze wie erwartet konfiguriert sind.

  1. Wechseln Sie zum Azure-Portal, und stellen Sie sicher, dass Sie sich im Sandboxabonnement befinden.

  2. Wählen Sie [Name der Sandboxressourcengruppe] aus.

  3. Vergewissern Sie sich, dass die virtuellen Netzwerke an den drei Azure-Standorten bereitgestellt wurden.

    Screenshot of the Azure portal, showing a list of virtual networks after deployment.

  4. Wählen Sie das virtuelle Netzwerk namens teddybear-eastasia aus.

  5. Geben Sie in der Suchleiste Subnetze ein. Wählen Sie unter Einstellungen die Option Subnetze aus.

    Screenshot of the Azure portal interface for the virtual network, showing the search field with Subnets entered.

  6. Stellen Sie sicher, dass die bereitgestellten Subnetze über die Namen und IP-Adressen verfügen, die im Standardwert des Parameters subnets angegeben wurden.

    Screenshot of the Azure portal that shows two virtual network subnets after deployment.

  7. Überprüfen Sie die Ausgabe des Bereitstellungsbefehls. Sie sollte den Namen und den FQDN aller drei bereitgestellten logischen Server enthalten, wie hier gezeigt:

    Screenshot of the deployment output, displaying the properties of the logical servers.

  1. Wechseln Sie zum Azure-Portal, und stellen Sie sicher, dass Sie sich im Sandboxabonnement befinden.

  2. Wählen Sie [Name der Sandboxressourcengruppe] aus.

  3. Vergewissern Sie sich, dass die virtuellen Netzwerke an den drei Azure-Standorten bereitgestellt wurden.

    Screenshot of the Azure portal, showing a list of virtual networks after deployment.

  4. Wählen Sie das virtuelle Netzwerk namens teddybear-eastasia aus.

  5. Geben Sie in der Suchleiste Subnetze ein. Wählen Sie unter Einstellungen die Option Subnetze aus.

    Screenshot of the Azure portal interface for the virtual network, showing the search field with Subnets entered.

  6. Stellen Sie sicher, dass die bereitgestellten Subnetze über die Namen und IP-Adressen verfügen, die im Standardwert des Parameters subnets angegeben wurden.

    Screenshot of the Azure portal that shows two virtual network subnets after deployment.

  7. Überprüfen Sie die Ausgabe des Bereitstellungsbefehls. Sie sollte den Namen und den FQDN aller drei bereitgestellten logischen Server enthalten, wie hier gezeigt:

    Screenshot of the deployment output, displaying the properties of the logical servers.