Автоматизация развертывания инфраструктуры с помощью шаблонов Azure Arm

Автоматизация развертывания инфраструктуры с использованием шаблонов Azure ARM

Управление облачной инфраструктурой эволюционировало от ручного, клик-центрического обеспечения до декларативной, кодовой автоматизации. Шаблоны Azure Resource Manager (ARM) стоят в центре этого сдвига, позволяя разработчикам и командам ИТ-операций определять, развертывать и управлять ресурсами Azure с повторяемой точностью. Выражая желаемое состояние решения в структурированном документе JSON, шаблоны ARM устраняют изменчивость и риск, присущие ручной конфигурации. В этой статье рассматриваются основополагающие концепции, практические стратегии развертывания, передовые методы и проверенные лучшие практики для использования шаблонов ARM для автоматизации доставки инфраструктуры в масштабе.

Что такое Azure ARM Templates?

Шаблон Azure ARM представляет собой файл JavaScript Object Notation (JSON), который объявляет набор ресурсов Azure — таких как виртуальные машины, виртуальные сети, учетные записи хранения, базы данных и службы приложений — и их конфигурацию. Шаблон описывает , какие ресурсы необходимы, , как они относятся друг к другу, и , какие свойства они должны иметь. При развертывании служба Azure Resource Manager читает шаблон, создает или обновляет ресурсы, чтобы соответствовать желаемому состоянию, и сообщает о результате.

Шаблоны ARM являются идемпотентными: развертывание одного и того же шаблона несколько раз дает один и тот же результат, если параметры остаются неизменными. Это свойство имеет важное значение для рабочих процессов инфраструктуры в виде кода (IaC), поскольку оно позволяет командам уверенно повторно запускать развертывания, не вызывая непреднамеренных побочных эффектов. Шаблоны могут храниться в системах управления версиями, просматриваться в запросах на вытягивание и выполняться как часть непрерывной интеграции и непрерывной доставки (CI / CD) трубопроводов.

Каждый шаблон предназначен для группы ресурсов или подписки, и он может ссылаться на другие шаблоны, предоставляя модульные, композитные архитектуры. Независимо от того, предоставляете ли вы единую тестовую среду или многорегиональную производственную сеть, шаблоны ARM обеспечивают последовательный, проверяемый механизм для управления вашим присутствием Azure.

Преимущества использования шаблонов ARM

Организации, которые используют шаблоны ARM, получают несколько измеримых преимуществ, которые повышают операционную эффективность и управление.

Последовательность во всех средах

Ручная подготовка неизбежно вводит дрейф — несколько разные конфигурации между разработкой, постановкой и производством. Шаблоны ARM обеспечивают один источник истины. Когда вы развертываете один и тот же шаблон с параметрами, зависящими от среды, вы гарантируете, что базовая конфигурация ресурсов идентична. Эта согласованность уменьшает проблемы «работы на моей машине» и упрощает отладку.

Автоматизация трубопроводов CI/CD

Шаблоны ARM легко интегрируются с Azure DevOps, GitHub Actions, Jenkins и другими инструментами трубопроводов. Развертывание может быть запущено автоматически при выполнении кодовых обязательств, обновлении на основе графика или ручном одобрении. Эта автоматизация ускоряет циклы выпуска и освобождает операционные команды от повторяющегося выполнения задач. В сочетании с тестированием и валидацией инфраструктуры полностью автоматизированные трубопроводы становятся основой современной облачной инженерии.

Контроль версий и аудит

Поскольку шаблоны ARM являются простыми файлами JSON, они естественным образом вписываются в рабочие процессы на основе Git. Каждое изменение определения инфраструктуры отслеживается, позволяя командам просматривать историю, сравнивать изменения и возвращаться к известному состоянию. В сочетании с журналами активности Azure вы можете точно определить, какая версия шаблона использовалась для создания или изменения ресурса, поддерживая требования соответствия и аудита.

Скорость и параллелизация

Шаблоны ARM используют собственный механизм оркестровки Azure для развертывания ресурсов параллельно, где позволяют зависимости. Сложное многоуровневое приложение, которое может настроиться вручную за несколько часов, может быть предоставлено за считанные минуты. Кроме того, один и тот же шаблон может быть параметризирован для развертывания идентичных стеков в нескольких регионах одновременно, что позволяет быстро расширять географию или сценарии аварийного восстановления.

Контроль и управление затратами

Определяя размеры ресурсов, SKU и метки внутри шаблона, организации применяют политики тегов, которые поступают в центры затрат, возврата платежей и правил автоматизации. Шаблоны могут быть объединены с политикой Azure для предотвращения развертывания не соответствующих требованиям ресурсов, гарантируя, что каждая среда придерживается внутренней безопасности и ограничений затрат с момента ее создания.

Анатомия шаблона ARM

Понимание структуры шаблона ARM является первым шагом к эффективному использованию.Файл JSON организован в несколько разделов, каждый из которых играет определенную роль.

Схема и контент-версия

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

{
 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 ...
}

Параметры

Раздел определяет входные данные, которые могут быть предоставлены во время развертывания. Это делает шаблоны многоразовыми в разных средах. Общие параметры включают в себя учетные данные администратора, местоположение, имена ресурсов и выбор SKU. Значения по умолчанию могут быть предоставлены для упрощения развертывания.

Переменные

Переменные используются для упрощения выражений шаблонов, уменьшения повторения и вычисления значений, зависящих от параметров или других переменных. Например, вы можете связать префикс именования с именем среды для создания уникальных идентификаторов ресурсов.

Ресурсы

Ядром шаблона является массив . Каждый объект ресурса определяет поставщика ресурсов, тип, версию API, имя, местоположение, свойства и зависимости. Azure Resource Manager использует свойство для решения заказа — ресурсы, которые зависят от других, не развертываются до тех пор, пока не закончатся их предпосылки.

Результаты

Выходы возвращают значения после развертывания, такие как полностью квалифицированное доменное имя созданного веб-приложения или строка подключения базы данных. Эти выходы могут быть потреблены последующими трубопроводами или переданы связанным шаблонам для использования в качестве параметров.

Как развернуть шаблон ARM

Развертывание шаблонов ARM может быть выполнено с помощью нескольких интерфейсов, каждый из которых подходит для различных рабочих процессов. Ниже приведены наиболее распространенные методы, а также шаги наилучшей практики для каждого.

Использование Azure Portal

Для быстрого разового развертывания или в целях обучения портал Azure предоставляет лезвие «Развернуть пользовательский шаблон». Вы можете вставить JSON напрямую или загрузить его из файла. Портал затем предлагает вам заполнить значения параметров и отображает резюме проверки перед развертыванием. Хотя этот метод доступен, он не рекомендуется для производственных трубопроводов из-за отсутствия автоматизации.

Использование Azure CLI

Azure Command-Line Interface (CLI) предлагает команду для развертывания групп ресурсов.

az deployment group create \
 --resource-group myResourceGroup \
 --template-file azuredeploy.json \
 --parameters @parameters.json

CLI проверяет синтаксис шаблона и параметры перед началом развертывания, и он передает прогресс в терминал. Azure CLI широко используется в скриптах CI/CD, потому что он может работать на агентах Linux, macOS и Windows.

Использование Azure PowerShell

Пользователи PowerShell могут развертывать с помощью cmdlet . Опыт похож на CLI, с дополнительным преимуществом встроенной обработки ошибок PowerShell и возможностью интеграции с рунбуками Azure Automation.

Использование REST API

Для максимального контроля или пользовательского инструментария каждая операция развертывания может быть вызвана через API Azure Resource Manager REST. Это основной механизм, который используют портал, CLI и PowerShell, но его непосредственное раскрытие позволяет разработчикам встраивать развертывания в трубопроводы, не относящиеся к Microsoft.

Шаги развертывания

Независимо от инструментария, процесс развертывания следует последовательной схеме:

  1. Определить или приобрести шаблон ARM — либо написать с нуля, экспортировать из существующей группы ресурсов, либо использовать шаблон быстрого запуска из библиотеки AzureAzure Quickstart Templates.
  2. Параметры подготовки — создают отдельные параметры JSON-файла или передают значения параметров посредством аргументов командной строки. Избегайте секретов жесткого кодирования; вместо этого используйте ссылки Azure Key Vault.
  3. Проверить шаблон — запустить (PowerShell) или (CLI) для улавливания синтаксических ошибок и отсутствующих зависимостей перед фактическим развертыванием.
  4. Выполнить развертывание — представить шаблон и параметры в диспетчер ресурсов Azure.Необязательно установить режим развертывания в (по умолчанию) или , который удаляет ресурсы в группе ресурсов, не указанные в шаблоне.
  5. Мониторинг и проверка — проверка состояния развертывания в портале, Azure CLI или журналах трубопроводов.Подтвердите, что все ресурсы созданы с намеченной конфигурацией и что связь работает.

Лучшие практики для шаблонов ARM

Написание эффективных шаблонов ARM требует не только знания синтаксиса. Следующие методы были доказаны в производственных средах и рекомендованы инженерными командами Azure.

Модуляризация со связанными шаблонами

Большие монолитные шаблоны становятся трудными для обслуживания и повторного использования. Разбейте вашу инфраструктуру на логические компоненты - сети, вычисления, хранение, приложение - и сослайтесь на них с помощью связанных шаблонов. Этот подход позволяет различным командам владеть и редактировать свои модули независимо, все еще составляя полную среду. Используйте свойство , чтобы указать на URL-адрес детского шаблона и передать параметры по мере необходимости.

Всегда предоставляйте значения по умолчанию

Параметры, которые могут безопасно вернуться к разумному по умолчанию, должны включать . Это упрощает развертывание для разработчиков, которые могут не знать каждый SKU или местоположение. Однако избегайте по умолчанию чувствительных значений, таких как пароли, вместо использования ссылок Key Vault с типом .

Используйте выражения и функции

Шаблоны ARM поставляются с богатым набором функций шаблонов, таких как , , и , которые позволяют динамически конструировать имена, свойства и условия. Например, производит глобально уникальный детерминированный хеш, который может использоваться для именования учетных записей хранения или других ресурсов, требующих уникальности. Избегайте значений жесткого кодирования, которые могут быть получены из окружающей среды.

Внедрение контроля доступа на основе ролей (RBAC) в шаблоне

Не ждите, пока после развертывания вы назначите разрешения. Включите задания RBAC непосредственно в шаблон ARM с использованием типа ресурса . Это гарантирует, что каждая среда получит правильные разрешения с момента создания, уменьшая окно уязвимости и накладные расходы после развертывания конфигурации.

Валидировать с What-If

Перед запуском развертывания, которое может изменить существующие ресурсы, используйте операцию «что-если» ( или ). Это создает предварительный просмотр изменений, которые будет вносить шаблон — добавлений, изменений и удалений — без их применения.

Используйте теги последовательно

Применяйте теги к каждому ресурсу в вашем шаблоне для поддержки отслеживания затрат, автоматизации и управления ресурсами. Определите стандартный набор тегов (например, , , , ) и используйте параметры , чтобы передать их в. Теги могут быть унаследованы на уровне группы ресурсов, но явная маркировка в шаблоне обеспечивает более детальный контроль.

Храните шаблоны в Source Control

Относитесь к шаблонам ARM как к коду приложения. Поддерживайте их в репозитории Git с тем же ветвлением, обзором кода и стандартами тестирования, используемыми для программного обеспечения. Размещайте шаблоны в общедоступном месте (например, репо GitHub или блобе хранилища Azure), если вы планируете использовать связанные шаблоны, потому что менеджер ресурсов Azure должен иметь возможность загружать ссылающиеся файлы во время развертывания.

Расширенные сценарии

Как только вы освоите базовые развертывания, рассмотрите эти передовые модели для дальнейшего повышения автоматизации и гибкости.

Использование Azure Policy с шаблонами ARM

Azure Policy может обеспечивать соблюдение правил соответствия между подписками. При развертывании с шаблонами ARM политики могут отклонять или проверять определенные конфигурации ресурсов. Создавайте свои шаблоны, чтобы они были осведомлены о политике - например, путем параметризации SKU ресурсов в соответствии с разрешенными значениями, определенными в политике. Эта синергия предотвращает неудачное развертывание из-за нарушений политики и гарантирует, что каждое развертывание соответствует требованиям управления предприятием.

Интеграция с трубопроводами Azure DevOps

Полный трубопровод CI/CD для инфраструктуры может быть построен с использованием трубопроводов Azure.

Храните файлы параметров, специфичных для среды, в отдельных ветвях или вариабельных группах, чтобы сохранить сам шаблон агностическим для среды. Azure Key Vault может быть интегрирован для безопасного извлечения секретов во время работы трубопровода.

Включая пользовательские расширения сценариев

В то время как шаблоны ARM охватывают предоставление ресурсов, вам часто нужно выполнять скрипты конфигурации внутри виртуальной машины после ее создания. Ресурс , в частности расширение пользовательского сценария, позволяет встраивать сценарии PowerShell или Bash в шаблон или ссылаться на них через URL-адреса. Этот шаблон используется для установки программного обеспечения, присоединения доменов или корректировки правил брандмауэра - все это часть одного, идемпотентного развертывания.

Развертывание целых сред с помощью чертежей

Azure Blueprints расширяет концепцию шаблонов ARM путем объединения политик, ролевых заданий и групп ресурсов в единый, повторяемый артефакт. Для развертывания в масштабе предприятия, например, создания новой подписки со стандартизированным базовым уровнем управления, Blueprints обеспечивает абстракцию более высокого уровня, которая включает шаблоны ARM в качестве одного компонента. Это особенно полезно при встраивании новых проектов или бизнес-единиц.

Обычные подводные камни и как их избежать

Даже опытные инженеры сталкиваются с проблемами с шаблонами ARM. Осознание этих общих болевых точек может сэкономить часы устранения неполадок.

Заключение

Шаблоны Azure ARM являются фундаментальным инструментом для любого, кто управляет облачной инфраструктурой в Microsoft Azure. Они позволяют последовательно, автоматизированные и проверяемые развертывания, которые могут масштабироваться от одной виртуальной машины до глобальной многоуровневой прикладной сети. Овладевая структурой шаблона, методами развертывания и расширенными шаблонами, такими как связанные шаблоны, интеграция CI / CD и пользовательские расширения, команды могут достичь уровня операционной эффективности, который ручное обеспечение никогда не может соответствовать.

Путь к полной инфраструктуре как коду не происходит в одночасье. Начните с малого: экспортируйте существующую группу ресурсов в качестве шаблона, параметризируйте ее значения и установите контроль над источником. Постепенно расширяйте свою библиотеку многоразовых модулей, интегрируйте проверку и анализ «что если» в свой конвейер и принимайте декларативные политики вместе с вашими шаблонами. С каждой итерацией ваше развертывание в облаке будет становиться быстрее, надежнее и проще управлять.

Для дальнейшего чтения, изучите официальную документацию шаблона ARM и Azure Quickstart Templates repository , которая содержит сотни примеров, представленных сообществом. Автоматизация — это не просто избегание ручной работы — это создание основы для инноваций, которые могут идти в ногу с требованиями современной доставки программного обеспечения.