Resursberoenden i Bicep

När du distribuerar resurser kan du behöva se till att vissa resurser distribueras före andra resurser. Du behöver till exempel en logisk SQL-server innan du distribuerar en databas. Du upprättar den här relationen genom att markera en resurs som beroende av den andra resursen. Ordningen på resursdistributionen bestäms på två sätt: implicit beroende och explicit beroende

Azure Resource Manager utvärderar beroenden mellan resurser och distribuerar dem i beroende ordning. När resurserna inte är beroende av varandra distribuerar Resource Manager dem parallellt. Du behöver bara definiera beroenden för resurser som distribueras i samma Bicep-fil.

Implicit beroende

Ett implicit beroende skapas när en resursdeklaration refererar till en annan resurs i samma distribution. I följande exempel otherResource hämtar en egenskap från exampleDnsZone. Resursen med namnet otherResource är implicit beroende av exampleDnsZone.

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

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

En kapslad resurs har också ett implicit beroende av dess innehållande resurs.

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

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

En resurs som innehåller den överordnade egenskapen har ett implicit beroende av den överordnade resursen. Det beror på den överordnade resursen, inte på någon av dess andra underordnade resurser.

I följande exempel visas ett lagringskonto och en filtjänst. Filtjänsten har ett implicit beroende av lagringskontot.

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

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

När det finns ett implicit beroende ska du inte lägga till ett explicit beroende.

Mer information om kapslade resurser finns i Ange namn och typ för underordnade resurser i Bicep.

Explicit beroende

Ett explicit beroende deklareras med dependsOn egenskapen . Egenskapen accepterar en matris med resursidentifierare, så du kan ange fler än ett beroende. Du kan ange ett kapslat resursberoende med hjälp av operatorn:: .

I följande exempel visas en DNS-zon med namnet otherZone som är beroende av en DNS-zon med namnet 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
  ]
}

Även om du kan vara benägen att använda dependsOn för att mappa relationer mellan dina resurser är det viktigt att förstå varför du gör det. Om du till exempel vill dokumentera hur resurser är sammankopplade dependsOn är det inte rätt metod. Efter distributionen behåller resursen inte distributionsberoenden i dess egenskaper, så det finns inga kommandon eller åtgärder som gör att du kan se beroenden. Om du ställer in onödiga beroenden går distributionstiden långsammare eftersom Resource Manager inte kan distribuera resurserna parallellt.

Även om explicita beroenden ibland krävs är behovet av dem sällsynt. I de flesta fall kan du använda ett symboliskt namn för att ange beroendet mellan resurser. Om du upptäcker att du anger explicita beroenden bör du överväga om det finns ett sätt att ta bort det.

Visualisera beroenden

Visual Studio Code innehåller ett verktyg för att visualisera beroendena. Öppna en Bicep-fil i Visual Studio Code och välj visualiserarknappen i det övre vänstra hörnet. Följande skärmbild visar beroenden för en virtuell dator.

Skärmbild av Visual Studio Code Bicep-resursvisualiseraren

Nästa steg

Syntaxen för att distribuera en resurs finns i Resursdeklaration i Bicep.