Ressourcenabhängigkeiten in Bicep

Beim Bereitstellen von Ressourcen müssen Sie möglicherweise sicherstellen, dass einige Ressourcen vor anderen bereitgestellt werden. So benötigen Sie beispielsweise einen logischen SQL-Server, bevor Sie eine Datenbank bereitstellen. Diese Beziehung richten Sie ein, indem Sie eine Ressource als von einer anderen Ressource abhängig kennzeichnen. Es gibt zwei Möglichkeiten, die Reihenfolge der Ressourcenbereitstellung zu bestimmen: durch eine implizite Abhängigkeit und eine explizite Abhängigkeit.

Azure Resource Manager wertet die Abhängigkeiten zwischen den Ressourcen aus und stellt sie in der Reihenfolge ihrer Abhängigkeiten bereit. Wenn Ressourcen nicht voneinander abhängig sind, stellt Resource Manager sie parallel bereit. Sie müssen nur Abhängigkeiten für Ressourcen definieren, die in der gleichen Bicep-Datei bereitgestellt werden.

Implizite Abhängigkeit

Eine implizite Abhängigkeit wird erstellt, wenn eine Ressourcendeklaration auf eine andere Ressource in derselben Bereitstellung verweist. Im folgenden Beispiel ruft otherResource eine Eigenschaft von exampleDnsZone ab. Die Ressource namens otherResource ist implizit abhängig von 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
  }
}

Eine geschachtelte Ressource verfügt ebenfalls über eine implizite Abhängigkeit von ihrer enthaltenden Ressource.

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

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

Eine Ressource, die die übergeordnete Eigenschaft enthält, ist implizit von der übergeordneten Ressource abhängig. Sie hängt von der übergeordneten Ressource und nicht von den anderen untergeordneten Ressourcen ab.

Im folgenden Beispiel werden ein Speicherkonto und ein Dateidienst gezeigt. Der Dateidienst ist implizit vom Speicherkonto abhängig.

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
}

Wenn eine implizite Abhängigkeit besteht, fügen Sie keine explizite Abhängigkeit hinzu.

Weitere Informationen zu geschachtelten Ressourcen finden Sie unter Festlegen von Name und Typ für untergeordnete Ressourcen in Bicep.

Explizite Abhängigkeit

Eine explizite Abhängigkeit wird mit der dependsOn-Eigenschaft deklariert. Die Eigenschaft akzeptiert ein Array von Ressourcenbezeichnern, sodass Sie mehr als eine Abhängigkeit angeben können. Sie können eine geschachtelte Ressourcenabhängigkeit mithilfe des ::-Operators angeben.

Das folgende Beispiel zeigt eine DNS-Zone namens otherZone, die von einer DNS-Zone namens dnsZone abhängt:

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
  ]
}

Sie können Beziehungen zwischen Ihren Ressourcen mithilfe von dependsOn zuordnen, dabei sollte Ihnen jedoch bewusst sein, welchen Zweck diese Zuordnung erfüllt. Um beispielsweise zu dokumentieren, wie Ressourcen miteinander verbunden sind, ist dependsOn nicht der richtige Ansatz. Nach der Bereitstellung behält die Ressource keine Bereitstellungsabhängigkeiten in ihren Eigenschaften bei, sodass keine Befehle oder Vorgänge mehr vorhanden sind, mit denen Sie Abhängigkeiten anzeigen können. Das Festlegen unnötiger Abhängigkeiten verlangsamt die Bereitstellung, da Resource Manager diese Ressourcen nicht gleichzeitig bereitstellen kann.

Explizite Abhängigkeiten sind zwar manchmal erforderlich, dies ist aber selten der Fall. In den meisten Fällen können Sie einen symbolischen Verweis verwenden, um die Abhängigkeit zwischen Ressourcen zu implizieren. Wenn Sie selbst explizite Abhängigkeiten festlegen, sollten Sie berücksichtigen, ob es eine Möglichkeit gibt, sie zu entfernen.

Visualisieren von Abhängigkeiten

Visual Studio Code stellt ein Tool zum Visualisieren der Abhängigkeiten zur Verfügung. Öffnen Sie eine Bicep-Datei in Visual Studio Code, und klicken Sie in der oberen linken Ecke auf die Schaltfläche „Schnellansicht“. Der folgende Screenshot zeigt die Abhängigkeiten eines virtuellen Computers.

Screenshot: Schnellansicht der Bicep-Ressourcen in Visual Studio Code

Nächste Schritte

Die Syntax zum Bereitstellen einer Ressource finden Sie unter Ressourcendeklaration in Bicep.