Упражнение. Добавление условной логики в шаблон ARM

Завершено

В предыдущих упражнениях вы работали с виртуальными машинами Linux. Здесь мы перейдем на несколько экранов и займемся управлением учетными записями хранения.

Предположим, что у вас есть три среды, которые необходимо развернуть в следующих средах: разработка, промежуточное развертывание и рабочая среда.

  • Среда Dev — это первое место, где собрано все необходимое для вашего приложения. Эта среда может содержать веб-серверы, подсистему балансировки нагрузки и базу данных.
  • Среда Staging — это место окончательного тестирования перед выпуском новых функций приложения для конечных пользователей.
  • Среда Production — это место, где конечные пользователи получают доступ к приложению.

При переходе со среды Dev к Production требуется дополнительная инфраструктура. Например, в среде Production требуется дополнительная учетная запись хранения, которая не нужна в предыдущих средах.

Здесь вы используете условие для управления подготовкой учетной записи хранения. Это позволит поддерживать каждую из сред инфраструктуры из одного и того же шаблона ARM.

Создание шаблона ARM

Здесь вы создаете шаблон Azure Resource Manager (ARM), который определяет ресурс учетной записи хранения.

Шаблон также определяет два параметра.

  • environment: имя текущей среды.
  • storageAccountName: имя учетной записи хранения.

environment может принимать одно из трех значений: dev, staging или production. Условие подготавливает учетную запись хранения, только если environment равно production.

  1. В Visual Studio Code создайте файл с именем condition.json в том же каталоге, который содержит azuredeploy.json.

  2. Добавьте это содержимое в файл 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": {}
    }
    

Здесь вы развернете шаблон ARM с конструкцией condition, используя PowerShell и модуль Az.

Подготовка среды "Dev"

Здесь шаблон ARM развертывается в среде Dev. Это можно сделать, задав для параметра шаблона environment значение dev.

Так как условие подготавливает учетную запись хранения только в том случае, если environment имеет значение production, шаблон не будет подготавливать учетную запись хранения. Иными словами, предполагается, что развертывание содержит нулевые ресурсы.

  1. Создайте переменную PowerShell, содержащую имя учетной записи хранения.

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

    Имена учетных записей хранения должны быть уникальными. Часть Get-Random гарантирует, что имя учетной записи хранения заканчивается случайной серией цифр.

  2. Выполните следующую New-AzResourceGroupDeployment команду, чтобы развернуть шаблон в среде разработки:

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

Проверка развертывания типа "Dev"

Помните, что шаблон не должен подготавливать учетную запись хранения.

Выполните команду Get-AzStorageAccount, чтобы проверить, используется ли уже имя учетной записи хранения.

Выполните команду Get-AzStorageAccount.

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

Результат будет примерно таким:

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

Это указывает, что учетная запись хранения еще не подготовлена. Это необходимо, так как вы еще не развернули среду "Production".

Подготовка среды "Production"

Здесь шаблон ARM развертывается в среде Production, аналогично тому, как это делалось для среды Dev.

Напомним, как выглядит условие в шаблоне:

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

Чтобы активировать это условие, задайте для параметра шаблона environment значение production.

Выполните следующую New-AzResourceGroupDeployment команду, чтобы развернуть шаблон в рабочей среде:

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

Проверка развертывания в среде Production

Теперь шаблон уже должен подготавливать учетную запись хранения.

Выполните команду Get-AzStorageAccount еще раз, чтобы убедиться в том, что имя учетной записи хранения используется.

Выполните следующую команду Get-AzStorageAccount.

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

На этот раз вы получите другие выходные данные. Вместо сообщения об ошибке отображается эта таблица, в которой содержатся сведения о ресурсе учетной записи хранения.

Результат будет примерно таким:

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

Эти значения показывают, что учетная запись хранения подготовлена в соответствии с ожиданиями.

Несмотря на простоту примера, вы уже знаете, как выполнить развертывание на основе условия.

На практике среды Dev, Staging и Production будут содержать дополнительные ресурсы Azure для поддержки вычислительных, сетевых возможностей и задач хранения. Каждая среда, скорее всего, будет управляться через собственную группу ресурсов, чтобы ее можно было подготавливать и рассматривать как единое целое.

Создание шаблона ARM

Здесь вы создаете шаблон Azure Resource Manager (ARM), который определяет ресурс учетной записи хранения.

Шаблон также определяет два параметра.

  • environment: имя текущей среды.
  • storageAccountName: имя учетной записи хранения.

environment может принимать одно из трех значений: dev, staging или production. Условие подготавливает учетную запись хранения, только если environment равно production.

  1. В Visual Studio Code создайте файл с именем condition.json в том же каталоге, который содержит azuredeploy.json.

  2. Добавьте это содержимое в файл 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": {}
    }
    

Подготовка среды "Dev"

Здесь шаблон ARM развертывается в среде Dev. Это можно сделать, задав для параметра шаблона environment значение dev.

Так как условие подготавливает учетную запись хранения только в том случае, если environment имеет значение production, шаблон не будет подготавливать учетную запись хранения. Иными словами, предполагается, что развертывание содержит нулевые ресурсы.

  1. Создайте переменную Bash, содержащую имя учетной записи хранения.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    

    Имена учетных записей хранения должны быть уникальными. Часть $RANDOM гарантирует, что имя учетной записи хранения заканчивается случайной серией цифр.

  2. Выполните следующую az deployment group create команду, чтобы развернуть шаблон в среде разработки:

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

Проверка развертывания типа "Dev"

Помните, что шаблон не должен подготавливать учетную запись хранения.

Выполните команду az storage account check-name, чтобы проверить, используется ли уже имя учетной записи хранения.

Выполните следующую команду az storage account check-name.

az storage account check-name --name $STORAGE_ACCT_NAME

Вы увидите примерно такой результат.

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

Параметру nameAvailable присвоено значение true. Это означает, что имя учетной записи хранения по-прежнему доступно и еще не подготовлено. Это необходимо, так как вы еще не развернули среду "Production".

Подготовка среды "Production"

Здесь вы развернете шаблон ARM в рабочей среде, аналогично тому, как вы сделали для среды разработки.

Напомним, как выглядит условие в шаблоне:

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

Чтобы активировать это условие, задайте для параметра шаблона environment значение production.

Выполните следующую az deployment group create команду, чтобы развернуть шаблон в рабочей среде:

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

Проверка развертывания в среде Production

Теперь шаблон уже должен подготавливать учетную запись хранения.

Выполните команду az storage account check-name еще раз, чтобы убедиться в том, что имя учетной записи хранения используется.

Выполните следующую команду az storage account check-name.

az storage account check-name --name $STORAGE_ACCT_NAME

Результат будет примерно таким:

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

Эти значения показывают, что учетная запись хранения подготовлена в соответствии с ожиданиями.

Несмотря на простоту примера, вы уже знаете, как выполнить развертывание на основе условия.

На практике среды Dev, Staging и Production будут содержать дополнительные ресурсы Azure для поддержки вычислительных, сетевых возможностей и задач хранения. Каждая среда, скорее всего, будет управляться через собственную группу ресурсов, чтобы ее можно было подготавливать и рассматривать как единое целое.