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

Завершено

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

В этом модуле рассматриваются разделы шаблона parameters и outputs.

Параметры шаблона 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": "2023-05-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, и вы можете безопасно выполнять этот шаблон снова и снова. Ресурсы создаются только в том случае, если они еще не существуют, и обновляются только при изменении.