Dépendances de ressources dans Bicep

Lorsque vous déployez des ressources, vous devez éventuellement vous assurer que certaines ressources sont déployées avant d’autres ressources. Par exemple, vous avez besoin d’un serveur SQL logique avant de déployer une base de données. Vous établissez cette relation en marquant une seule ressource comme dépendante de l’autre ressource. L’ordre de déploiement des ressources est déterminé de deux manières : une dépendance implicite et une dépendance explicite

Azure Resource Manager évalue les dépendances entre les ressources et les déploie dans leur ordre dépendant. Quand les ressources ne dépendent pas les unes des autres, Resource Manager les déploie en parallèle. Vous devez uniquement définir des dépendances pour les ressources qui sont déployées dans un même fichier Bicep.

Dépendance implicite

Une dépendance implicite est créée lorsqu’une déclaration de ressource référence une autre ressource dans le même déploiement. Dans l’exemple suivant, otherResource récupère une propriété de exampleDnsZone. La ressource nommée otherResource dépend implicitement de exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = {
  name: 'myZone'
  location: 'global'
}

resource otherResource 'Microsoft.Example/examples@2024-05-01' = {
  name: 'exampleResource'
  properties: {
    // get read-only DNS zone property
    nameServers: exampleDnsZone.properties.nameServers
  }
}

Une ressource imbriquée a également une dépendance implicite à la ressource qui la contient.

resource myParent 'My.Rp/parentType@2024-05-01' = {
  name: 'myParent'
  location: 'West US'

  // implicit dependency on 'myParent'
  resource myChild 'childType' = {
    name: 'myChild'
  }
}

Une ressource qui inclut la propriété parente a une dépendance implicite sur la ressource parente. Elle dépend de la ressource parente, et non de ses autres ressources enfants.

L'exemple suivant illustre un compte de stockage avec un service de fichiers. Le service de fichiers a une dépendance implicite sur le compte de stockage.

resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2023-04-01' = {
  name: 'default'
  parent: storage
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
  name: 'exampleshare'
  parent: service
}

Lorsqu’il existe une dépendance implicite, n’ajoutez pas de dépendance explicite.

Pour plus d’informations sur les ressources imbriquées, consultez Définir le nom et le type des ressources enfants dans Bicep.

Dépendance explicite

Une dépendance explicite est déclarée avec la propriété dependsOn. La propriété accepte un tableau d’identificateurs de ressource, ce qui vous permet de spécifier plusieurs dépendances. Vous pouvez spécifier une dépendance de ressources imbriquée en utilisant l’opérateur ::.

L’exemple suivant montre une zone DNS nommée otherZone qui dépend d’une zone DNS nommée dnsZone :

resource dnsZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
  name: 'demoeZone1'
  location: 'global'
}

resource otherZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
  name: 'demoZone2'
  location: 'global'
  dependsOn: [
    dnsZone
  ]
}

Vous pouvez être tenté d’utiliser dependsOn pour mapper les relations entre vos ressources. Il est toutefois important de comprendre pourquoi vous le faites. Par exemple, pour documenter la manière dont les ressources sont liées entre elles, dependsOn n’est pas la bonne approche. Après le déploiement, la ressource ne conserve pas les dépendances de déploiement dans ses propriétés. Aucune commande ni opération ne vous permet donc d’afficher les dépendances. La définition de dépendances inutiles ralentit le temps de déploiement, Resource Manager ne pouvant pas déployer ces ressources en parallèle.

Les dépendances explicites sont rarement nécessaires. Dans la plupart des cas, vous pouvez utiliser un nom symbolique pour supposer la dépendance entre les ressources. Si vous vous retrouvez à définir des dépendances explicites, vous devez vous demander s’il existe un moyen de les supprimer.

Visualiser les dépendances

Visual Studio Code fournit un outil qui permet de visualiser les dépendances. Ouvrez un fichier Bicep dans Visual Studio Code, puis sélectionnez le bouton visualiseur dans le coin supérieur gauche. La capture d’écran suivante montre les dépendances d’une machine virtuelle.

Capture d’écran du visualiseur de ressources Bicep dans Visual Studio Code

Étapes suivantes

Pour que la syntaxe déploie une ressource, consultez Déclaration de ressources dans Bicep.