Übung: Verwenden von Variablen- und Ausgabeschleifen
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
Öffnen Sie die Datei main.bicep.
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' } ]
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 } }]
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.
Speichern Sie die Änderungen in der Datei.
Hinzufügen von Ausgaben zum Datenbankmodul
Öffnen Sie die Datei modules/database.bicep.
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
Speichern Sie die Änderungen in der Datei.
Durchlaufen der Ausgaben durch die übergeordnete Bicep-Datei
Öffnen Sie die Datei main.bicep.
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 }]
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 zu 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.
Wechseln Sie zum Azure-Portal, und stellen Sie sicher, dass Sie sich im Sandboxabonnement befinden.
Wählen Sie
[Name der Sandboxressourcengruppe] aus.Vergewissern Sie sich, dass die virtuellen Netzwerke an den drei Azure-Standorten bereitgestellt wurden.
Wählen Sie das virtuelle Netzwerk namens
teddybear-eastasia
aus.Geben Sie in der Suchleiste Subnetze ein. Wählen Sie unter Einstellungen die Option Subnetze aus.
Stellen Sie sicher, dass die bereitgestellten Subnetze über die Namen und IP-Adressen verfügen, die im Standardwert des Parameters
subnets
angegeben wurden.Überprüfen Sie die Ausgabe des Bereitstellungsbefehls. Sie sollte den Namen und den FQDN aller drei bereitgestellten logischen Server enthalten, wie hier gezeigt:
Wechseln Sie zum Azure-Portal, und stellen Sie sicher, dass Sie sich im Sandboxabonnement befinden.
Wählen Sie
[Name der Sandboxressourcengruppe] aus.Vergewissern Sie sich, dass die virtuellen Netzwerke an den drei Azure-Standorten bereitgestellt wurden.
Wählen Sie das virtuelle Netzwerk namens
teddybear-eastasia
aus.Geben Sie in der Suchleiste Subnetze ein. Wählen Sie unter Einstellungen die Option Subnetze aus.
Stellen Sie sicher, dass die bereitgestellten Subnetze über die Namen und IP-Adressen verfügen, die im Standardwert des Parameters
subnets
angegeben wurden.Überprüfen Sie die Ausgabe des Bereitstellungsbefehls. Sie sollte den Namen und den FQDN aller drei bereitgestellten logischen Server enthalten, wie hier gezeigt: