Resourceafhankelijkheden in Bicep

Wanneer u resources implementeert, moet u er mogelijk voor zorgen dat sommige resources worden geïmplementeerd vóór andere resources. U hebt bijvoorbeeld een logische SQL-server nodig voordat u een database implementeert. U brengt deze relatie tot stand door één resource te markeren als afhankelijk van de andere resource. De volgorde van de resource-implementatie wordt op twee manieren bepaald: impliciete afhankelijkheid en expliciete afhankelijkheid

Azure Resource Manager evalueert de afhankelijkheden tussen resources en implementeert deze in de afhankelijke volgorde. Als resources niet van elkaar afhankelijk zijn, worden deze door Resource Manager parallel geïmplementeerd. U hoeft alleen afhankelijkheden te definiëren voor resources die in hetzelfde Bicep-bestand zijn geïmplementeerd.

Impliciete afhankelijkheid

Er wordt een impliciete afhankelijkheid gemaakt wanneer een resourcedeclaratie verwijst naar een andere resource in dezelfde implementatie. In het volgende voorbeeld otherResource haalt u een eigenschap op van exampleDnsZone. De resource met de naam otherResource is impliciet afhankelijk van exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'myZone'
  location: 'global'
}

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

Een geneste resource heeft ook een impliciete afhankelijkheid van de bijbehorende resource.

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

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

Een resource die de bovenliggende eigenschap bevat, heeft een impliciete afhankelijkheid van de bovenliggende resource. Dit is afhankelijk van de bovenliggende resource, niet van de andere onderliggende resources.

In het volgende voorbeeld ziet u een opslagaccount en bestandsservice. De bestandsservice heeft een impliciete afhankelijkheid van het opslagaccount.

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

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

Wanneer er een impliciete afhankelijkheid bestaat, moet u geen expliciete afhankelijkheid toevoegen.

Zie Naam en type instellen voor onderliggende resources in Bicep voor meer informatie over geneste resources.

Expliciete afhankelijkheid

Een expliciete afhankelijkheid wordt gedeclareerd met de dependsOn eigenschap . De eigenschap accepteert een matrix met resource-id's, zodat u meer dan één afhankelijkheid kunt opgeven.

In het volgende voorbeeld ziet u een DNS-zone met de naam otherZone die afhankelijk is van een DNS-zone met de naam dnsZone:

resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoeZone1'
  location: 'global'
}

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

Hoewel u misschien geneigd bent om relaties tussen uw resources in kaart te laten komen dependsOn , is het belangrijk om te begrijpen waarom u dit doet. Het is bijvoorbeeld niet de juiste aanpak om vast te leggen hoe resources onderling zijn verbonden dependsOn . Na de implementatie behoudt de resource geen implementatieafhankelijkheden in de eigenschappen, zodat er geen opdrachten of bewerkingen zijn waarmee u afhankelijkheden kunt zien. Het instellen van onnodige afhankelijkheden vertraagt de implementatietijd omdat Resource Manager deze resources niet parallel kunt implementeren.

Hoewel expliciete afhankelijkheden soms vereist zijn, is de noodzaak hiervan zeldzaam. In de meeste gevallen kunt u een symbolische naam gebruiken om de afhankelijkheid tussen resources te impliceren. Als u merkt dat u expliciete afhankelijkheden instelt, moet u overwegen of er een manier is om deze te verwijderen.

Afhankelijkheden visualiseren

Visual Studio Code biedt een hulpprogramma voor het visualiseren van de afhankelijkheden. Open een Bicep-bestand in Visual Studio Code en selecteer de knop Visualizer in de linkerbovenhoek. In de volgende schermopname ziet u de afhankelijkheden van een virtuele machine.

Schermopname van Visual Studio Code Bicep-resource visualiseren

Volgende stappen

Zie Resourcedeclaratie in Bicep voor de syntaxis voor het implementeren van een resource.