Увеличение гибкости шаблона Azure Resource Manager с помощью параметров и выходных данных

Завершено

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

В этом уроке вы узнаете о параметрах и выходных разделах шаблона.

Параметры шаблона ARM

Параметры шаблона ARM позволяют настраивать развертывание, предоставляя значения, адаптированные для конкретной среды. Например, вы можете передавать разные значения в зависимости от того, в какой среде выполняется развертывание, — среде разработки, тестовой, рабочей или какой-либо другой среде. Например, в предыдущем шаблоне используется SKU учетной записи хранения Standard_LRS. Если сделать имя SKU учетной записи хранения параметром, этот шаблон можно повторно использовать для других развертываний, которые создают учетную запись хранения. Затем при развертывании шаблона вы просто передаете имя SKU, которое требуется для этого развертывания. Это можно сделать либо в командной строке, либо с помощью файла параметров.

В разделе parameters шаблона укажите, какие значения вы можете вводить при развертывании ресурсов. В шаблоне может быть не более 256 параметров. В определениях параметров можно использовать большинство функций шаблонов.

Доступные свойства для параметра

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

Разрешенные типы параметров

  • строка
  • secureString
  • integers
  • boolean
  • объект
  • secureObject
  • array

Рекомендации по использованию параметров

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

По соображениям безопасности никогда не закодировать или предоставлять значения по умолчанию для имен пользователей и /или паролей в шаблонах. Всегда используйте параметры для имен пользователей и паролей (или секретов). Используйте secureString для всех паролей и секретов. При передаче конфиденциальных данных в объекте JSON используйте тип secureObject. Параметры шаблона с типом secureString или secureObject невозможно прочитать или собрать после развертывания ресурса.

Использование параметров в шаблоне ARM

В разделе параметров шаблона ARM укажите параметры, которые можно ввести при развертывании ресурсов. В шаблоне может быть не более 256 параметров.

Ниже приведен пример файла шаблона с параметром SKU учетной записи хранения, определенного в разделе шаблона parameters . Вы можете указать для параметра значение по умолчанию, которое будет использоваться, если во время выполнения значение не будет задано.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Затем используйте этот параметр в определении ресурса. Синтаксис: [parameters('name of the parameter')]. Вы будете использовать функцию parameters . Дополнительные сведения о функциях см. в следующем модуле.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

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

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

Выходные данные шаблона ARM

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

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Элемент Description
выходное имя должен быть указан допустимый идентификатор JavaScript.
условие логическое значение, указывающее, возвращается ли данное выходное значение (необязательно). Если задано true, это значение включается в выходные данные для развертывания. Если задано false, это выходное значение для данного развертывания пропускается. Если значение не указано, используется значение по умолчанию — true.
type тип выходного значения.
значение выражение языка шаблона, которое вычисляется и возвращается как выходное значение (необязательно).
copy копирование используется для возвращения более одного значения в выходных данных (необязательно).

Использование выходных данных в шаблоне ARM

Ниже приведен пример вывода конечных точек учетной записи хранения:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Обратите внимание на часть reference выражения. Эта функция получает состояние среды выполнения для учетной записи хранения.

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

Помните, что шаблоны ARM являются идемпотентными, что означает, что вы можете развернуть шаблон в той же среде снова, и если ничего не было изменено в шаблоне, ничего не изменится в среде. Если в шаблон был внесены изменения (например, вы изменили значение параметра), будет развернуто только это изменение. Шаблон может содержать все ресурсы, необходимые для вашего решения Azure, и вы можете безопасно выполнять этот шаблон снова и снова. Ресурсы будут создаваться, только если они еще не существуют, и обновляться только в случае изменения.