Villkorsstyrda distributioner i Bicep med if-uttrycket
Om du vill distribuera en resurs eller modul i Bicep använder du if
uttrycket . Ett if
uttryck innehåller ett villkor som matchar sant eller falskt. När villkoret if
är sant distribueras resursen. När värdet är falskt skapas inte resursen. Värdet kan bara tillämpas på hela resursen eller modulen.
Kommentar
Villkorsstyrd distribution överlappar inte underordnade resurser. Om du vill distribuera en resurs villkorligt och dess underordnade resurser måste du använda samma villkor för varje resurstyp.
Utbildningsresurser
Om du hellre vill lära dig mer om villkor via stegvis vägledning kan du läsa Skapa flexibla Bicep-mallar med hjälp av villkor och loopar.
Definiera villkor för distribution
I Bicep kan du villkorligt distribuera en resurs genom att skicka in en parameter som anger om resursen har distribuerats. Du testar villkoret med ett if
uttryck i resursdeklarationen. I följande exempel visas syntaxen för ett if
uttryck i en Bicep-fil. Den distribuerar villkorligt en DNS-zon. När deployZone
är true
distribuerar den DNS-zonen. När deployZone
är false
hoppar den över distributionen av DNS-zonen.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
I nästa exempel distribueras en modul villkorligt.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Villkor kan användas med beroendedeklarationer. För explicita beroenden tar Azure Resource Manager automatiskt bort det från de beroenden som krävs när resursen inte distribueras. För implicita beroenden tillåts att referera till en egenskap för en villkorsstyrd resurs, men det kan orsaka ett distributionsfel.
Ny eller befintlig resurs
Du kan använda villkorsstyrd distribution för att skapa en ny resurs eller använda en befintlig. I följande exempel visas hur du antingen distribuerar ett nytt lagringskonto eller använder ett befintligt lagringskonto.
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)
När parametern newOrExisting
är inställd på ny utvärderas villkoret till sant. Lagringskontot distribueras. Annars används det befintliga lagringskontot.
Varning
Om du refererar till en villkorligt distribuerad resurs som inte har distribuerats. Du får ett felmeddelande om att resursen inte har definierats i mallen.
Körningsfunktioner
Om du använder en referens - eller listfunktion med en resurs som är villkorligt distribuerad utvärderas funktionen även om resursen inte distribueras. Du får ett fel om funktionen refererar till en resurs som inte finns.
Använd villkorsuttrycket ?: operator för att kontrollera att funktionen endast utvärderas för villkor när resursen distribueras. Följande exempelmall visar hur du använder den här funktionen med uttryck som endast är villkorligt giltiga.
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')
Nästa steg
- Granska Learn-modulen Skapa flexibla Bicep-mallar med hjälp av villkor och loopar.
- Rekommendationer om hur du skapar Bicep-filer finns i Metodtips för Bicep.
- Information om hur du skapar flera instanser av en resurs finns i Iterativa loopar i Bicep.