Azure Resource Manager
Azure Resource Manager (ARM) — это сервис управления ресурсами в облачной платформе Microsoft Azure, предоставляющий единый уровень управления для развёртывания, настройки и администрирования ресурсов Azure. ARM реализует декларативную модель на основе шаблонов, что позволяет управлять инфраструктурой как кодом (Infrastructure as Code, IaC) и обеспечивает согласованность состояний ресурсов на протяжении всего их жизненного цикла. Введён в 2014 году, заменив классическую модель управления Azure Service Management (ASM), и с тех пор является основным интерфейсом для работы с Azure.
История
До появления ARM управление ресурсами в Azure осуществлялось через классическую модель развёртывания (Azure Service Management, ASM), которая была представлена в 2010 году. ASM работала на основе модели «роль — экземпляр» и не поддерживала группировку ресурсов, что создавало трудности при управлении сложными приложениями. Каждый ресурс создавался и управлялся независимо, без возможности объединения в логические единицы.
В 2014 году Microsoft анонсировала Azure Resource Manager как новую модель развёртывания и управления. Основные нововведения включали:
- Группы ресурсов — логические контейнеры для объединения связанных ресурсов (например, виртуальных машин, сетей, хранилищ), что упрощало их совместное управление и мониторинг.
- Декларативные шаблоны — возможность описывать желаемое состояние инфраструктуры в формате JSON (JavaScript Object Notation), что позволяло автоматизировать развёртывание и повторно использовать конфигурации.
- Управление доступом на основе ролей (RBAC) — детальная настройка прав доступа на уровне ресурсов и групп ресурсов.
- Тегирование — добавление метаданных (ключ-значение) для организации, фильтрации и учёта затрат.
С 2015 года ARM стал обязательным для всех новых ресурсов Azure, а в 2018 году Microsoft объявила о прекращении поддержки классической модели развёртывания для большинства сервисов. К 2020 году ARM полностью вытеснил ASM, хотя некоторые старые ресурсы (например, классические учётные записи хранения) всё ещё могут существовать.
Архитектура и принципы работы
ARM функционирует как единый слой управления, который обрабатывает все запросы к ресурсам Azure — от создания до удаления. Он взаимодействует с поставщиками ресурсов (Resource Providers), каждый из которых отвечает за определённый тип сервисов (например, Microsoft.Compute для виртуальных машин, Microsoft.Network для сетей, Microsoft.Storage для хранилищ).
Основные компоненты
- Группа ресурсов (Resource Group) — контейнер, объединяющий ресурсы, которые разделяют общий жизненный цикл, доступ и политики. Ресурс может принадлежать только одной группе, но группа может содержать ресурсы разных типов и регионов.
- Шаблон ARM (ARM Template) — JSON-файл, описывающий желаемое состояние инфраструктуры. Шаблон состоит из разделов:
$schema(схема версии),contentVersion(версия шаблона),parameters(входные параметры, например, имена или размеры),variables(локальные переменные),resources(определения ресурсов с их свойствами и зависимостями),outputs(возвращаемые значения, например, IP-адреса). - Поставщик ресурсов (Resource Provider) — сервис, который управляет конкретным типом ресурсов. Каждый поставщик регистрируется в подписке и может быть активирован или деактивирован.
- Политики Azure (Azure Policy) — механизм для применения правил соответствия (например, запрет на создание ресурсов определённого размера или в определённом регионе). Политики применяются на уровне подписки, группы управления или группы ресурсов.
- Управление доступом на основе ролей (RBAC) — система авторизации, которая назначает роли (например, «Владелец», «Участник», «Читатель») пользователям, группам или приложениям на определённую область (подписка, группа ресурсов, отдельный ресурс).
Процесс развёртывания
- Пользователь отправляет запрос на создание или обновление ресурса через портал Azure, Azure CLI, PowerShell или REST API.
- ARM проверяет запрос на соответствие политикам, RBAC и квотам подписки.
- ARM преобразует декларативное описание (шаблон) в последовательность вызовов к поставщикам ресурсов, учитывая зависимости между ресурсами (например, виртуальная машина не может быть создана до создания виртуальной сети).
- Поставщики ресурсов выполняют операции (создание, удаление, обновление) и возвращают результаты.
- ARM обновляет состояние ресурсов в своей базе данных и возвращает ответ пользователю.
ARM поддерживает идемпотентность: повторное применение одного и того же шаблона не приводит к дублированию ресурсов, а только корректирует их состояние до заданного.
Классификация шаблонов ARM
Шаблоны ARM можно классифицировать по нескольким признакам:
По способу использования
- Встроенные шаблоны — предоставляются Microsoft в Azure Marketplace или в документации, готовые к использованию для типовых сценариев (например, развёртывание веб-приложения с базой данных).
- Пользовательские шаблоны — создаются администраторами для конкретных проектов, могут храниться в репозиториях (например, GitHub) или в Azure.
- Связанные шаблоны — позволяют разбивать сложные развёртывания на несколько файлов, которые ссылаются друг на друга, что упрощает повторное использование и управление.
По уровню детализации
- Модульные шаблоны — описывают отдельные компоненты (например, одну виртуальную машину или сеть).
- Комплексные шаблоны — описывают всю инфраструктуру приложения, включая несколько групп ресурсов и регионов.
По формату
- JSON — оригинальный формат ARM, поддерживаемый с 2014 года.
- Bicep — предметно-ориентированный язык (DSL), представленный Microsoft в 2020 году как альтернатива JSON. Bicep имеет более лаконичный синтаксис, поддерживает модули и автоматически компилируется в JSON. Считается предпочтительным для новых проектов.
Применение
ARM используется во всех сценариях управления ресурсами Azure:
- Развёртывание инфраструктуры — автоматизация создания виртуальных машин, сетей, хранилищ, баз данных и других сервисов. Шаблоны ARM позволяют разворачивать идентичные среды (например, для разработки, тестирования и продакшена) с минимальными изменениями параметров.
- Управление конфигурациями — обновление существующих ресурсов (например, изменение размера виртуальной машины или добавление диска) без ручного вмешательства.
- Обеспечение соответствия — применение политик Azure для контроля за соблюдением корпоративных стандартов (например, использование только определённых регионов или типов хранилищ).
- Учёт затрат и тегирование — автоматическое добавление тегов (например, «Проект: X», «Окружение: Dev») при развёртывании, что упрощает анализ затрат и управление ресурсами.
- Миграция с классической модели — перенос ресурсов из ASM в ARM с помощью инструментов, таких как Azure Migrate.
Преимущества и ограничения
Преимущества
- Декларативность — описание желаемого состояния, а не последовательности команд, что снижает риск ошибок.
- Повторяемость — один и тот же шаблон можно использовать многократно для разных сред.
- Управление зависимостями — ARM автоматически определяет порядок создания ресурсов.
- Интеграция с CI/CD — шаблоны ARM могут быть включены в пайплайны Azure DevOps, GitHub Actions или Jenkins.
- Безопасность — встроенные RBAC и политики Azure позволяют ограничить доступ и действия.
Ограничения
- Сложность JSON — для больших проектов шаблоны могут стать громоздкими и трудночитаемыми, что частично решается использованием Bicep.
- Ограничения на размер шаблона — максимальный размер шаблона ARM составляет 4 МБ, а количество ресурсов в одном шаблоне — 800 (для Bicep — 800 модулей).
- Зависимость от поставщиков ресурсов — не все сервисы Azure полностью поддерживают ARM (например, некоторые функции Azure DevOps управляются через отдельные API).
- Время развёртывания — сложные развёртывания могут занимать до нескольких часов, особенно при большом количестве ресурсов.
Интересные факты
- ARM поддерживает развёртывание в нескольких регионах одновременно, что позволяет создавать глобально распределённые приложения из одного шаблона.
- В 2021 году Microsoft представила Azure Resource Manager Templates (ARM Templates) как часть Azure Quickstart Templates — библиотеки из более чем 1000 готовых шаблонов, доступных на GitHub.
- Bicep, альтернатива JSON, был разработан с учётом опыта Terraform и других IaC-инструментов и поддерживает обратную совместимость с ARM.
Источники
- Microsoft Learn: «What is Azure Resource Manager?» (документация Microsoft)
- Microsoft Docs: «Azure Resource Manager overview» (официальная документация)
- Azure Quickstart Templates (GitHub-репозиторий Microsoft)
- «Azure Resource Manager Templates: Best Practices» (Microsoft Press, 2020)
- Статья «Azure Resource Manager vs. Classic Deployment» (TechNet, 2015)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →