Добавление гибкости в шаблон Azure Resource Manager с помощью функций шаблона
В данном сценарии необходимо максимально беспроблемно развернуть шаблон Azure Resource Manager (ARM) в различных средах. Одним из важных вопросов является выбор уникального имени для учетной записи хранения Azure.
Чтобы решить эту проблему, вы создали выражение с помощью функций шаблона ARM.
Что такое функции шаблона ARM?
Функции шаблона ARM обеспечивают гибкость шаблона ARM путем динамического получения значений в процессе развертывания.
Чтобы получить понимание функции, сначала необходимо понять выражения. Выражения — это значения, которые вычисляются при развертывании шаблона. Они начинаются и заканчиваются скобками []
и могут возвращать строку, целое число, логическое значение, массив или объект.
В предыдущем модуле этой схемы обучения вы уже работали с выражениями в шаблоне Resource Manager. Например, вы использовали:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
Выражение является значением атрибута defaultValue:
. Обратите внимание, что это выражение содержит функцию шаблона ARM resourceGroup()
. Эта функция возвращает сведения о группе ресурсов, в которую выполняется развертывание этого шаблона. .location
извлекает одно свойство из объекта, возвращаемого данной функцией. Функции позволяют создавать значения, которые необходимы динамически.
Порядок работы с функциями шаблона ARM
При работе с функциями необходимо следовать нескольким правилам:
При передаче строкового значения в функцию используйте одинарные кавычки. Вот пример:
concat('storage',uniqueString(resourceGroup().id))
. Функция имеет значениеconcat
, и строка, которую вы передаете в функцию'storage'
.Для работы с литеральными значениями в функциях шаблона требуются escape-символы. Escape-символ может быть разным в зависимости от того, что вы используете для преобразования.
Чтобы задать для свойства значение NULL, можно использовать
null
или[json('null')]
. Функция JSON возвращает пустой объект при предоставлении в качестве параметра значения NULL."stringValue": null, "objectValue": "[json('null')]"
Resource Manager предлагает несколько функций шаблонов ARM. Функции перечислены в группах в зависимости от типа:
- Функции массивов для работы с массивами. Например,
first
иlast
. - Функции сравнения для выполнения сравнений в шаблонах. Например,
equals
иgreater
. - Функции даты для работы с датами. Например,
utcNow
иdateTimeAdd
. - Функции значений развертывания для получения значений из разделов шаблона и значений, относящихся к развертыванию. Например,
environment
иparameters
. - Логические функции для работы с логическими условиями. Например,
if
иnot
. - Числовые функции для работы с целыми числами. Например,
max
иmod
. - Функции объекта для работы с объектами. Например,
contains
иlength
. - Функции ресурсов для получения значений ресурсов. Например,
resourceGroup
иsubscription
. - Строковые функции для работы со строками. Например,
length
иstartsWith
.
Использование нескольких функций в одном выражении
Для создания собственных выражений можно использовать несколько функций шаблона. В этом сценарии необходимо составить выражение, создающее уникальное имя для каждой группы ресурсов, путем объединения префикса входных данных с хэшем идентификатора группы ресурсов. В результате этого выражения имена учетных записей хранения Azure выглядят как dev2hu6fktr577wh
или staging5his8hgr67tt5
. Для создания этого строкового значения можно использовать четыре функции. Например:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Давайте рассмотрим это выражение.
Начиная с сцепения эта функция принимает любое количество аргументов и может принимать строки или массивы для параметров. Здесь вы используете литеральную строку "Storage"
и объединяете ее с результатом другой функции, uniqueString. Функция uniqueString
создает детерминированную хэш-строку на основе параметров. В этом выражении вы создаете хэш текущего идентификатора группы ресурсов, используя другую функцию, resourceGroup.
Вот выходные данные из того, что мы обсуждали до сих пор:
Чтобы строка соответствовала соглашениям об именовании, она должна быть в нижнем регистре. Здесь вы добавляете функцию toLower в качестве внешней функции.
Результирующая строка выглядит следующим образом: