Exercice : Utiliser des boucles de variable et de sortie
Pour votre société de jouets, vous devez déployer des réseaux virtuels dans chaque pays/région où vous lancez le nounours. Vos développeurs vous ont également demandé de leur attribuer les noms de domaine complets (FQDN) de chacun des serveurs logiques Azure SQL régionaux que vous avez déployés.
Dans cet exercice, vous allez ajouter le réseau virtuel et sa configuration à votre code Bicep, et générer les noms de domaine complets du serveur logique.
Pendant ce processus, vous allez :
- Mettre à jour votre code Bicep pour spécifier un paramètre pour chaque sous-réseau du réseau virtuel.
- Ajouter une boucle de variable pour créer un tableau de sous-réseaux, que vous utiliserez dans la déclaration de ressource de réseau virtuel.
- Ajoutez une boucle de sortie pour créer la liste des noms de domaine complets du serveur logique.
- Déployez le fichier Bicep et vérifiez le déploiement.
Ajouter le réseau virtuel à votre fichier Bicep
Ouvrez le fichier main.bicep.
Sous les déclarations de paramètres, ajoutez les paramètres suivants :
@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' } ]
Sous les paramètres, ajoutez une ligne vide, puis ajoutez la boucle de variable
subnetProperties
:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
En bas du fichier, sous la boucle de module
databases
, ajoutez la boucle de ressources suivante :resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: { name: 'teddybear-${location}' location: location properties:{ addressSpace:{ addressPrefixes:[ virtualNetworkAddressPrefix ] } subnets: subnetProperties } }]
Notes
Cet exemple utilise le même espace d’adressage pour tous les réseaux virtuels. Normalement, lorsque vous créez plusieurs réseaux virtuels, vous leur donnez des espaces d’adressage différents au cas où vous auriez besoin de les connecter ensemble.
Enregistrez les modifications du fichier.
Ajouter des sorties au module de base de données
Ouvrez le fichier modules/database.bicep.
En bas du fichier, ajoutez les sorties suivantes :
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
Enregistrez les modifications du fichier.
Transmettre les sorties via le fichier Bicep parent
Ouvrez le fichier main.bicep.
En bas du fichier, ajoutez la boucle de sortie suivante :
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 }]
Enregistrez les modifications du fichier.
Vérifier votre fichier Bicep
Une fois que vous avez effectué toutes les modifications précédentes, votre fichier main.bicep doit ressembler à l’exemple suivant :
@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
}]
Votre fichier database.bicep doit ressembler à l’exemple suivant :
@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
Si ce n’est pas le cas, copiez les exemples ou ajustez vos modèles pour qu’ils correspondent aux exemples.
Déployer le modèle Bicep sur Azure
Dans le terminal Visual Studio Code, déployez le modèle Bicep sur Azure en exécutant le code suivant. Ce processus peut prendre quelques minutes à s’exécuter. Vous aurez alors un déploiement réussi.
az deployment group create --template-file main.bicep
Dans le terminal Visual Studio Code, déployez le modèle Bicep sur Azure en exécutant la commande Azure PowerShell suivante. Ce processus peut prendre quelques minutes à s’exécuter. Vous aurez alors un déploiement réussi.
New-AzResourceGroupDeployment -TemplateFile main.bicep
Attention
Veillez à utiliser les mêmes identifiant et mot de passe que ceux que vous avez utilisés précédemment, ou le déploiement ne se terminera pas correctement.
Attendez que le déploiement se termine.
Vérifier le déploiement
Une fois le déploiement terminé, vous devez vérifier que les nouveaux réseaux virtuels sont déployés et qu’ils disposent de sous-réseaux configurés comme prévu.
Accédez au Portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable.
Sélectionnez
[nom du groupe de ressources du bac à sable] .Vérifiez que les réseaux virtuels ont été déployés sur les trois emplacements Azure.
Sélectionnez le réseau virtuel nommé
teddybear-eastasia
.Dans la barre de recherche, entrez Sous-réseaux. Sous Paramètres, sélectionnez Sous-réseaux.
Vérifiez que les sous-réseaux déployés ont les noms et les adresses IP qui ont été spécifiés dans la valeur par défaut du paramètre
subnets
.Vérifiez la sortie de la commande de déploiement. Elle doit inclure le nom et le nom de domaine complet des trois serveurs logiques qui ont été déployés, comme illustré ici :
Accédez au Portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable.
Sélectionnez
[nom du groupe de ressources du bac à sable] .Vérifiez que les réseaux virtuels ont été déployés sur les trois emplacements Azure.
Sélectionnez le réseau virtuel nommé
teddybear-eastasia
.Dans la barre de recherche, entrez Sous-réseaux. Sous Paramètres, sélectionnez Sous-réseaux.
Vérifiez que les sous-réseaux déployés ont les noms et les adresses IP qui ont été spécifiés dans la valeur par défaut du paramètre
subnets
.Vérifiez la sortie de la commande de déploiement. Elle doit inclure le nom et le nom de domaine complet des trois serveurs logiques qui ont été déployés, comme illustré ici :