Övning – Använda variabel- och utdataloopar
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
Öppna filen main.bicep.
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' } ]
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 } }]
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.
Spara ändringarna i filen.
Lägga till utdata i databasmodulen
Öppna filen modules/database.bicep.
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
Spara ändringarna i filen.
Flöda utdata via den överordnade Bicep-filen
Öppna filen main.bicep.
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 }]
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.
Gå till Azure Portal och kontrollera att du är i sandbox-prenumerationen.
Välj
[resursgruppsnamn för sandbox-miljö] .Kontrollera att de virtuella nätverken har distribuerats till de tre Azure-platserna.
Välj det virtuella nätverket med namnet
teddybear-eastasia
.I sökfältet anger du Undernät. Under Inställningar väljer du Undernät.
Kontrollera att de distribuerade undernäten har de namn och IP-adresser som angavs i
subnets
parameterns standardvärde.Kontrollera distributionskommandots utdata. Det bör innehålla namnet och FQDN för alla tre logiska servrarna som distribuerades, som du ser här:
Gå till Azure Portal och kontrollera att du är i sandbox-prenumerationen.
Välj
[resursgruppsnamn för sandbox-miljö] .Kontrollera att de virtuella nätverken har distribuerats till de tre Azure-platserna.
Välj det virtuella nätverket med namnet
teddybear-eastasia
.I sökfältet anger du Undernät. Under Inställningar väljer du Undernät.
Kontrollera att de distribuerade undernäten har de namn och IP-adresser som angavs i
subnets
parameterns standardvärde.Kontrollera distributionskommandots utdata. Det bör innehålla namnet och FQDN för alla tre logiska servrarna som distribuerades, som du ser här: