Gyakorlat – Feltételes logika beépítése az ARM-sablonba

Befejeződött

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.

  1. 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.

  2. 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.

  1. 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.

  2. 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.

  1. 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.

  2. 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.

  1. 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.

  2. 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.