Übung: Hinzufügen von bedingter Logik zu Ihrer ARM-Vorlage
In den vorherigen Übungen haben Sie mit virtuellen Linux-Computern gearbeitet. Hier verlagern Sie den Fokus ein wenig und konzentrieren sich auf die Verwaltung von Speicherkonten.
Nehmen wir an, dass Sie drei Umgebungen nutzen, in denen Bereitstellungen erfolgen sollen: dev, staging und production.
- Die dev-Umgebung ist der erste Ort, an dem alles, was Ihre Anwendung benötigt, zusammenkommt. Diese Umgebung kann Webserver, einen Load Balancer und eine Datenbank enthalten.
- In der staging-Umgebung werden abschließende Tests durchgeführt, bevor Endbenutzern neue Anwendungsfunktionen zur Verfügung gestellt werden.
- Die production-Umgebung ist der Ort, an dem Endbenutzer auf Ihre Anwendung zugreifen.
Wenn Sie von dev zu production wechseln, benötigen Sie zusätzliche Infrastruktur. Beispielsweise benötigen Sie in production ein zusätzliches Speicherkonto, das Sie in den vorherigen Umgebungen nicht benötigen.
Hier verwenden Sie eine Bedingung, um zu steuern, wann ein Speicherkonto bereitgestellt wird. Auf diese Weise können Sie die einzelnen Infrastrukturumgebungen mit der gleichen ARM-Vorlage unterstützen.
Erstellen der ARM-Vorlage
Hier erstellen Sie eine ARM-Vorlage (Azure Resource Manager), die eine Speicherkontoressource definiert.
Die Vorlage definiert auch zwei Parameter:
environment
: Der Name der aktuellen Umgebung.storageAccountName
: Der Name des Speicherkontos.
environment
kann einen von drei Werten aufweisen: dev
, staging
oder production
. Mit der Bedingung wird das Speicherkonto nur dann bereitgestellt, wenn environment
gleich production
ist.
Erstellen Sie in Visual Studio Code eine Datei mit dem Namen condition.json in demselben Verzeichnis, das azuredeploy.json enthält.
Fügen Sie diesen Inhalt condition.json hinzu:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
Hier stellen Sie mithilfe von PowerShell und dem Az-Modul mit einem condition-Konstrukt eine ARM-Vorlage bereit.
Bereitstellen der Entwicklungsumgebung
Hier stellen Sie die ARM-Vorlage in der Umgebung dev bereit. Hierzu legen Sie den environment
-Vorlagenparameter auf dev
fest.
Da die Bedingung das Speicherkonto nur dann bereitstellt, wenn environment
production
entspricht, erwarten Sie, dass die Vorlage das Speicherkonto nicht bereitstellt. Anders ausgedrückt: Sie erwarten eine Bereitstellung, die keine Ressourcen enthält.
Erstellen Sie eine PowerShell-Variable, die den Namen des Speicherkontos enthält.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
Namen von Speicherkonten müssen eindeutig sein. Der
Get-Random
-Teil stellt sicher, dass der Speicherkontoname mit einer zufälligen Reihe von Zahlen endet.Führen Sie den folgenden Befehl
New-AzResourceGroupDeployment
aus, um die Vorlage in der dev-Umgebung bereitzustellen:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
Überprüfen der Bereitstellung in „dev“
Denken Sie daran, dass Sie davon ausgehen, dass die Vorlage das Speicherkonto nicht bereitgestellt hat.
Um dies zu überprüfen, führen Sie den Befehl Get-AzStorageAccount
aus, um zu überprüfen, ob der Name des Speicherkontos bereits verwendet wird.
Führen Sie den Befehl Get-AzStorageAccount
aus:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Die Ausgabe sieht ungefähr wie folgt aus:
Get-AzStorageAccount: The Resource 'Microsoft.Storage/storageAccounts/tailwindsa4736629' under resource group '<rgn>name of resource group</rgn>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix
Sie weist darauf hin, dass das Speicherkonto noch nicht bereitgestellt wurde. Dies ist zu erwarten, da Sie noch keine Bereitstellung für die Umgebung „production“ ausgeführt haben.
Bereitstellen der Umgebung „production“
Hier stellen Sie die ARM-Vorlage in der Umgebung production bereit, ähnlich wie bei der Umgebung dev.
Als Auffrischung: So sieht die Bedingung in der Vorlage aus:
"condition": "[equals(parameters('environment'),'production')]"
Um diese Bedingung auszulösen, legen Sie den environment
-Vorlagenparameter auf production
fest.
Führen Sie den folgenden Befehl New-AzResourceGroupDeployment
aus, um die Vorlage in der Umgebung production bereitzustellen:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
Überprüfen der Bereitstellung in „production“
Dieses Mal erwarten Sie, dass die Vorlage das Speicherkonto bereitgestellt hat.
Um dies zu überprüfen, führen Sie den Befehl Get-AzStorageAccount
erneut aus, um zu bestätigen, dass der Name des Speicherkontos verwendet wird.
Führen Sie den folgenden Befehl Get-AzStorageAccount
aus:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Dieses Mal erhalten Sie eine andere Ausgabe. Anstelle einer Fehlermeldung wird diese Tabellenausgabe angezeigt, in der Informationen zu Ihrer Speicherkontoressource enthalten sind:
Die Ausgabe sieht ungefähr wie folgt aus:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
Diese Werte zeigen Ihnen, dass das Speicherkonto erwartungsgemäß bereitgestellt wurde.
Obwohl es sich hierbei um ein einfaches Beispiel handelt, können Sie erkennen, wie eine Bereitstellung basierend auf einer Bedingung erfolgt.
In der Praxis enthalten Ihre Umgebungen dev, staging und production zusätzliche Azure-Ressourcen zur Unterstützung ihrer Compute-, Netzwerk- und Speicheranforderungen. Jede Umgebung wird wahrscheinlich über eine eigene Ressourcengruppe verwaltet, damit Sie als einzelne Einheit bereitgestellt und behandelt werden kann.
Erstellen der ARM-Vorlage
Hier erstellen Sie eine ARM-Vorlage (Azure Resource Manager), die eine Speicherkontoressource definiert.
Die Vorlage definiert auch zwei Parameter:
environment
: Der Name der aktuellen Umgebung.storageAccountName
: Der Name des Speicherkontos.
environment
kann einen von drei Werten aufweisen: dev
, staging
oder production
. Mit der Bedingung wird das Speicherkonto nur dann bereitgestellt, wenn environment
gleich production
ist.
Erstellen Sie in Visual Studio Code eine Datei mit dem Namen condition.json in demselben Verzeichnis, das azuredeploy.json enthält.
Fügen Sie diesen Inhalt condition.json hinzu:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": [ "dev", "staging", "production" ], "metadata": { "description": "a value that represents the current environment" } }, "storageAccountName": { "type": "string", "metadata": { "description": "a name for the account" } } }, "functions": [], "variables": {}, "resources": [ { "condition": "[equals(parameters('environment'),'production')]", "name": "[parameters('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "tags": { "displayName": "[parameters('storageAccountName')]" }, "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} }
Bereitstellen der Entwicklungsumgebung
Hier stellen Sie die ARM-Vorlage in der Umgebung dev bereit. Hierzu legen Sie den environment
-Vorlagenparameter auf dev
fest.
Da die Bedingung das Speicherkonto nur dann bereitstellt, wenn environment
production
entspricht, erwarten Sie, dass die Vorlage das Speicherkonto nicht bereitstellt. Anders ausgedrückt: Sie erwarten eine Bereitstellung, die keine Ressourcen enthält.
Erstellen Sie eine Bash-Variable, die den Namen des Speicherkontos enthält.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
Namen von Speicherkonten müssen eindeutig sein. Der
$RANDOM
-Teil stellt sicher, dass der Speicherkontoname mit einer zufälligen Reihe von Zahlen endet.Führen Sie den folgenden Befehl
az deployment group create
aus, um die Vorlage in der dev-Umgebung bereitzustellen:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
Überprüfen der Bereitstellung in „dev“
Denken Sie daran, dass Sie davon ausgehen, dass die Vorlage das Speicherkonto nicht bereitgestellt hat.
Um dies zu überprüfen, führen Sie den Befehl az storage account check-name
aus, um zu überprüfen, ob der Name des Speicherkontos bereits verwendet wird.
Führen Sie den folgenden Befehl az storage account check-name
aus:
az storage account check-name --name $STORAGE_ACCT_NAME
Folgendes wird angezeigt:
{
"message": null,
"nameAvailable": true,
"reason": null
}
Der Wert für nameAvailable
ist true
. Dies bedeutet, dass der Name des Speicherkontos noch verfügbar ist und noch nicht bereitgestellt wurde. Dies ist zu erwarten, da Sie noch keine Bereitstellung für die Umgebung „production“ ausgeführt haben.
Bereitstellen der Umgebung „production“
Hier stellen Sie die ARM-Vorlage in der Umgebung production bereit, ähnlich wie bei der Umgebung dev.
Als Auffrischung: So sieht die Bedingung in der Vorlage aus:
"condition": "[equals(parameters('environment'),'production')]"
Um diese Bedingung auszulösen, legen Sie den environment
-Vorlagenparameter auf production
fest.
Führen Sie den folgenden Befehl az deployment group create
aus, um die Vorlage in der Umgebung production bereitzustellen:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
Überprüfen der Bereitstellung in „production“
Dieses Mal erwarten Sie, dass die Vorlage das Speicherkonto bereitgestellt hat.
Um dies zu überprüfen, führen Sie den Befehl az storage account check-name
erneut aus, um zu bestätigen, dass der Name des Speicherkontos verwendet wird.
Führen Sie den folgenden Befehl az storage account check-name
aus:
az storage account check-name --name $STORAGE_ACCT_NAME
Die Ausgabe sieht ungefähr wie folgt aus:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
Diese Werte zeigen Ihnen, dass das Speicherkonto erwartungsgemäß bereitgestellt wurde.
Obwohl es sich hierbei um ein einfaches Beispiel handelt, können Sie erkennen, wie eine Bereitstellung basierend auf einer Bedingung erfolgt.
In der Praxis enthalten Ihre Umgebungen dev, staging und production zusätzliche Azure-Ressourcen zur Unterstützung ihrer Compute-, Netzwerk- und Speicheranforderungen. Jede Umgebung wird wahrscheinlich über eine eigene Ressourcengruppe verwaltet, damit Sie als einzelne Einheit bereitgestellt und behandelt werden kann.