Bedingte Bereitstellungen in Bicep mit einem if-Ausdruck
Um eine Ressource oder ein Modul optional in Bicep bereitzustellen, verwenden Sie einen if
-Ausdruck. Ein if
-Ausdruck enthält eine Bedingung, die in TRUE oder FALSE aufgelöst wird. Wenn die if
-Bedingung TRUE ist, wird die Ressource bereitgestellt. Wenn der Wert FALSE ist, wird die Ressource nicht erstellt. Der Wert kann nur auf die gesamte Ressource bzw. auf das gesamte Modul angewendet werden.
Hinweis
Die bedingte Bereitstellung wird nicht an untergeordnete Ressourcen weitergegeben. Wenn Sie eine Ressource und ihre untergeordneten Ressourcen bedingt bereitstellen möchten, müssen Sie dieselbe Bedingung auf jeden Ressourcentyp anwenden.
Schulungsressourcen
Wenn Sie Bedingungen lieber anhand einer Schritt-für-Schritt-Anleitung lernen möchten, lesen Sie Flexible Bizeps-Vorlagen mithilfe von Bedingungen und Schleifen erstellen.
Definieren der Bedingung für die Bereitstellung
In Bicep können Sie eine Ressource bedingt bereitstellen, indem Sie einen Parameter übergeben, der angibt, ob die Ressource bereitgestellt ist. Sie testen die Bedingung mit einem if
-Ausdruck in der Ressourcendeklaration. Das folgende Beispiel zeigt die Syntax für einen if
-Ausdruck in einer Bicep-Datei. Dieser Ausdruck dient zur bedingungsbasierten Bereitstellung einer DNS-Zone. Wenn deployZone
gleich true
ist, wird die DNS-Zone bereitgestellt. Wenn deployZone
gleich false
ist, wird die Bereitstellung der DNS-Zone übersprungen.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Im nächsten Beispiel wird ein Modul bedingt bereitgestellt.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Bedingungen können mit Abhängigkeitsdeklarationen verwendet werden. Bei expliziten Abhängigkeiten entfernt Azure Resource Manager sie automatisch aus den erforderlichen Abhängigkeiten, wenn die Ressource nicht bereitgestellt wird. Bei impliziten Abhängigkeiten kann zwar auf eine Eigenschaft einer bedingten Ressource verwiesen werden, dies kann allerdings einen Bereitstellungsfehler zur Folge haben.
Neue oder vorhandene Ressource
Sie können bedingte Bereitstellung verwenden, um eine neue Ressource zu erstellen oder eine vorhandene zu verwenden. Im folgenden Beispiel wird gezeigt, wie ein neues Speicherkonto bereitgestellt oder ein vorhandenes Speicherkonto verwendet wird.
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)
Wenn der Parameter newOrExisting
auf new festgelegt ist, wird die Bedingung zu „true“ ausgewertet. Das Speicherkonto wird bereitgestellt. Andernfalls wird das vorhandene Speicherkonto verwendet.
Warnung
Wenn Sie auf eine bedingt bereitgestellte Ressource verweisen, die nicht bereitgestellt wird. Sie erhalten eine Fehlermeldung, die besagt, dass die Ressource in der Vorlage nicht definiert ist.
Laufzeitfunktionen
Bei Verwendung einer Funktion vom Typ reference oder list mit einer Ressource, die bedingt bereitgestellt wird, wird die Funktion auch dann ausgewertet, wenn die Ressource nicht bereitgestellt wird. Es wird eine Fehlermeldung angezeigt, wenn die Funktion auf eine nicht vorhandene Ressource verweist.
Verwenden Sie den Operator Bedingter Ausdruck ?:, um sicherzustellen, dass die Funktion nur für Bedingungen ausgewertet wird, wenn die Ressource bereitgestellt wird. In der folgenden Beispielvorlage wird gezeigt, wie Sie diese Funktion mit Ausdrücken verwenden, die nur bedingt gültig sind.
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ächste Schritte
- Sehen Sie sich das Lernmodul Erstellen flexibler Bizeps-Vorlagen mithilfe von Bedingungen und Schleifen an.
- Empfehlungen zum Erstellen von Bicep-Dateien finden Sie unter Bewährte Methoden für Bicep.
- Informationen zum Erstellen mehrerer Instanzen einer Ressource finden Sie unter Iterative Schleifen in Bicep.