Esercizio - Distribuire più risorse usando i cicli
Fino a questo momento, il modello Bicep ha distribuito un singolo server logico Azure SQL, con le impostazioni di controllo incluse per l'ambiente di produzione. È ora necessario distribuire più server logici, uno per ogni area in cui l'azienda sta lanciando il nuovo orsacchiotto intelligente.
In questo esercizio, si estenderà il codice Bicep creato in precedenza in modo da poter distribuire istanze dei database in più aree di Azure.
Durante il processo, si eseguiranno queste operazioni:
- Spostare il codice Bicep esistente in un modulo.
- Creare un nuovo file Bicep con un ciclo di copia per distribuire le risorse del modulo più volte.
- Distribuire il file Bicep e verificare la distribuzione delle risorse.
- Modificare il parametro per aggiungere un'altra località, distribuire di nuovo il file e quindi verificare che le nuove risorse siano state distribuite.
Spostare le risorse in un modulo
In Visual Studio Code creare una nuova cartella denominata modules nella stessa cartella in cui è stato creato il file main.bicep.
Spostare il file main.bicep nella cartella modules appena creata.
Rinominare il file main.bicep in database.bicep.
Distribuire più istanze usando un ciclo di copia
Creare un nuovo file main.bicep per sostituire quello appena spostato e rinominato.
Aprire il nuovo file main.bicep e aggiungere i parametri seguenti:
@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westus' 'eastus2' ] @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
Sotto le dichiarazioni di parametri aggiungere la dichiarazione di modulo seguente:
module databases 'modules/database.bicep' = [for location in locations: { name: 'database-${location}' params: { location: location sqlServerAdministratorLogin: sqlServerAdministratorLogin sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword } }]
Si noti che la dichiarazione di modulo esegue un ciclo su tutti i valori nel parametro della matrice
locations
.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 = [
'westus'
'eastus2'
]
@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
module databases 'modules/database.bicep' = [for location in locations: {
name: 'database-${location}'
params: {
location: location
sqlServerAdministratorLogin: sqlServerAdministratorLogin
sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
}
}]
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@2024-05-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-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@2024-05-01-preview' = if (auditingEnabled) {
parent: sqlServer
name: 'default'
properties: {
state: 'Enabled'
storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : ''
}
}
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:
az deployment group create --name main --template-file main.bicep
Nel terminale di Visual Studio Code distribuire il modello Bicep in Azure eseguendo il comando di Azure PowerShell seguente:
New-AzResourceGroupDeployment -Name main -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, sarà necessario verificare che il server logico e il database nuovi siano distribuiti e che si trovino nelle aree di Azure corrette.
Passare al portale di Azure e assicurarsi di trovarsi nella sottoscrizione sandbox.
Selezionare
[nome gruppo di risorse sandbox] .Verificare che il server logico e il database nuovi si trovino nell'area Stati Uniti orientali 2, specificata nel valore predefinito del parametro
locations
.Lasciare aperta la pagina nel browser. Le distribuzioni verranno controllate di nuovo in un momento successivo.
Aggiornare e ridistribuire il modello in Azure con una località aggiuntiva per un server logico
Il team che si occupa dell'orsacchiotto sta per fare un nuovo lancio, questa volta in Asia. Il team chiede di distribuire un nuovo server e un nuovo database nell'area Asia orientale. A tale scopo, è necessario aggiornare il parametro Bicep e ridistribuire il modello.
Tornare a Visual Studio Code. Nella parte superiore del file main.bicep aggiungere un nuovo valore alla matrice
locations
:@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westus' 'eastus2' 'eastasia' ]
Salvare le modifiche apportate al file.
Nel terminale di Visual Studio Code ridistribuire il file eseguendo il codice seguente:
az deployment group create --name main --template-file main.bicep
Tornare a Visual Studio Code. Nella parte superiore del file main.bicep aggiungere un nuovo valore alla matrice
locations
:@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westus' 'eastus2' 'eastasia' ]
Salvare le modifiche apportate al file.
Nel terminale di Visual Studio Code ridistribuire il file eseguendo il codice seguente:
New-AzResourceGroupDeployment -Name main -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 nuova distribuzione
Dopo aver ridistribuito le risorse, è necessario verificare che le risorse aggiuntive server logico e database siano state create nell'area Asia orientale.
Tornare al portale di Azure e selezionare il gruppo di risorse
[nome gruppo di risorse sandbox] . Se necessario, selezionare Aggiorna per visualizzare le nuove risorse distribuite.Verificare che il server logico e il database nuovi siano stati distribuiti nell'area Asia orientale.