Zależności zasobów w aplikacji Bicep

Podczas wdrażania zasobów może być konieczne upewnienie się, że niektóre zasoby są wdrażane przed innymi zasobami. Na przykład potrzebny jest logiczny serwer SQL przed wdrożeniem bazy danych. Tę relację należy ustanowić, oznaczając jeden zasób jako zależny od drugiego zasobu. Kolejność wdrażania zasobów jest określana na dwa sposoby: zależność niejawna i jawna zależność

Usługa Azure Resource Manager ocenia zależności między zasobami i wdraża je w kolejności zależnej. Gdy zasoby nie zależą od siebie nawzajem, usługa Resource Manager wdraża je równolegle. Wystarczy zdefiniować zależności dla zasobów wdrożonych w tym samym pliku Bicep.

Zależność niejawna

Zależność niejawna jest tworzona, gdy jedna deklaracja zasobu odwołuje się do innego zasobu w tym samym wdrożeniu. W poniższym przykładzie otherResource pobiera właściwość z exampleDnsZoneelementu . Zasób o nazwie otherResource jest niejawnie zależny od exampleDnsZoneelementu .

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

Zagnieżdżony zasób ma również niejawną zależność od jego zasobu zawierającego.

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

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

Zasób zawierający właściwość nadrzędną ma niejawną zależność od zasobu nadrzędnego. Zależy to od zasobu nadrzędnego, a nie od żadnych innych zasobów podrzędnych.

W poniższym przykładzie pokazano konto magazynu i usługę plików. Usługa plików ma niejawną zależność od konta magazynu.

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
}

Gdy istnieje zależność niejawna, nie dodawaj jawnej zależności.

Aby uzyskać więcej informacji na temat zasobów zagnieżdżonych, zobacz Ustawianie nazwy i typu zasobów podrzędnych w Bicep.

Jawna zależność

Jawna zależność jest zadeklarowana za pomocą dependsOn właściwości . Właściwość akceptuje tablicę identyfikatorów zasobów, dzięki czemu można określić więcej niż jedną zależność. Zależność zagnieżdżonego zasobu można określić za pomocą :: operatora .

W poniższym przykładzie pokazano strefę DNS o nazwie otherZone , która zależy od strefy DNS o nazwie 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
  ]
}

Chociaż może być skłonny używać dependsOn do mapowania relacji między zasobami, ważne jest, aby zrozumieć, dlaczego to robisz. Na przykład dokumentowanie sposobu wzajemnego łączenia dependsOn zasobów nie jest właściwym podejściem. Po wdrożeniu zasób nie zachowuje zależności wdrożenia we właściwościach, dlatego nie ma żadnych poleceń ani operacji, które umożliwiają wyświetlanie zależności. Ustawienie niepotrzebnych zależności spowalnia czas wdrażania, ponieważ Resource Manager nie można wdrożyć tych zasobów równolegle.

Mimo że zależności jawne są czasami wymagane, potrzeba ich jest rzadka. W większości przypadków można użyć nazwy symbolicznej, aby sugerować zależność między zasobami. Jeśli znajdziesz się w ustawieniu jawnych zależności, należy rozważyć, czy istnieje sposób jego usunięcia.

Wizualizowanie zależności

Visual Studio Code udostępnia narzędzie do wizualizowania zależności. Otwórz plik Bicep w Visual Studio Code i wybierz przycisk wizualizatora w lewym górnym rogu. Poniższy zrzut ekranu przedstawia zależności maszyny wirtualnej.

Zrzut ekranu przedstawiający wizualizator zasobów Visual Studio Code Bicep

Następne kroki

Składnia umożliwiająca wdrożenie zasobu można znaleźć w temacie Deklaracja zasobu w Bicep.