Упражнение. Добавление параметров и выходных данных в шаблон Azure Resource Manager

Завершено

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

Создание параметров для шаблона ARM

Сделайте шаблон ARM более гибким, добавив параметры, которые можно задавать во время выполнения. Создайте параметр для значения storageName.

  1. В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте parameters. Выглядит следующим образом: "parameters":{},

  2. Нажмите клавишу ВВОД и введите par. Появится список связанных фрагментов кода. Выберите новый параметр, который добавляет универсальный параметр в шаблон. Этот пример выглядит следующим образом:

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. Измените параметр с parameter1 на storageName и оставьте тип строкой. Для параметра minLength укажите значение 3, а для параметра maxLength — 24. Добавьте в описание имя ресурса службы хранилища Azure.

  4. Теперь блок параметров должен выглядеть следующим образом:

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. Используйте этот новый параметр в блоке resources в значениях name и displayName. Весь файл выглядит следующим образом:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Сохраните файл.

Развертывание параметризованного шаблона ARM

Теперь измените имя развертывания, чтобы оно лучше отражало то, что делает это развертывание, и введите значение для нового параметра.

В терминале выполните следующие команды Azure CLI. Вы уже использовали этот фрагмент кода ранее, но имя развертывания изменилось. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем модуле. В этом случае Azure обновляет ресурс вместо создания нового.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

В терминале выполните следующие команды Azure PowerShell. Вы уже использовали этот фрагмент кода ранее, но имя развертывания изменилось. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем модуле. В этом случае Azure обновляет ресурс вместо создания нового.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

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

  1. По завершении развертывания вернитесь к портал Azure в браузере. Перейдите в свою группу ресурсов. Вы видите, что теперь в ней указаны 3 успешных развертывания. Нажмите эту ссылку.

    Обратите внимание, что в списке присутствуют все три развертывания.

  2. Исследуйте развертывание addnameparameter, как вы уже делали ранее.

Добавление другого параметра, ограничивающего допустимые значения

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

  1. Поместите курсор после закрывающей фигурной скобки параметра storageName. Добавьте запятую и нажмите клавишу ВВОД.

  2. Снова введите par и выберите new-parameter.

  3. Измените новый универсальный параметр на следующий код:

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    Здесь вы перечисляете значения, которые позволяет этот параметр. Если шаблон выполняется со значением, которое не разрешено, развертывание завершается сбоем.

  4. Добавьте в этот параметр какой-нибудь комментарий.

    Снимок экрана: файл azuredeploy.json с комментарием Это допустимые значения для учетной записи хранения Azure в строке, предшествующей параметру storageSKU.

    Шаблоны ARM поддерживают комментарии // и /* */.

  5. Обновите параметр resources так, чтобы он использовал параметр storageSKU. Если вы используете преимущества IntelliSense в Visual Studio Code, это упрощает этот шаг.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    Весь файл выглядит следующим образом:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Сохраните файл.

Развертывание шаблона ARM

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

  1. Разверните шаблон, выполнив следующие команды. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В этом случае Azure обновляет ресурс вместо создания нового.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    Дождитесь завершения развертывания. Как и ожидалось, это развертывание выполнилось успешно. Список разрешенных значений запрещает пользователям шаблона передавать значения параметров, которые не работают для ресурса. Давайте посмотрим, что произойдет, если указать недопустимый SKU.

  2. Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра storageSKU изменено на Basic. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В этом случае Azure обновляет ресурс вместо создания нового.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    Это развертывание завершается неудачно. Обратите внимание на ошибку.

    Снимок экрана: окно терминала с ошибкой проверки развертывания.

  1. Разверните шаблон, выполнив следующие команды. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В этом случае Azure обновляет ресурс вместо создания нового.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    Дождитесь завершения развертывания. Как и ожидалось, это развертывание выполнилось успешно. Список разрешенных значений запрещает пользователям шаблона передавать значения параметров, которые не работают для ресурса. Давайте посмотрим, что произойдет, если указать недопустимый SKU.

  2. Выполните следующие команды для развертывания шаблона с параметром, который не входит в список разрешенных. В данном случае значение параметра storageSKU изменено на Basic. Укажите уникальное имя для параметра storageName. Напомним, что это имя должно быть уникальным в пределах всей платформы Azure. Вы можете использовать уникальное имя, созданное в предыдущем разделе. В этом случае Azure обновляет ресурс вместо создания нового.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    Это развертывание завершается неудачно. Обратите внимание на ошибку.

    Снимок экрана: окно терминала с ошибкой проверки развертывания.

Добавление выходных данных в шаблон ARM

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

  1. В файле azuredeploy.json в Visual Studio Code поместите указатель между фигурными скобками в атрибуте выходных данных "outputs":{},.

  2. Нажмите клавишу ВВОД, а затем введите . Вы получите список связанных фрагментов кода. Выберите new-output. Он добавляет универсальные выходные данные в шаблон, который выглядит следующим образом:

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. Измените значение output1 на storageEndpoint, а затем измените значение typeобъекта. Измените значение value"[reference(parameters('storageName'))).primaryEndpoints]". Это выражение мы обсуждали в предыдущем модуле — оно получает данные конечных точек. Так как мы указали объект в качестве типа, он возвращает объект в формате JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. Сохраните файл.

Развертывание шаблона ARM с выходными данными

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

  1. Разверните шаблон, выполнив следующие команды. Обязательно замените {your-unique-name} на свою уникальную строку.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    Обратите внимание на результат.

    Снимок экрана: окно терминала с выходными данными основных конечных точек в формате JSON.

  1. Разверните шаблон, выполнив следующие команды. Обязательно замените {your-unique-name} на свою уникальную строку.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    Обратите внимание на результат.

    Снимок экрана: окно терминала с выходными данными основных конечных точек в формате JSON.

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

На портале Azure перейдите в свое развертывание addOutputs. Вы видите, что теперь отображаются и выходные данные.

Снимок экрана: портал Azure с выделением выходных данных в меню слева.