Azure ARM Templates

Что такое Azure ARM Templates

Azure ARM Templates – это технология автоматизации администрирования облака. Она позволяет описать желаемое состояние ресурсов в виде json-файла. Потом скормить этот файл облаку (через портал, CLI) и получить соответствующие ресурсы, готовые для использования.
Первый раз эти "шаблоны" увидел в сэмплах от Microsoft. Почитал официальные доки и смог как-то применть. Времени ушло в разы меньше, чем я бы вручную несколько раз создавал те 11 ресурсов, которые использовались в этом сэмпле.

Кроме самого json-файла ничего не нужно. Его храним в репе и получаем все преимущества контроля версий (история; ветвление; совместная работа и прочее).
Файл состоит трёх разделов:

  • параметры (заполняются при использовании шаблона);
  • собственно, ресурсы (те, что раньше я видел и настраивал на портале);
  • переменные (используются внутри, чтобы уменьшить дублирование и повысить читаемость).

Под капотом тулинг Azure прочитает файл и будет дёргать своё REST API для создания/редактирования ресурсов. То есть, воспользуется Azure Resource Manager'ом.

Разберём примеры: простейший (сайт, один ресурс) и посложнее (бот, несколько связанных ресурсов).

Как работает Azure ARM Templates

Задача: создать в Azure ресурс для хостинга веб-приложения ASP.NET Core.

Алогритм:

  1. Создаю простецкий веб апп из шаблона (как тут описано). [комит]
  2. Единственное, что меняю в дотнетном шаблоне, это добавляю вывод значения из конфига. В локальном окружении берётся из appsettings.Development.json, а в облаке будет браться из переменной в разделе Settings у ресурса (логика "откуда брать" работает именно так из коробки, описано тут). [комит]
  3. Кладу в корень файл ARM Template, никаких ресурсов не описываю. Подключаюсь к Azure и скармливаю свой файл, чтобы убедиться в работоспособности самого процесса. Инфа, как это сделать (и шаблон json-файла), смотрю тут. [комит]
  4. Описываю в json-файле два ресурса: App Service и App Service Plan. Полный список доступных инструкций есть тут (раздел Reference). Надо только знать, идентификатор нужного вам типа ресурса. Например, для App Service – это "Microsoft.Web/sites" (я быстрее угадал, просматривая глазами, чем нашёл где-то список соответствия). Можно создать ресурс на портале, открыть его blade и в меню, в разделе Automation будет пункт Export Template; в полученном файле можно узнать много интересного (в том числе и идентификатор типа ресурса). Когда json-файл готов, скармливаю его Azure CLI. Пару минут и мои ресурсы готовы! Деплою туда своё веб-приложение и вижу его в браузере. [комит]
  5. Ещё хочу, чтобы в созданном ресурсе App Service была определена переменная окружения (значение которой моё веб-приложение выводит на главной странице). Для этого добавляю секцию "siteConfig" к параметрам ресурса типа "Microsoft.Web/sites". А после выполняю ту же команду Azure CLI. Я не говорил, но ARM Template идемпотентен, в файле описывается желаемое состояние. И не надо заботиться о том, что нужно сделать, чтобы её получить. Теперь веб-приложение показывает значение переменной окружения. [комит]

Что дальше

Я тут подсветил только самую верхушку технологии. Поглубже есть дополнительные возможности (и проблемы, разумеется). Параметры, переменные, функции, например. Ещё раз, ссылка на официальную документацию, удачи!
Если по алгоритму что-то не получилось или получилось, но непонятно как, пишите! С удовольствием отвечу. :)