Cvičení – přidání podmíněné logiky do šablony ARM

Dokončeno

V předchozích cvičeních jste pracovali s virtuálními počítači se systémem Linux. Tady se to trochu změní a zaměříte se na správu účtů úložiště.

Řekněme, že máte tři prostředí, která potřebujete nasadit do: Vývoj, Příprava a Produkční prostředí.

  • Vývojové prostředí Dev je první místo, kde se spojí vše, co vaše aplikace potřebuje. Toto prostředí může zahrnovat webové servery, nástroj pro vyrovnávání zatížení a databázi.
  • V přípravném prostředí Staging probíhá konečné testování před vydáním nových funkcí aplikace koncovým uživatelům.
  • Provozní prostředí Production je místo, kde koncoví uživatelé přistupují k vaší aplikaci.

Při přechodu z prostředí Dev do prostředí Production budete potřebovat další infrastrukturu. Například v prostředí Production budete potřebovat další účet úložiště, který v předchozích prostředích nepotřebujete.

Tady můžete pomocí určité podmínky řídit, kdy se zřídí účet úložiště. To vám umožní podporovat všechna vaše prostředí infrastruktury ze stejné šablony ARM.

Vytvoření šablony ARM

Tady vytvoříte šablonu Azure Resource Manageru (ARM), která bude definovat prostředek účtu úložiště.

Tato šablona bude také definovat dva parametry:

  • environment: název současného prostředí.
  • storageAccountName: název účtu úložiště.

environment může mít jednu ze tří hodnot: dev, staging nebo production. Tato podmínka zřídí účet úložiště pouze v případě, že se environment rovná hodnotě production.

  1. V editoru Visual Studio Code vytvořte soubor s názvem condition.json ve stejném adresáři, který obsahuje soubor azuredeploy.json.

  2. Přidejte tento obsah do souboru 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": {}
    }
    

V této části nasadíte šablonu ARM s konstruktorem condition pomocí PowerShellu a modulu Az.

Zřízení vývojového prostředí Dev

V této části nasadíte šablonu ARM do vývojového prostředí Dev. Provedete to tak, že nastavíte parametr environment v šabloně na dev.

Vzhledem k tomu, že tato podmínka zřídí účet úložiště pouze v případě, že se environment rovná hodnotě production, očekáváte, že šablona nezřídí účet úložiště. Jinak řečeno, očekáváte nasazení, které nebude obsahovat žádné prostředky.

  1. Vytvořte proměnnou PowerShellu, která bude obsahovat název účtu úložiště.

    $STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
    

    Názvy účtů úložiště musí být jedinečné. Část Get-Random zajišťuje, že název účtu úložiště končí náhodnou řadou čísel.

  2. Spuštěním následujícího New-AzResourceGroupDeployment příkazu nasaďte šablonu do vývojového prostředí:

    New-AzResourceGroupDeployment `
      -TemplateFile "./condition.json" `
      -storageAccountName $STORAGE_ACCT_NAME `
      -environment dev
    

Ověření nasazení do vývojového prostředí Dev

Nezapomeňte, že očekáváte, že šablona nezřídila účet úložiště.

Chcete-li tuto skutečnost ověřit, zkontrolujte spuštěním příkazu Get-AzStorageAccount, jestli se název účtu úložiště už nepoužívá.

Spusťte příkaz Get-AzStorageAccount:

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Výstup bude vypadat nějak takto:

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

To vás informuje, že účet úložiště ještě není zřízený. To očekáváte, protože jste ještě neprovedli nasazení do provozního prostředí (Production).

Zřízení provozního prostředí Production

Tady nasadíte šablonu ARM do provozního prostředí Production podobným způsobem, jak jste to udělali u vývojového prostředí Dev.

Abychom si to připomněli, takto vypadá tato podmínka ve vaší šabloně:

"condition": "[equals(parameters('environment'),'production')]"

Když budete chtít tuto podmínku aktivovat, nastavíte parametr environment v šabloně na production.

Spuštěním následujícího New-AzResourceGroupDeployment příkazu nasaďte šablonu do produkčního prostředí:

New-AzResourceGroupDeployment `
  -TemplateFile "./condition.json" `
  -storageAccountName $STORAGE_ACCT_NAME `
  -environment production

Ověření nasazení do provozního prostředí Production

Tentokrát očekáváte, že šablona zřídila účet úložiště.

Chcete-li tuto skutečnost ověřit, zkontrolujte opětovným spuštěním příkazu Get-AzStorageAccount, že se název účtu úložiště používá.

Spusťte následující příkaz Get-AzStorageAccount:

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Tentokrát obdržíte jiný výstup. Místo chybové zprávy se zobrazí tento tabulkový výstup, který obsahuje informace o vašem prostředku účtu úložiště:

Výstup bude vypadat nějak takto:

Location Name              Type                              Kind
-------- ----              ----                              ----
westus   tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2

Tyto hodnoty vás informují, že účet úložiště byl zřízen tak, jak očekáváte.

I když je to jen základní příklad, můžete tu vidět, jak lze provést nasazení na základě určité podmínky.

V praxi by prostředí Dev, Staging a Production obsahovala další prostředky Azure pro podporu vašich potřeb týkajících se výpočtů, sítí a úložiště. Každé prostředí by bylo pravděpodobně spravováno pomocí vlastní skupiny prostředků, aby ho bylo možné zřizovat a používat jako jedinou jednotku.

Vytvoření šablony ARM

Tady vytvoříte šablonu Azure Resource Manageru (ARM), která bude definovat prostředek účtu úložiště.

Tato šablona bude také definovat dva parametry:

  • environment: název současného prostředí.
  • storageAccountName: název účtu úložiště.

environment může mít jednu ze tří hodnot: dev, staging nebo production. Tato podmínka zřídí účet úložiště pouze v případě, že se environment rovná hodnotě production.

  1. V editoru Visual Studio Code vytvořte soubor s názvem condition.json ve stejném adresáři, který obsahuje soubor azuredeploy.json.

  2. Přidejte tento obsah do souboru 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": {}
    }
    

Zřízení vývojového prostředí Dev

V této části nasadíte šablonu ARM do vývojového prostředí Dev. Provedete to tak, že nastavíte parametr environment v šabloně na dev.

Vzhledem k tomu, že tato podmínka zřídí účet úložiště pouze v případě, že se environment rovná hodnotě production, očekáváte, že šablona nezřídí účet úložiště. Jinak řečeno, očekáváte nasazení, které nebude obsahovat žádné prostředky.

  1. Vytvořte proměnnou Bash, která bude obsahovat název účtu úložiště.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    

    Názvy účtů úložiště musí být jedinečné. Část $RANDOM zajišťuje, že název účtu úložiště končí náhodnou řadou čísel.

  2. Spuštěním následujícího az deployment group create příkazu nasaďte šablonu do vývojového prostředí:

    az deployment group create \
      --template-file condition.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
    

Ověření nasazení do vývojového prostředí Dev

Nezapomeňte, že očekáváte, že šablona nezřídila účet úložiště.

Chcete-li tuto skutečnost ověřit, zkontrolujte spuštěním příkazu az storage account check-name, jestli se název účtu úložiště už nepoužívá.

Spusťte následující příkaz az storage account check-name:

az storage account check-name --name $STORAGE_ACCT_NAME

Uvidíte toto:

{
  "message": null,
  "nameAvailable": true,
  "reason": null
}

Hodnota parametru nameAvailable je true, což znamená, že název účtu úložiště je stále k dispozici a ještě není zřízený. To očekáváte, protože jste ještě neprovedli nasazení do provozního prostředí (Production).

Zřízení provozního prostředí Production

Tady nasadíte šablonu ARM do produkčního prostředí, podobně jako jste to udělali pro vývojové prostředí.

Abychom si to připomněli, takto vypadá tato podmínka ve vaší šabloně:

"condition": "[equals(parameters('environment'),'production')]"

Když budete chtít tuto podmínku aktivovat, nastavíte parametr environment v šabloně na production.

Spuštěním následujícího az deployment group create příkazu nasaďte šablonu do produkčního prostředí:

az deployment group create \
  --template-file condition.json \
  --parameters storageAccountName=$STORAGE_ACCT_NAME environment=production

Ověření nasazení do provozního prostředí Production

Tentokrát očekáváte, že šablona zřídila účet úložiště.

Chcete-li tuto skutečnost ověřit, zkontrolujte opětovným spuštěním příkazu az storage account check-name, že se název účtu úložiště používá.

Spusťte následující příkaz az storage account check-name:

az storage account check-name --name $STORAGE_ACCT_NAME

Výstup bude vypadat nějak takto:

{
  "message": "The storage account named tailwindsa32100 is already taken.",
  "nameAvailable": false,
  "reason": "AlreadyExists"
}

Tyto hodnoty vás informují, že účet úložiště byl zřízen tak, jak očekáváte.

I když je to jen základní příklad, můžete tu vidět, jak lze provést nasazení na základě určité podmínky.

V praxi by prostředí Dev, Staging a Production obsahovala další prostředky Azure pro podporu vašich potřeb týkajících se výpočtů, sítí a úložiště. Každé prostředí by bylo pravděpodobně spravováno pomocí vlastní skupiny prostředků, aby ho bylo možné zřizovat a používat jako jedinou jednotku.