Bedingte Bereitstellung in ARM-Vorlagen
Manchmal müssen Sie eine Ressource optional in einer Azure Resource Manager-Vorlage (ARM-Vorlage) bereitstellen. Verwenden Sie das condition
-Element, um anzugeben, ob die Ressource bereitgestellt wird. Der Wert für die Bedingung wird in „true“ oder „false“ aufgelöst. Wenn der Wert TRUE ist, wird die Ressource erstellt. Wenn der Wert FALSE ist, wird die Ressource nicht erstellt. Der Wert kann nur auf die gesamte Ressource angewandt 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.
Tipp
Wir empfehlen Bicep, weil es dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie unter Bedingte Bereitstellungen.
Bereitstellungsbedingung
Sie können einen Parameterwert übergeben, der angibt, ob eine Ressource bereitgestellt wird. Das folgende Beispiel stellt bedingt eine DNS-Zone bereit:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deployZone": {
"type": "bool"
}
},
"functions": [],
"resources": [
{
"condition": "[parameters('deployZone')]",
"type": "Microsoft.Network/dnsZones",
"apiVersion": "2018-05-01",
"name": "myZone",
"location": "global"
}
]
}
Ein komplexeres Beispiel finden Sie unter Logischer Azure SQL-Server.
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.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"newOrExisting": {
"type": "string",
"defaultValue": "new",
"allowedValues": [
"new",
"existing"
]
}
},
"resources": [
{
"condition": "[equals(parameters('newOrExisting'), 'new')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
{
"condition": "[equals(parameters('newOrExisting'), 'existing')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]"
}
],
"outputs": {
"storageAccountId": {
"type": "string",
"value": "[if(equals(parameters('newOrExisting'), 'new'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]"
}
}
}
Wenn der Parameter newOrExisting
auf new festgelegt ist, wird die Bedingung zu „true“ ausgewertet. Das Speicherkonto wird bereitgestellt. Andernfalls wird das vorhandene Speicherkonto verwendet.
Eine vollständige Beispielvorlage, die das condition
-Element verwendet, finden Sie unter VM mit einem neuen oder vorhandenen virtuellen Netzwerk, Speicher und einer neuen oder vorhandenen öffentlichen IP-Adresse.
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 die if-Funktion, um sicherzustellen, dass die Funktion nur für Bedingungen ausgewertet wird, wenn die Ressource bereitgestellt wird. Eine Beispielvorlage, die if
und reference
mit einer bedingt bereitgestellten Ressource verwendet, finden Sie unter der if-Funktion.
Sie legen eine Ressource als abhängig von einer bedingten Ressource fest, wie Sie auch jede andere Ressource festlegen. Wenn eine bedingte Ressource nicht bereitgestellt wurde, entfernt Azure Resource Manager sie automatisch aus den erforderlichen Abhängigkeiten.
Vollständiger Modus
Wenn Sie eine Vorlage mit vollständigem Modus bereitstellen und eine Ressource nicht bereitgestellt wird, weil condition
in FALSE ausgewertet wird, hängt das Ergebnis davon ab, welche REST-API-Version Sie zum Bereitstellen der Vorlage verwenden. Wenn Sie eine frühere Version als 2019-05-10 verwenden, wird die Ressource nicht gelöscht. Bei Version 2019-05-10 oder höher wird die Ressource gelöscht. Die neuesten Versionen von Azure PowerShell und Azure CLI löschen die Ressource, wenn die Bedingung nicht zutrifft.
Nächste Schritte
- Ein Lernmodul, das die bedingte Bereitstellung abdeckt, finden Sie unter Verwalten komplexer Cloud-Bereitstellungen mithilfe erweiterter ARM-Vorlagenfunktionen.
- Empfehlungen zum Erstellen von Vorlagen finden Sie unter Bewährte Methoden für ARM-Vorlagen.
- Informationen, wie mehrere Instanzen einer Ressource erstellt werden, finden Sie unter Ressourceniteration in ARM-Vorlagen.