Esercizio - Usare cicli di variabili e output
Per l'azienda di giocattoli è necessario distribuire reti virtuali in ogni Paese/area geografica in cui si sta lanciando l'orsacchiotto. Gli sviluppatori hanno anche chiesto di fornire i nomi di dominio completi (FQDN) di ognuno dei server logici Azure SQL a livello di area che sono stati distribuiti.
In questo esercizio si aggiungeranno la rete virtuale e la relativa configurazione al codice Bicep, per restituire i nomi di dominio completi (FQDN) dei server logici.
Durante il processo, si eseguiranno queste operazioni:
- Aggiornare il codice Bicep per specificare un parametro per ogni subnet di rete virtuale.
- Aggiungere un ciclo di variabili per creare una matrice di subnet, che verrà usata nella dichiarazione della risorsa di rete virtuale.
- Aggiungere un ciclo di output per creare l'elenco di FQDN dei server logici.
- Distribuire il file Bicep e verificare la distribuzione.
Aggiungere la rete virtuale al file Bicep
Aprire il file main.bicep.
Sotto le dichiarazioni di parametri aggiungere i parametri seguenti:
@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' } ]
Sotto i parametri aggiungere una riga vuota e quindi aggiungere il ciclo di variabili
subnetProperties
:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
Nella parte inferiore del file, sotto il ciclo del modulo
databases
, aggiungere il ciclo di risorse seguente:resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: { name: 'teddybear-${location}' location: location properties:{ addressSpace:{ addressPrefixes:[ virtualNetworkAddressPrefix ] } subnets: subnetProperties } }]
Nota
Questo esempio usa lo stesso spazio indirizzi per tutte le reti virtuali. In genere, quando si creano più reti virtuali, è necessario assegnare spazi indirizzi diversi nel caso in cui sia necessario connetterle tra loro.
Salvare le modifiche apportate al file.
Aggiungere output al modulo di database
Aprire il file modules/database.bicep.
Nella parte inferiore del file aggiungere gli output seguenti:
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
Salvare le modifiche apportate al file.
Creare un flusso di output nel file Bicep padre
Aprire il file main.bicep.
Nella parte inferiore del file aggiungere il ciclo di output seguente:
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 }]
Salvare le modifiche apportate al file.
Verificare il file Bicep
Al termine di tutte le modifiche precedenti, il file main.bicep avrà un aspetto simile al seguente:
@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
}]
Il file database.bicep dovrebbe essere simile all'esempio seguente:
@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
In caso contrario, copiare l'esempio oppure modificare il modello in modo che corrisponda all'esempio.
Distribuire il modello Bicep in Azure
Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il codice seguente. Il processo può richiedere alcuni minuti, dopo i quali la distribuzione sarà completata.
az deployment group create --template-file main.bicep
Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il comando di Azure PowerShell seguente. Il processo può richiedere alcuni minuti, dopo i quali la distribuzione sarà completata.
New-AzResourceGroupDeployment -TemplateFile main.bicep
Attenzione
Assicurarsi di usare lo stesso account di accesso e la stessa password usati in precedenza o la distribuzione non verrà completata correttamente.
Attendere il completamento della distribuzione.
Verificare la distribuzione
Al termine della distribuzione, verificare che le nuove reti virtuali siano state distribuite e che le subnet siano configurate come previsto.
Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione sandbox.
Selezionare
[nome gruppo di risorse sandbox] .Verificare che le reti virtuali siano state distribuite nelle tre località di Azure.
Selezionare la rete virtuale denominata
teddybear-eastasia
.Nella barra di ricerca, immettere Subnet. In Impostazioni selezionare Subnet.
Verificare che le subnet distribuite abbiano i nomi e gli indirizzi IP specificati nel valore predefinito del parametro
subnets
.Controllare l'output del comando di distribuzione. Deve includere il nome e il nome di dominio completo (FQDN) di tutti e tre i server logici distribuiti, come illustrato di seguito:
Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione sandbox.
Selezionare
[nome gruppo di risorse sandbox] .Verificare che le reti virtuali siano state distribuite nelle tre località di Azure.
Selezionare la rete virtuale denominata
teddybear-eastasia
.Nella barra di ricerca, immettere Subnet. In Impostazioni selezionare Subnet.
Verificare che le subnet distribuite abbiano i nomi e gli indirizzi IP specificati nel valore predefinito del parametro
subnets
.Controllare l'output del comando di distribuzione. Deve includere il nome e il nome di dominio completo (FQDN) di tutti e tre i server logici distribuiti, come illustrato di seguito: