Ćwiczenie — dodawanie logiki warunkowej do szablonu usługi ARM
W poprzednich ćwiczeniach pracowaliśmy z maszynami wirtualnymi z systemem Linux. W tym miejscu zmienisz odrobinę ustawienia i skoncentrujesz się na zarządzaniu kontami magazynu.
Załóżmy, że masz trzy środowiska, które należy wdrożyć w: Dev, Staging i Production.
- Środowisko deweloperskie to pierwsze miejsce, w którym łączą się wszystkie elementy wymagane przez aplikację. To środowisko może obejmować serwery sieci Web, moduł równoważenia obciążenia i bazę danych.
- Środowisko przejściowe to miejsce, w którym testy końcowe są wykonywane przed udostępnieniem nowych funkcji aplikacji użytkownikom końcowym.
- Środowisko produkcyjne jest miejscem, w którym użytkownicy końcowi uzyskują dostęp do aplikacji.
Podczas przechodzenia ze środowiska deweloperskiego do produkcyjnego potrzebna jest dodatkowa infrastruktura. Na przykład w środowisku produkcyjnym wymagane jest dodatkowe konto magazynu, które nie jest potrzebne w poprzednich środowiskach.
W tym miejscu możesz użyć warunku, aby sterować, kiedy konto magazynu ma zostać ustanowione. Dzięki temu możesz obsługiwać poszczególne środowiska infrastruktury z tego samego szablonu usługi ARM.
Tworzenie szablonu usługi ARM
W tym miejscu utworzysz szablon usługi Azure Resource Manager (ARM), który definiuje zasób konta magazynu.
Szablon definiuje również dwa parametry:
environment
: nazwa bieżącego środowiska.storageAccountName
: nazwa konta magazynu.
Parametr environment
może mieć jedną z trzech wartości: dev
, staging
lub production
. Warunek aprowiduje konto magazynu tylko wtedy, gdy parametr environment
równa się production
.
W programie Visual Studio Code utwórz plik o nazwie condition.json w tym samym katalogu, który zawiera plik azuredeploy.json.
Dodaj tę zawartość do condition.json:
{ "$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": {} }
Tutaj wdrożysz szablon usługi ARM z konstrukcją warunkową przy użyciu programu PowerShell i modułu Az.
Inicjowanie ustanowienia środowiska deweloperskiego
W tym miejscu wdrożysz szablon usługi ARM do środowiska deweloperskiego. W tym celu należy ustawić parametr szablonu environment
na wartość dev
.
Ponieważ warunek aprowiduje konto magazynu tylko wtedy, gdy parametr environment
równa się production
, oczekujesz, że szablon nie aprowiduje konta magazynu. Innymi słowy oczekujesz, że zasoby zawarte we wdrożeniu są zerowe.
Utwórz zmienną programu PowerShell, która zawiera nazwę konta magazynu.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
Nazwy kont magazynu muszą być unikatowe. Część
Get-Random
gwarantuje, że nazwa konta magazynu zostanie zakończona losową serią liczb.Uruchom następujące
New-AzResourceGroupDeployment
polecenie, aby wdrożyć szablon w środowisku deweloperskim:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
Weryfikowanie wdrożenia w środowisku deweloperskim
Należy pamiętać, że zgodnie z oczekiwaniami szablon nie ma ustanowić konta magazynu.
Aby sprawdzić ten fakt, uruchom polecenie Get-AzStorageAccount
, aby sprawdzić, czy nazwa konta magazynu jest już w użyciu.
Uruchom polecenie Get-AzStorageAccount
.
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Dane wyjściowe będą wyglądać mniej więcej tak:
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
Oznacza to, że konto magazynu nie zostało jeszcze aprowidowane. Jest to zgodne z oczekiwaniami, ponieważ nie nastąpiło jeszcze wdrożenie w środowisku produkcyjnym.
Ustanawianie środowiska produkcyjnego
W tym miejscu wdrażasz szablon usługi ARM w środowisku produkcyjnym, podobnie jak w przypadku środowiska deweloperskiego.
Dla przypomnienia, warunek w szablonie wygląda tak:
"condition": "[equals(parameters('environment'),'production')]"
Aby wyzwolić ten warunek, należy ustawić parametr szablonu environment
na wartość production
.
Uruchom następujące New-AzResourceGroupDeployment
polecenie, aby wdrożyć szablon w środowisku produkcyjnym:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
Weryfikowanie wdrożenia w środowisku produkcyjnym
Tym razem zgodnie z oczekiwaniami szablon ma ustanowić konto magazynu.
Aby zweryfikować ten fakt, uruchom ponownie polecenie Get-AzStorageAccount
w celu sprawdzenia, czy nazwa konta magazynu jest w użyciu.
Uruchom następujące polecenie Get-AzStorageAccount
:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
Tym razem uzyskasz różne inne dane wyjściowe. Zamiast komunikatu o błędzie są wyświetlane dane wyjściowe tej tabeli, które przedstawiają informacje o zasobie konta magazynu:
Dane wyjściowe będą wyglądać mniej więcej tak:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
Te wartości informują o tym, że konto magazynu zostało ustanowione zgodnie z oczekiwaniami.
Chociaż jest to podstawowy przykład, ilustruje on wdrażanie na podstawie warunku.
W praktyce środowiska deweloperskie, przejściowei produkcyjne mogą zawierać dodatkowe zasoby platformy Azure, które będą obsługiwać potrzeby obliczeniowe, sieciowe i magazynowe. Każde środowisko prawdopodobnie będzie zarządzane za pomocą własnej grupy zasobów, aby można było je ustanowić i traktować jako pojedynczą jednostkę.
Tworzenie szablonu usługi ARM
W tym miejscu utworzysz szablon usługi Azure Resource Manager (ARM), który definiuje zasób konta magazynu.
Szablon definiuje również dwa parametry:
environment
: nazwa bieżącego środowiska.storageAccountName
: nazwa konta magazynu.
Parametr environment
może mieć jedną z trzech wartości: dev
, staging
lub production
. Warunek aprowiduje konto magazynu tylko wtedy, gdy parametr environment
równa się production
.
W programie Visual Studio Code utwórz plik o nazwie condition.json w tym samym katalogu, który zawiera plik azuredeploy.json.
Dodaj tę zawartość do condition.json:
{ "$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": {} }
Inicjowanie ustanowienia środowiska deweloperskiego
W tym miejscu wdrożysz szablon usługi ARM do środowiska deweloperskiego. W tym celu należy ustawić parametr szablonu environment
na wartość dev
.
Ponieważ warunek aprowiduje konto magazynu tylko wtedy, gdy parametr environment
równa się production
, oczekujesz, że szablon nie aprowiduje konta magazynu. Innymi słowy oczekujesz, że zasoby zawarte we wdrożeniu są zerowe.
Utwórz zmienną Bash, która zawiera nazwę konta magazynu.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
Nazwy kont magazynu muszą być unikatowe. Część
$RANDOM
gwarantuje, że nazwa konta magazynu zostanie zakończona losową serią liczb.Uruchom następujące
az deployment group create
polecenie, aby wdrożyć szablon w środowisku deweloperskim:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
Weryfikowanie wdrożenia w środowisku deweloperskim
Należy pamiętać, że zgodnie z oczekiwaniami szablon nie ma ustanowić konta magazynu.
Aby sprawdzić ten fakt, uruchom polecenie az storage account check-name
, aby sprawdzić, czy nazwa konta magazynu jest już w użyciu.
Uruchom następujące polecenie az storage account check-name
:
az storage account check-name --name $STORAGE_ACCT_NAME
Zostaną wyświetlone następujące dane:
{
"message": null,
"nameAvailable": true,
"reason": null
}
Wartość nameAvailable
jest równa true
, co oznacza, że nazwa konta magazynu jest nadal dostępna i nie została jeszcze aprowidowana. Jest to zgodne z oczekiwaniami, ponieważ nie nastąpiło jeszcze wdrożenie w środowisku produkcyjnym.
Ustanawianie środowiska produkcyjnego
W tym miejscu wdrożysz szablon usługi ARM w środowisku produkcyjnym, podobnie jak w przypadku środowiska deweloperskiego.
Dla przypomnienia, warunek w szablonie wygląda tak:
"condition": "[equals(parameters('environment'),'production')]"
Aby wyzwolić ten warunek, należy ustawić parametr szablonu environment
na wartość production
.
Uruchom następujące az deployment group create
polecenie, aby wdrożyć szablon w środowisku produkcyjnym:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
Weryfikowanie wdrożenia w środowisku produkcyjnym
Tym razem zgodnie z oczekiwaniami szablon ma ustanowić konto magazynu.
Aby zweryfikować ten fakt, uruchom ponownie polecenie az storage account check-name
w celu sprawdzenia, czy nazwa konta magazynu jest w użyciu.
Uruchom następujące polecenie az storage account check-name
:
az storage account check-name --name $STORAGE_ACCT_NAME
Dane wyjściowe będą wyglądać mniej więcej tak:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
Te wartości informują o tym, że konto magazynu zostało ustanowione zgodnie z oczekiwaniami.
Chociaż jest to podstawowy przykład, ilustruje on wdrażanie na podstawie warunku.
W praktyce środowiska deweloperskie, przejściowei produkcyjne mogą zawierać dodatkowe zasoby platformy Azure, które będą obsługiwać potrzeby obliczeniowe, sieciowe i magazynowe. Każde środowisko prawdopodobnie będzie zarządzane za pomocą własnej grupy zasobów, aby można było je ustanowić i traktować jako pojedynczą jednostkę.