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 exampleDnsZone
elementu . Zasób o nazwie otherResource
jest niejawnie zależny od exampleDnsZone
elementu .
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
}
}
Zagnieżdżony zasób ma również niejawną zależność od jego zasobu zawierającego.
resource myParent 'My.Rp/parentType@2024-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@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
}
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@2023-07-01-preview' = {
name: 'demoZone1'
location: 'global'
}
resource otherZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
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.
Następne kroki
Składnia umożliwiająca wdrożenie zasobu można znaleźć w temacie Deklaracja zasobu w Bicep.