Utiliser des boucles de variable et de sortie

Effectué

Vous avez appris à utiliser des boucles de copie pour déployer plusieurs instances de ressources et à définir les propriétés d’une ressource à l’aide de boucles. Dans Bicep, vous pouvez aussi utiliser les boucles avec des variables et des sorties.

Pour votre société de jouets, vous devez déployer des réseaux virtuels avec la même configuration de sous-réseau dans plusieurs régions Azure. Vous vous attendez à devoir ajouter des sous-réseaux supplémentaires à vos réseaux virtuels à l’avenir. Vous devez donc disposer de la flexibilité dans vos modèles Bicep pour modifier la configuration de sous-réseau.

Étant donné que vous allez également déployer plusieurs comptes de stockage dans votre environnement Azure, vous devez fournir les points de terminaison de chaque compte de stockage en tant que sortie afin que vos pipelines de déploiement puissent utiliser ces informations.

Dans cette unité, vous apprendrez à utiliser des boucles avec des variables et des sorties.

Remarque

Les commandes de cette unité sont présentées pour illustrer les concepts. N’exécutez pas encore les commandes. Vous allez bientôt mettre en pratique ce que vous apprenez ici.

Boucles de variable

En utilisant des boucles de variable, vous pouvez créer un tableau, que vous pouvez ensuite utiliser via votre fichier Bicep. Comme vous le feriez avec d’autres boucles, vous utilisez le mot clé for pour créer une boucle variable :

var items = [for i in range(1, 5): 'item${i}']

L’exemple précédent crée un tableau qui contient les valeurs item1, item2, item3, item4 et item5.

En général, vous utilisez des boucles de variable pour créer des objets plus complexes que vous pouvez ensuite utiliser dans une déclaration de ressource. Voici comment utiliser des boucles de variable pour créer une propriété subnets :

param addressPrefix string = '10.10.0.0/16'
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.0.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.1.0/24'
  }
]

var subnetsProperty = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' = {
  name: 'teddybear'
  location: resourceGroup().location
  properties:{
    addressSpace:{
      addressPrefixes:[
        addressPrefix
      ]
    }
    subnets: subnetsProperty
  }
}

Cet exemple illustre une utilisation efficace des boucles de variable : l’activation d’un paramètre qui a des valeurs simples et faciles à comprendre dans un objet plus complexe qui correspond à la définition requise de la ressource Azure. Vous pouvez utiliser des boucles de variable pour permettre aux paramètres de spécifier uniquement les informations clés qui seront modifiées pour chaque élément de la liste. Vous pouvez ensuite utiliser des expressions Bicep ou les valeurs par défaut pour définir les autres propriétés requises pour la ressource.

Boucles de sortie

Vous pouvez utiliser des sorties Bicep pour fournir des informations de vos déploiements à l’utilisateur ou à l’outil qui a démarré le déploiement. Les boucles de sortie vous offrent la flexibilité et la puissance des boucles dans vos sorties.

Comme vous le feriez avec les autres boucles, utilisez le mot clé for pour spécifier une boucle de sortie :

var items = [
  'item1'
  'item2'
  'item3'
  'item4'
  'item5'
]

output outputItems array = [for i in range(0, length(items)): items[i]]

En général, vous utilisez des boucles de sortie conjointement avec d’autres boucles au sein de votre modèle. Par exemple, examinons un fichier Bicep qui déploie un ensemble de comptes de stockage dans des régions Azure spécifiées par le paramètre locations :

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource storageAccounts 'Microsoft.Storage/storageAccounts@2023-05-01' = [for location in locations: {
  name: 'toy${uniqueString(resourceGroup().id, location)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Vous devrez probablement renvoyer des informations sur chaque compte de stockage que vous avez créé, par exemple son nom et les points de terminaison qui peuvent être utilisés pour y accéder. En utilisant une boucle de sortie, vous pouvez récupérer ces informations dans votre fichier Bicep.

Notes

Actuellement, Bicep ne prend pas en charge directement les ressources qui ont été créées au sein d’une boucle à partir d’une boucle de sortie. Cela signifie que vous devez utiliser des indexeurs de tableau pour accéder aux ressources, comme indiqué dans l’exemple suivant.

output storageEndpoints array = [for i in range(0, length(locations)): {
  name: storageAccounts[i].name
  location: storageAccounts[i].location
  blobEndpoint: storageAccounts[i].properties.primaryEndpoints.blob
  fileEndpoint: storageAccounts[i].properties.primaryEndpoints.file
}]

Attention

N’utilisez pas de sorties pour retourner des secrets, tels que des clés d’accès ou des mots de passe. Les sorties sont journalisées et ne sont pas conçues pour la gestion des données sécurisées.