В этой статье описывается структура шаблона Azure Resource Manager (ARM). Статья содержит информацию о разных разделах шаблона и свойствах, которые доступны в этих разделах.
Bicep — это новый язык, который предлагает те же возможности, что и шаблоны ARM, но с более простым синтаксисом. Если вы рассматриваете инфраструктуру в качестве параметров кода, рекомендуем Bicep.
Расположение файла схемы в нотации объектов JavaScript (JSON), в котором описывается версия языка шаблона. Номер используемой вами версии зависит от области развертывания и вашего редактора JSON.
Другие редакторы (в том числе Visual Studio) могут не подойти для обработки этой схемы. Для таких редакторов используйте: https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#
Для развертывания подписок используйте: https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
Для развертывания групп управления используйте: https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#
Для развертывания клиентов используйте: https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
languageVersion
No
Языковая версия шаблона. Дополнительные сведения о усовершенствованиях languageVersion 2.0 см . в разделе languageVersion 2.0.
contentVersion
Да
Версия шаблона (например, 1.0.0.0). Для этого элемента можно предоставить любое значение. Это значение позволяет задокументировать важные изменения в шаблоне. При развертывании ресурсов с помощью шаблона это значение позволяет убедиться в том, что используется нужный шаблон.
apiProfile
No
Версия API, которая служит в качестве коллекции версий API для типов ресурсов. Используйте это значение, чтобы не указывать версии API для каждого ресурса в шаблоне. Если указать версию профиля API, не указав версию API для типа ресурса, Resource Manager использует для этого типа ресурса версию API, определенную в профиле.
Свойство профиля API особенно полезно при развертывании шаблона в других средах, например Azure Stack и глобальной среде Azure. Используйте версию профиля API, чтобы шаблон автоматически применял версии, поддерживаемые в обеих средах. Список текущих версий профиля API и определенных в нем версий API ресурсов см. в статье Профиль API.
Каждый элемент содержит свойства, которые можно задать. В этой статье подробнее описаны разделы шаблона.
Определения
definitions В разделе шаблона укажите схемы, используемые для проверки значений массива и объектов. Definitions можно использовать только с languageVersion 2.0.
Имя определения типа. должен быть указан допустимый идентификатор JavaScript.
type
Да
Тип определения типа. Допустимые типы и значения: string, securestring, int, bool, object, secureObject и array. См. статью Типы данных в шаблонах ARM.
allowedValues
No
Массив разрешенных значений для определения типа, чтобы убедиться, что задано правильное значение.
minValue
No
Минимальное значение для определений типов int— это значение включительно.
maxValue
No
Максимальное значение для определений типов int, это значение включительно.
minLength
No
Минимальная длина для определений строк, безопасной строки и типа массива включает в себя инклюзивное значение.
maxLength
No
Максимальная длина строк, безопасных строк и определений типов массива включает в себя инклюзивное значение.
префиксItems
No
Схема проверки элемента массива в том же индексе.
items
No
Схема, применяемая ко всем элементам массива, индекс которого больше наибольшего prefixItems индекса ограничения, или логический элемент для управления элементами массива, индекс которого больше самого большого prefixItems индекса ограничения.
свойства
No
Схема проверки объекта.
additionalProperties
No
Схема, применяемая ко всем свойствам, не упомянутым в properties ограничении, или логическое значение для принятия любого свойства, не определенного в ограничении properties .
дискриминатор
No
Схема, применяемая на основе дискриминационных свойств.
nullable
No
Логическое значение, указывающее, что значение может быть null или опущено.
описание
No
Описание определения типа, отображаемого пользователям на портале. Дополнительные сведения см. в разделе комментариев в шаблонах.
В разделе parameters шаблона указываются значения, которые вы можете вводить во время развертывания ресурсов. В шаблоне ограничено 256 параметрами . Количество параметров можно уменьшить с помощью объектов, содержащих несколько свойств.
Имя параметра. должен быть указан допустимый идентификатор JavaScript.
type
Да
Тип значения параметра. Допустимые типы и значения: string, securestring, int, bool, object, secureObject и array. См. статью Типы данных в шаблонах ARM.
defaultValue
No
Значение параметра, используемое по умолчанию, если пользователь не задал иное значение.
allowedValues
No
Массив допустимых значений параметра, по которому сверяются правильные значения.
minValue
No
Минимальное значение для параметров типа int. Это включающее значение.
maxValue
No
Максимальное значение для параметров типа int. Это включающее значение.
minLength
No
Минимальная длина (включительно) параметров типа string, secure string и array.
maxLength
No
Максимальная длина (включительно) параметров типа string, secure string и array.
префиксItems
No
Определение типа для проверки элемента массива в том же индексе. prefixItems поддерживается только в languageVersion 2.0.
items
No
Схема, применяемая ко всем элементам массива, индекс которого больше наибольшего prefixItems индекса ограничения, или логический элемент для управления элементами массива, индекс которого больше самого большого prefixItems индекса ограничения. items поддерживается только в languageVersion 2.0.
свойства
No
Схема проверки объекта. properties поддерживается только в languageVersion 2.0.
additionalProperties
No
Схема, применяемая ко всем свойствам, не упомянутым в properties ограничении, или логическое значение для принятия любого свойства, не определенного в ограничении properties . additionalProperties поддерживается только в languageVersion 2.0.
дискриминатор
No
Схема, применяемая на основе дискриминационных свойств. discriminator поддерживается только в languageVersion 2.0.
nullable
No
Логическое значение, указывающее, что значение может быть null или опущено. nullable поддерживается только в languageVersion 2.0.
описание
No
Описание параметра, отображаемого для пользователей на портале. Дополнительные сведения см. в разделе комментариев в шаблонах.
В разделе variables указываются значения, которые можно использовать в разных частях шаблона. Переменные определять не обязательно, однако они часто упрощают шаблон, снижая число сложных выражений. Формат каждой переменной соответствует одному из типов данных. В шаблоне ограничено 256 переменными .
В приведенном ниже примере показаны доступные параметры для определения переменных.
В шаблоне можно создать свои собственные функции. Эти функции доступны для использования в шаблоне. Как правило, определяются сложные выражения, которые вы не хотите повторять в шаблоне. Создаются определяемые пользователем функции на основе выражений и функции, которые поддерживаются в шаблонах.
При определении пользовательской функции есть несколько ограничений:
Функция не может обращаться к переменным.
Функция может использовать только параметры, определенные в самой функции. При использовании функции parameters внутри пользовательской функции доступны только параметры этой функции.
Функция не может вызывать другие функции, определяемые пользователем.
Пространство имен для пользовательских функций. Используется для предотвращения конфликтов имен с функциями шаблона.
function-name
Да
Имя пользовательской функции. При вызове функции объедините ее имя с пространством имен. Например, чтобы вызвать функцию с именем uniqueName в пространстве имен contoso, используйте имя "[contoso.uniqueName()]".
parameter-name
No
Имя параметра, используемого в пользовательской функции.
parameter-value
No
Тип значения параметра. Допустимые типы и значения: string, securestring, int, bool, object, secureObject и array.
output-type
Да
Тип выходного значения. Выходные значения поддерживают те же типы, что и входные параметры функции.
output-value
Да
Выражение языка шаблона, которое оценивается и возвращается из функции.
Логическое значение, указывающее, подготавливается ли ресурс во время этого развертывания. Если установлено значение true, при развертывании создается ресурс. Если установлено значение false, при развертывании ресурс не создается. См. статью Условное развертывание в шаблонах ARM.
type
Да
Тип ресурса. Это значение представляет собой сочетание пространства имен поставщика ресурсов и типа ресурса (например, Microsoft.Storage/storageAccounts). Чтобы определить доступные значения, см. справочник по шаблонам. Для дочернего ресурса формат типа зависит от того, вложен он в родительский ресурс или определен за его пределами. См. о настройке имени и типа дочернего ресурса.
версия_API
Да
Версия REST API, которая будет использована для создания ресурса. При создании нового шаблона укажите в качестве значения последнюю версию развертываемого ресурса. Пока шаблон работает надлежащим образом, продолжайте использовать ту же версию API. Продолжая использовать ту же версию API, вы можете не опасаться того, что с новой версией API изменится принцип работы шаблона. Рекомендуем обновлять версию API только в том случае, если требуется использовать новую функцию, появившуюся в более поздней версии. Чтобы определить доступные значения, см. справочник по шаблонам.
name
Да
Имя ресурса. Имя должно соответствовать ограничениям компонентов URI, определенным в RFC3986. Службы Azure, предоставляющие имя ресурса внешним пользователям, проверяют это имя, чтобы убедиться, что это не попытка подделки другого удостоверения. Для дочернего ресурса формат имени зависит от того, вложен он в родительский ресурс или определен за его пределами. См. о настройке имени и типа дочернего ресурса.
comments
No
Заметки по ресурсам в шаблоне. Дополнительные сведения см. в разделе комментариев в шаблонах.
расположение
Разные
Поддерживаемые географические расположения указанного ресурса. Вы можете выбрать любое из доступных расположений. Но обычно имеет смысл выбрать расположение, которое находится недалеко от пользователей. Кроме того, целесообразно разместить взаимодействующие ресурсы в одном регионе. Большинству типов ресурсов нужно расположение, но некоторым типам (например, назначению роли) оно не требуется. См. статью Задание расположения ресурса в шаблоне ARM.
Свойство dependsOn
No
Ресурсы, которые должны быть развернуты перед развертыванием этого ресурса. Resource Manager оценивает зависимости между ресурсами и развертывает эти ресурсы в правильном порядке. Если ресурсы не зависят друг от друга, они развертываются параллельно. Значение может представлять собой разделенный запятыми список имен ресурсов или уникальных идентификаторов ресурсов. Выводится только список ресурсов, развертываемых в этом шаблоне. Ресурсы, которые не определены в этом шаблоне, уже должны существовать. Избегайте добавления ненужных зависимостей, так как это может замедлить развертывание и привести к созданию циклических зависимостей. Руководство по установке зависимостей см. в статье Определение порядка развертывания ресурсов в шаблонах ARM.
tags
No
Теги, связанные с ресурсом. Примените теги, чтобы логически организовать ресурсы в подписке.
В некоторых ресурсах допускается использовать значения, определяющие номер SKU для развертывания. Например, можно указать тип избыточности для учетной записи хранения.
kind
No
В некоторых ресурсах допускается использовать значение, которое определяет тип развертываемого ресурса. Например, можно указать тип создаваемого экземпляра Azure Cosmos DB.
Количество создаваемых ресурсов (если нужно несколько экземпляров). Параллельный режим используется по умолчанию. Используйте последовательный режим, если вы не хотите развертывать все ресурсы одновременно. Дополнительные сведения см. в статье Создание нескольких экземпляров ресурсов в Azure Resource Manager.
план
No
В некоторых ресурсах допускается использовать значения, определяющие номер плана для развертывания. Например, можно указать образ Marketplace для виртуальной машины.
свойства
No
Параметры конфигурации ресурса. Значения свойств совпадают со значениями, указываемыми в тексте запроса для операции REST API (метод PUT) для создания ресурса. Кроме того, можно указать массив copy для создания нескольких экземпляров свойства. Чтобы определить доступные значения, см. справочник по шаблонам.
ресурсы
No
Дочерние ресурсы, которые зависят от определяемого ресурса. Следует указать только те типы ресурсов, которые разрешены в схеме родительского ресурса. Зависимость от родительского ресурса не подразумевается. Ее необходимо определить явным образом. См. о настройке имени и типа дочернего ресурса.
Для поддержки символьного имени Bicep в шаблонах JSON ARM добавьте languageVersion версию или более новую версию 2.0 и измените определение ресурса из массива на объект.
В разделе outputs указываются значения, которые возвращаются после развертывания. Как правило, возвращаются значения из развернутых ресурсов. В шаблоне ограничено 64 выходных данных.
В следующем примере показана структура определения выходных данных:
Имя выходного значения. должен быть указан допустимый идентификатор JavaScript.
condition
No
Логическое значение, которое указывает, возвращается ли выходное значение. Если установлено значение true, то при развертывании значение является частью выходных данных. Если установлено значение false, при развертывании выходное значение не создается. Когда не задано, по умолчанию используется значение true.
type
Да
Тип выходного значения. Выходные значения поддерживает те же типы, что и входные параметры шаблона. Если указан тип выходных данных securestring, значение не отображается в журнале развертывания и его невозможно получить из другого шаблона. Чтобы использовать значение секрета в нескольких шаблонах, храните секрет в Key Vault и ссылайтесь на него в файле параметров. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.
значение
No
Выражение на языке шаблона, которое вычисляется и возвращается в качестве выходного значения. Укажите value или copy.
copy
No
Используется для возврата нескольких значений выходных данных. Укажите value или copy. Дополнительные сведения см. в статье Итерация выходных данных в шаблонах ARM.
Есть несколько вариантов добавления комментариев и метаданных к шаблону.
Комментарии
Для встроенных комментариев можно использовать символы // или /* ... */. В Visual Studio Code сохраните файлы параметров с комментариями в формате JSON с типом файла примечаний (JSONC), в противном случае вы получите сообщение об ошибке с сообщением "Комментарии, не разрешенные в JSON".
Примечание
При развертывании шаблонов с комментариями с помощью Azure CLI используйте версию 2.3.0 или более позднюю и укажите параметр --handle-extended-json-format.
JSON
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2023-03-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[parameters('location')]", //defaults to resource group location
"dependsOn": [ /* storage account and network interface must be deployed first */
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
В Visual Studio Code расширение инструментов Azure Resource Manager может автоматически определять шаблоны ARM и менять режим языка. Если в правом нижнем углу окна Visual Studio Code отображается надпись Шаблон Azure Resource Manager, то вы можете использовать встроенные комментарии. В таком случае встроенные комментарии больше не будут помечены как недопустимые.
Вы можете добавить объект metadata практически в любом месте шаблона. Resource Manager игнорирует объект, но ваш редактор JSON может предупредить вас, что свойство недопустимо. Определите необходимые свойства в объекте.
JSON
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "This template was developed for demonstration purposes.",
"author": "Example Name"
},
Для parameters добавьте объект metadata со свойством description.
JSON
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Virtual Machine."
}
},
При развертывании шаблона через портал текст, который вы указываете в описании, автоматически используется в качестве подсказки для этого параметра.
Для resources добавьте элемент comments или объект metadata. В приведенном ниже примере показаны элемент comments и объект metadata.
JSON
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}{1}', 'storage', uniqueString(resourceGroup().id))]",
"comments": "Storage account used to store VM disks",
"location": "[parameters('location')]",
"metadata": {
"comments": "These tags are needed for policy compliance."
},
"tags": {
"Dept": "[parameters('deptName')]",
"Environment": "[parameters('environment')]"
},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
]
Для outputs добавьте объект metadata к выходному значению.
Добавить объект metadata в пользовательские функции невозможно.
Многострочные строки
Строку можно разбить на несколько строк. Обратите внимание на свойство location и один из комментариев в приведенном ниже примере JSON.
Примечание
Для развертывания шаблонов с многострочными литералами используйте Azure PowerShell или Azure CLI. Что касается CLI, используйте версию не ниже 2.3.0 и укажите переключатель --handle-extended-json-format.
Многострочные литералы не поддерживаются при развертывании шаблона через портал Azure, конвейер DevOps или REST API.
JSON
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2023-03-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[
parameters('location')
]", //defaults to resource group location
/*
storage account and network interface
must be deployed first
*/
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
Использование любого languageVersion из этих -experimental условий не рекомендуется в рабочих средах, так как экспериментальная функциональность может быть изменена в любое время.
Примечание
Текущий выпуск расширения средств Azure Resource Manager для Visual Studio Code не распознает улучшения, внесенные в languageVersion 2.0.
Чтобы использовать languageVersion 2.0, добавьте "languageVersion": "2.0" в шаблон:
Используйте символическое имя вместо имени ресурса в reference функции. См. справочные материалы.
Функция references(), которая возвращает массив объектов, представляющих состояния среды выполнения коллекции ресурсов. См . ссылки.
Используйте свойство ресурса "существующий" для объявления существующих ресурсов для ARM для чтения, а не для развертывания ресурса. См. раздел "Объявление существующих ресурсов".
Создание определяемых пользователем типов. См . определение типа.
Дополнительные ограничения проверки агрегатного типа для использования в параметрах и выходных данных.
Управляйте множественными развертываниями в среде Azure ваших шаблонов Azure Resource Manager (шаблонов ARM) с использованием функций, переменных, тегов и файлов параметров.