Exercice : Déployer plusieurs ressources à l’aide de boucles

Effectué

Jusqu’à présent, votre modèle Bicep a déployé un seul serveur logique Azure SQL, avec des paramètres d’audit inclus pour votre environnement de production. Vous devez maintenant déployer plusieurs serveurs logiques, un pour chaque région où votre entreprise lance son nouveau nounours intelligent.

Dans cet exercice, vous allez étendre le code Bicep que vous avez créé précédemment afin de pouvoir déployer des instances de vos bases de données dans plusieurs régions Azure.

Pendant ce processus, vous allez :

  • Déplacez votre code Bicep existant dans un module.
  • Créez un nouveau fichier Bicep avec une boucle de copie pour déployer les ressources du module plusieurs fois.
  • Déployez le fichier Bicep et vérifiez le déploiement des ressources.
  • Modifiez le paramètre pour ajouter un emplacement supplémentaire, redéployez le fichier, puis vérifiez que les nouvelles ressources ont été déployées.

Déplacer des ressources dans un module

  1. Dans Visual Studio Code, créez un nouveau dossier appelé modules dans le même dossier que celui où vous avez créé votre fichier main.bicep.

  2. Déplacez votre fichier main.bicep dans le dossier modules que vous venez de créer.

  3. Renommez le fichier main.bicep en database.bicep.

Déployer plusieurs instances à l’aide d’une boucle de copie

  1. Créez un nouveau fichier main.bicep pour remplacer celui que vous venez de déplacer et renommer.

  2. Ouvrez le nouveau fichier main.bicep, puis ajoutez les paramètres suivants :

    @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
    
  3. Sous les déclarations de paramètres, ajoutez la déclaration de module suivante :

    module databases 'modules/database.bicep' = [for location in locations: {
      name: 'database-${location}'
      params: {
        location: location
        sqlServerAdministratorLogin: sqlServerAdministratorLogin
        sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }]
    

    Notez que la déclaration de module effectue une boucle sur toutes les valeurs dans le paramètre de tableau locations.

  4. 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 = [
  '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
  }
}]

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@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 : ''
  }
}

Si ce n’est pas le cas, copiez l’exemple ou ajustez votre modèle pour qu’il corresponde à l’exemple.

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 :

az deployment group create --name main --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 :

New-AzResourceGroupDeployment -Name main -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 le nouveau serveur logique et la nouvelle base de données sont déployés et qu’ils se trouvent dans les régions Azure appropriées.

  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 le nouveau serveur logique et la nouvelle base de données se trouvent dans la région USA Est 2, que vous avez spécifiée dans la valeur par défaut du paramètre locations.

    Capture d’écran du portail Azure, montrant le déploiement des serveurs logiques et des bases de données à différents emplacements.

  4. Laissez la page ouverte dans votre navigateur. Vous allez à nouveau vérifier les déploiements plus tard.

Mettre à jour et redéployer le modèle sur Azure avec un emplacement supplémentaire pour un serveur logique

L’équipe de développement du nounours est sur le point de le lancer à nouveau, cette fois en Asie. L’équipe vous demande de déployer un nouveau serveur et une nouvelle base de données dans la région Asie Est. Pour ce faire, vous devez mettre à jour votre paramètre Bicep et redéployer votre modèle.

  1. Revenez à Visual Studio Code. En haut du fichier main.bicep, ajoutez une nouvelle valeur au tableau locations :

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westus'
      'eastus2'
      'eastasia'
    ]
    
  2. Enregistrez les modifications du fichier.

  3. Dans le terminal Visual Studio Code, redéployez le fichier en exécutant le code suivant :

    az deployment group create --name main --template-file main.bicep
    
  1. Revenez à Visual Studio Code. En haut du fichier main.bicep, ajoutez une nouvelle valeur au tableau locations :

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westus'
      'eastus2'
      'eastasia'
    ]
    
  2. Enregistrez les modifications du fichier.

  3. Dans le terminal Visual Studio Code, redéployez le fichier en exécutant le code suivant :

    New-AzResourceGroupDeployment -Name main -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 redéploiement

Maintenant que vous avez redéployé les ressources, vous devez vérifier que les ressources de base de données et de serveur logique supplémentaires ont été créées dans la région Asie Est.

  1. Revenez au portail Azure et sélectionnez le groupe de ressources [nom du groupe de ressources de bac à sable]. Si nécessaire, sélectionnez Actualiser pour afficher les ressources qui viennent d’être déployées.

  2. Vérifiez que le nouveau serveur logique et la nouvelle base de données ont été déployés dans la région Asie Est.

    Capture d’écran du portail Azure, montrant le déploiement d’un serveur logique et d’une base de données dans une région supplémentaire.