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@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
}
}
En kapslad resurs har också ett implicit beroende av dess innehållande resurs.
resource myParent 'My.Rp/parentType@2024-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@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
}
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@2023-07-01-preview' = {
name: 'demoeZone1'
location: 'global'
}
resource otherZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
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.
Nästa steg
Syntaxen för att distribuera en resurs finns i Resursdeklaration i Bicep.