Exercice : Utiliser des boucles de variable et de sortie

Effectué

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

  1. Ouvrez le fichier main.bicep.

  2. 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'
      }
    ]
    
  3. 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
      }
    }]
    
  4. 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.

  5. Enregistrez les modifications du fichier.

Ajouter des sorties au module de base de données

  1. Ouvrez le fichier modules/database.bicep.

  2. En bas du fichier, ajoutez les sorties suivantes :

    output serverName string = sqlServer.name
    output location string = location
    output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
    
  3. Enregistrez les modifications du fichier.

Transmettre les sorties via le fichier Bicep parent

  1. Ouvrez le fichier main.bicep.

  2. 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
    }]
    
  3. 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.

  1. Accédez au Portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable.

  2. Sélectionnez [nom du groupe de ressources du bac à sable].

  3. Vérifiez que les réseaux virtuels ont été déployés sur les trois emplacements Azure.

    Capture d’écran du portail Azure, montrant une liste de réseaux virtuels après le déploiement.

  4. Sélectionnez le réseau virtuel nommé teddybear-eastasia.

  5. Dans la barre de recherche, entrez Sous-réseaux. Sous Paramètres, sélectionnez Sous-réseaux.

    Capture d’écran de l’interface du portail Azure pour le réseau virtuel, montrant le champ de recherche avec les sous-réseaux entrés.

  6. 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.

    Capture d’écran du Portail Azure, montrant deux sous-réseaux de réseau virtuel après le déploiement.

  7. 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 :

    Capture d’écran de la sortie du déploiement, affichant les propriétés des serveurs logiques.

  1. Accédez au Portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable.

  2. Sélectionnez [nom du groupe de ressources du bac à sable].

  3. Vérifiez que les réseaux virtuels ont été déployés sur les trois emplacements Azure.

    Capture d’écran du portail Azure, montrant une liste de réseaux virtuels après le déploiement.

  4. Sélectionnez le réseau virtuel nommé teddybear-eastasia.

  5. Dans la barre de recherche, entrez Sous-réseaux. Sous Paramètres, sélectionnez Sous-réseaux.

    Capture d’écran de l’interface du portail Azure pour le réseau virtuel, montrant le champ de recherche avec les sous-réseaux entrés.

  6. 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.

    Capture d’écran du Portail Azure, montrant deux sous-réseaux de réseau virtuel après le déploiement.

  7. 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 :

    Capture d’écran de la sortie du déploiement, affichant les propriétés des serveurs logiques.