Gyakorlat – Feltételes logika beépítése az ARM-sablonba
Az eddigi gyakorlatokban Linux rendszerű virtuális gépekkel dolgozott. Itt magasabb fokozatra kapcsolhat, és a tárfiókokra fog összpontosítani.
Tegyük fel, hogy három környezettel rendelkezik, amelyeket üzembe kell helyeznie: Dev, Staging és Production.
- A Dev környezet az első, ahol minden együtt lesz, amire az alkalmazásnak szüksége van. Ez a környezet tartalmazhat például több webkiszolgálót, egy terheléselosztót és egy adatbázist.
- A Staging környezet az, ahol a végső tesztelés zajlik, mielőtt az alkalmazás új funkcióit kiadják a végfelhasználók számára.
- A Production az a környezet, ahol a végfelhasználók hozzáférnek az alkalmazáshoz.
A Dev környezetről a Production környezetre való áttéréshez további infrastruktúra szükséges. Az éles Production környezetben szükség van például egy újabb tárfiókra, amelyre az előző környezetekben nem volt szükség.
A következőkben egy feltétellel fogja szabályozni, hogy ki legyen-e építve a tárfiók. Ezáltal lehetővé válik, hogy az összes infrastruktúra-környezetet egyetlen ARM-sablonnal támogassa.
Az ARM-sablon létrehozása
A következőkben egy Azure Resource Manager- =(ARM-) sablont hozhat létre, amely egy tárfiók erőforrást definiál.
A sablon definiál két paramétert is:
environment
: az aktuális környezet neve.storageAccountName
: a tárfiók neve.
Az environment
az alábbi három érték egyikével rendelkezhet: dev
, staging
vagy production
. A feltétel csak akkor építi ki a tárfiókot, ha az environment
értéke production
.
A Visual Studio Code-ban hozzon létre egy condition.json fájlt ugyanabban a könyvtárban, amely az azuredeploy.json fájlt is tartalmazza.
Illessze be ezt a tartalmat a condition.json fájlba:
{ "$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": {} }
A következőkben a PowerShell és az Az modul használatával fog üzembe helyezni egy condition szerkezetet tartalmazó ARM-sablont.
A fejlesztési környezet kiépítése
Most a fejlesztési Dev környezetben fogja üzembe helyezni az ARM-sablont. Ehhez a dev
értékre kell beállítani az environment
sablonparamétert.
Mivel a feltétel csak akkor építi ki a tárfiókot, ha az environment
értéke production
, arra számíthat, hogy a sablon nem építi ki a tárfiókot. Másként fogalmazva az üzembe helyezés várhatóan nulla erőforrást fog tartalmazni.
Hozzon létre egy PowerShell-változót, amely a tárfiók nevét tartalmazza.
$STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
A tárfiókok nevének egyedinek kell lenniük. A
Get-Random
rész biztosítja, hogy a tárfiók neve véletlenszerű számsorozattal végződjön.Futtassa a következő
New-AzResourceGroupDeployment
parancsot a sablon dev környezetben való üzembe helyezéséhez:New-AzResourceGroupDeployment ` -TemplateFile "./condition.json" ` -storageAccountName $STORAGE_ACCT_NAME ` -environment dev
A fejlesztési környezetben történt üzembe helyezés ellenőrzése
A sablontól azt várta, hogy nem építi ki a tárfiókot.
Ennek a ténynek az ellenőrzéséhez futtassa az Get-AzStorageAccount
parancsot, és ellenőrizze, hogy használatban van-e már a tárfiók neve.
Futtassa a Get-AzStorageAccount
parancsot:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
A kimenet az alábbihoz hasonló:
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
Ez azt mutatja, hogy a tárfiók még nem lett kiépítve. Erre számított is, hiszen egyelőre nem helyezte üzembe az éles környezetben.
Az éles környezet kiépítése
Most a Production környezetben fogja üzembe helyezni az ARM-sablont, hasonlóan ahhoz, ahogyan a Dev környezetben tette.
Emlékeztetőül, a sablonban szereplő feltétel a következő:
"condition": "[equals(parameters('environment'),'production')]"
A feltétel aktiválásához állítsa be az environment
sablonparamétert a production
értékre.
Futtassa a következő New-AzResourceGroupDeployment
parancsot a sablon éles környezetben való üzembe helyezéséhez:
New-AzResourceGroupDeployment `
-TemplateFile "./condition.json" `
-storageAccountName $STORAGE_ACCT_NAME `
-environment production
Az éles környezetben végzett üzembe helyezés ellenőrzése
Ezúttal azt várta a sablontól, hogy kiépíti a tárfiókot.
Ennek a ténynek az ellenőrzéséhez futtassa újra a Get-AzStorageAccount
parancsmagot, és ellenőrizze, hogy a tárfiók neve már használatban van.
Futtassa az alábbi Get-AzStorageAccount
parancsot:
Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>
A kimenet ezúttal más lesz. Hibaüzenet helyett ez a táblázat jelenik meg, amelyben a tárfiók erőforrás adatai láthatók:
A kimenet az alábbihoz hasonló:
Location Name Type Kind
-------- ---- ---- ----
westus tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2
Ezek az értékek azt mutatják, hogy a tárfiók az elvárt módon ki lett építve.
Bármilyen egyszerű ez a példa, azt bemutatta, hogyan végezhető üzembe helyezés egy feltétel alapján.
A gyakorlatban a fejlesztési, előkészítési és éles környezet is tartalmazna további Azure-erőforrásokat a számítási, hálózatkezelési és tárolási igények kiszolgálására. Feltehetően mindegyik környezet a saját erőforráscsoportjában volna felügyelve, hogy egyetlen egységként lehessen üzembe helyezni és kezelni.
Az ARM-sablon létrehozása
A következőkben egy Azure Resource Manager- =(ARM-) sablont hozhat létre, amely egy tárfiók erőforrást definiál.
A sablon definiál két paramétert is:
environment
: az aktuális környezet neve.storageAccountName
: a tárfiók neve.
Az environment
az alábbi három érték egyikével rendelkezhet: dev
, staging
vagy production
. A feltétel csak akkor építi ki a tárfiókot, ha az environment
értéke production
.
A Visual Studio Code-ban hozzon létre egy condition.json fájlt ugyanabban a könyvtárban, amely az azuredeploy.json fájlt is tartalmazza.
Illessze be ezt a tartalmat a condition.json fájlba:
{ "$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": {} }
A fejlesztési környezet kiépítése
Most a fejlesztési Dev környezetben fogja üzembe helyezni az ARM-sablont. Ehhez a dev
értékre kell beállítani az environment
sablonparamétert.
Mivel a feltétel csak akkor építi ki a tárfiókot, ha az environment
értéke production
, arra számíthat, hogy a sablon nem építi ki a tárfiókot. Másként fogalmazva az üzembe helyezés várhatóan nulla erőforrást fog tartalmazni.
Hozzon létre egy Bash-változót, amely a tárfiók nevét tartalmazza.
STORAGE_ACCT_NAME=tailwindsa$RANDOM
A tárfiókok nevének egyedinek kell lenniük. A
$RANDOM
rész biztosítja, hogy a tárfiók neve véletlenszerű számsorozattal végződjön.Futtassa a következő
az deployment group create
parancsot a sablon dev környezetben való üzembe helyezéséhez:az deployment group create \ --template-file condition.json \ --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
A fejlesztési környezetben történt üzembe helyezés ellenőrzése
A sablontól azt várta, hogy nem építi ki a tárfiókot.
Ennek a ténynek az ellenőrzéséhez futtassa az az storage account check-name
parancsot, és ellenőrizze, hogy használatban van-e már a tárfiók neve.
Futtassa az alábbi az storage account check-name
parancsot:
az storage account check-name --name $STORAGE_ACCT_NAME
Ezt fogja látni:
{
"message": null,
"nameAvailable": true,
"reason": null
}
A nameAvailable
értéke true
, ami azt jelenti, hogy a tárfiók neve még szabad, tehát az még nincs kiépítve. Erre számított is, hiszen egyelőre nem helyezte üzembe az éles környezetben.
Az éles környezet kiépítése
Itt üzembe helyezi az ARM-sablont az éles környezetben, hasonlóan a dev környezethez.
Emlékeztetőül, a sablonban szereplő feltétel a következő:
"condition": "[equals(parameters('environment'),'production')]"
A feltétel aktiválásához állítsa be az environment
sablonparamétert a production
értékre.
Futtassa a következő az deployment group create
parancsot a sablon éles környezetben való üzembe helyezéséhez:
az deployment group create \
--template-file condition.json \
--parameters storageAccountName=$STORAGE_ACCT_NAME environment=production
Az éles környezetben végzett üzembe helyezés ellenőrzése
Ezúttal azt várta a sablontól, hogy kiépíti a tárfiókot.
Ennek a ténynek az ellenőrzéséhez futtassa újra a az storage account check-name
parancsmagot, és ellenőrizze, hogy a tárfiók neve már használatban van.
Futtassa az alábbi az storage account check-name
parancsot:
az storage account check-name --name $STORAGE_ACCT_NAME
A kimenet az alábbihoz hasonló:
{
"message": "The storage account named tailwindsa32100 is already taken.",
"nameAvailable": false,
"reason": "AlreadyExists"
}
Ezek az értékek azt mutatják, hogy a tárfiók az elvárt módon ki lett építve.
Bármilyen egyszerű ez a példa, azt bemutatta, hogyan végezhető üzembe helyezés egy feltétel alapján.
A gyakorlatban a fejlesztési, előkészítési és éles környezet is tartalmazna további Azure-erőforrásokat a számítási, hálózatkezelési és tárolási igények kiszolgálására. Feltehetően mindegyik környezet a saját erőforráscsoportjában volna felügyelve, hogy egyetlen egységként lehessen üzembe helyezni és kezelni.