Wdrożenia warunkowe w Bicep z wyrażeniem if
Aby opcjonalnie wdrożyć zasób lub moduł w środowisku Bicep, użyj if
wyrażenia . Wyrażenie if
zawiera warunek, który rozpoznaje wartość true lub false. Jeśli if
warunek ma wartość true, zasób jest wdrażany. Gdy wartość jest fałsz, zasób nie jest tworzony. Wartość można zastosować tylko do całego zasobu lub modułu.
Uwaga
Wdrożenie warunkowe nie jest kaskadowe dla zasobów podrzędnych. Jeśli chcesz warunkowo wdrożyć zasób i jego zasoby podrzędne, musisz zastosować ten sam warunek do każdego typu zasobu.
Zasoby szkoleniowe
Jeśli wolisz dowiedzieć się więcej o warunkach za pomocą szczegółowych wskazówek, zobacz Tworzenie elastycznych szablonów Bicep przy użyciu warunków i pętli.
Definiowanie warunku wdrożenia
W środowisku Bicep można warunkowo wdrożyć zasób, przekazując parametr określający, czy zasób jest wdrażany. Warunek należy przetestować za pomocą if
wyrażenia w deklaracji zasobu. Poniższy przykład przedstawia składnię if
wyrażenia w pliku Bicep. Warunkowo wdraża strefę DNS. Gdy deployZone
wartość to true
, wdraża strefę DNS. Gdy deployZone
wartość to false
, pomija wdrażanie strefy DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Następny przykład warunkowo wdraża moduł.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Warunki mogą być używane z deklaracjami zależności. W przypadku jawnych zależności usługa Azure Resource Manager automatycznie usuwa je z wymaganych zależności, gdy zasób nie jest wdrożony. W przypadku zależności niejawnych odwołanie do właściwości zasobu warunkowego jest dozwolone, ale może spowodować błąd wdrożenia.
Nowy lub istniejący zasób
Za pomocą wdrożenia warunkowego można utworzyć nowy zasób lub użyć istniejącego. W poniższym przykładzie pokazano, jak wdrożyć nowe konto magazynu lub użyć istniejącego konta magazynu.
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
name: storageAccountName
}
output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)
Gdy parametr newOrExisting
jest ustawiony na nowy, warunek ma wartość true. Konto magazynu jest wdrażane. W przeciwnym razie jest używane istniejące konto magazynu.
Ostrzeżenie
Jeśli odwołujesz się do warunkowo wdrożonego zasobu, który nie jest wdrożony. Zostanie wyświetlony błąd informujący, że zasób nie jest zdefiniowany w szablonie.
Funkcje środowiska uruchomieniowego
Jeśli używasz funkcji odwołania lub listy z zasobem, który jest wdrażany warunkowo, funkcja jest oceniana nawet wtedy, gdy zasób nie jest wdrożony. Jeśli funkcja odwołuje się do zasobu, który nie istnieje, występuje błąd.
Użyj operatora wyrażenia warunkowego ?: aby upewnić się, że funkcja jest oceniana tylko pod kątem warunków, gdy zasób jest wdrożony. Poniższy przykładowy szablon pokazuje, jak używać tej funkcji z wyrażeniami, które są tylko warunkowo prawidłowe.
param vmName string
param location string
param logAnalytics string = ''
resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2024-03-01' = if (!empty(logAnalytics)) {
name: '${vmName}/omsOnboarding'
location: location
properties: {
publisher: 'Microsoft.EnterpriseCloud.Monitoring'
type: 'MicrosoftMonitoringAgent'
typeHandlerVersion: '1.0'
autoUpgradeMinorVersion: true
settings: {
workspaceId: ((!empty(logAnalytics)) ? reference(logAnalytics, '2022-10-01').customerId : null)
}
protectedSettings: {
workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2022-10-01').primarySharedKey : null)
}
}
}
output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')
Następne kroki
- Zapoznaj się z modułem Learn Build flexible Bicep templates by using conditions and loops (Tworzenie elastycznych szablonów Bicep) przy użyciu warunków i pętli.
- Aby uzyskać zalecenia dotyczące tworzenia plików Bicep, zobacz Najlepsze rozwiązania dotyczące Bicep.
- Aby utworzyć wiele wystąpień zasobu, zobacz Iteracyjne pętle w Bicep.