Hinzufügen von bedingter Logik zu ARM-Vorlagen
Möglicherweise müssen Sie eine Ressource unter bestimmten Bedingungen optional bereitstellen. Ein häufiger Fall ist das Hinzufügen eines Load Balancers zu einer VM. Angenommen, Sie betreiben eine E-Commerce-Website und möchten sicherstellen, dass die Website den zunehmenden Datenverkehr wegen eines speziellen Sonderangebots verarbeiten kann. Ein Load Balancer ist ein Ressourcentyp, den Sie einer VM zuordnen können. Indem Sie eine Regel bedingt hinzufügen, aktivieren oder deaktivieren Sie die Anwendung des Load Balancers auf die betreffende VM.
Stellen Sie sich die folgenden Situationen vor:
- Bereits vorhandene Ressource. Wenn Sie eine Ressource in einer Vorlage angeben und bereitstellen, gibt es zwei Möglichkeiten. Entweder wird die Ressource bereitgestellt, oder sie wird nicht bereitgestellt, wenn sie bereits vorhanden ist. Die Überprüfung, ob eine Ressource vorhanden ist, übernimmt Azure Resource Manager für Sie. Dies geschieht implizit. Die Frage ist, ob Sie diesen Mechanismus zu Ihrem Vorteil nutzen können, wenn Sie überlegen, wie Sie das Vorhandensein einer Ressource überprüfen können.
- Verzweigungslogik. Je nachdem, welche Parameter Sie an eine Vorlage übergeben, möchten Sie zum Zeitpunkt der Bereitstellung einen jeweils anderen Satz von Ressourcen bereitstellen. Was Sie auf diese Weise ausdrücken, wird als Verzweigungslogik bezeichnet. Wenn der Parameter einen bestimmten Typ von Wert aufweist, wird der erste Branch ausgewählt. Andernfalls wird der zweite oder dritte Branch ausgewählt, der bereitgestellt werden soll. Die Verzweigungslogik wird auf diese Weise fortgesetzt.
Beide oben genannten Situationen stellen Szenarien dar, in denen bedingte Logik angewendet wird. Die Logik befindet sich entweder im Resource Manager-System selbst, oder Sie müssen sie explizit ausdrücken.
Bedingte Bereitstellung
Mit dem condition
-Konstrukt können Sie ausdrücken, ob eine Ressource bereitgestellt werden soll oder nicht. Hierbei handelt es sich um eine Eigenschaft mit dem Wert true
oder false
, die an ein Ressourcenelement angefügt wird. Ein condition
-Konstrukt sieht in der Regel wie der folgende JSON-Code in ihrer Vorlage aus:
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
Im obigen JSON-Code wird einer Ressource eine condition
-Eigenschaft hinzugefügt. Der Wert der Eigenschaft wird als Wert des Parameters shouldDeploy
ausgewertet.
Auswertung
Es gibt zwei Möglichkeiten, wie das condition
-Konstrukt ausgewertet werden kann. Die Kenntnis dieser beiden Möglichkeiten kann sich darauf auswirken, wie Sie Ihre bedingte Logik ausdrücken. Die folgenden beiden Möglichkeiten bestehen:
Der Wert ist TRUE oder FALSE. Betrachten Sie beispielsweise das folgende Konstrukt:
"condition": "[parameters('deployAccount')]"
Der Wert
deployAccount
ist ein Parameter, dessen Wert zum Zeitpunkt der Bereitstellung übergeben werden kann. Ist dies nicht möglich, wird auf den Standardwert zurückgegriffen. Unabhängig vom verwendeten Ansatz ist der Wert streng FALSE oder TRUE. Wenn Sie versuchen, einen anderen Wert zuzuweisen, der kein boolescher Wert ist, führt dies zu einem Fehler.Es gibt einen Ausdruck, der in TRUE/FALSE ausgewertet wird. Statt dem
condition
-Konstrukt einen strengen TRUE/FALSE-Wert zuzuweisen, verwenden Sie hier die integrierte Vorlagenfunktionequals(arg1, arg2)
.arg1
muss gleicharg2
sein, damit die Funktion in TRUE ausgewertet wird. Ihrcondition
-Konstrukt kann nun stattdessen wie folgt ausgedrückt werden:"condition": "[equals(parameters('newOrExisting'),'new')]"
Wenn Sie die
equals()
-Funktion verwenden, muss der Wert, den Sie an einen Parameter übergeben, nicht mehrtrue
oderfalse
sein. Er muss jedoch mit dem zweiten Argument in derequals()
-Funktion übereinstimmen. Im JSON-Beispiel oben muss der Wert desnewOrExisting
-Parameters der Zeichenfolgenew
entsprechen, damit die Funktion intrue
ausgewertet wird.