Добавление гибкости в шаблон 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.

Вот выходные данные из того, что мы обсуждали до сих пор:

Изображение строки, созданной путем объединения слова Storage с 13-символьным хэшем, содержащим буквы в верхнем и нижнем регистре.

Чтобы строка соответствовала соглашениям об именовании, она должна быть в нижнем регистре. Здесь вы добавляете функцию toLower в качестве внешней функции.

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

Изображение строки, созданной путем объединения слова storage с хэшом 13 символов, а затем преобразование всех букв в строчный регистр.