Что такое шаблоны ARM?
При переходе в облако многие команды приняли гибкие методы разработки. Эти команды быстро выполняют итерации. Им необходимо многократно развертывать свои решения в облаке и знать, что их инфраструктура надежна. По мере того как инфраструктура стала частью итеративного процесса, разделение между операциями и развитием исчезло. Командам надо управлять инфраструктурой и кодом приложения с помощью единого процесса.
Чтобы удовлетворить эти проблемы, автоматизируйте развертывания и используйте практику инфраструктуры в качестве кода. В коде определяется инфраструктура, которую надо развернуть. Код инфраструктуры является частью проекта. Как и код приложения, храните код инфраструктуры в исходном репозитории и его версию. Любой участник команды может запускать код и развертывать подобные среды.
Чтобы реализовать инфраструктуру в качестве кода для решений Azure, используйте шаблоны Azure Resource Manager (шаблоны ARM). Шаблон является файлом нотации объектов JavaScript (JSON), определяющим инфраструктуру и конфигурацию вашего проекта. Шаблон использует декларативный синтаксис, который позволяет указать объект, который вы собираетесь развернуть. При этом, для развертывания объекта, не нужно писать последовательность команд. В шаблоне указывают ресурсы для развертывания, а также свойства этих ресурсов. Можно также указать, в какой группе ресурсов развертываются эти ресурсы.
Совет
Мы представили новый язык Bicep , который предлагает те же возможности, что и шаблоны ARM, но с синтаксисом, который проще использовать. Во время развертывания каждый файл Bicep автоматически преобразуется в шаблон ARM. Если вы рассматриваете инфраструктуру в качестве параметров кода, рекомендуем Bicep. Дополнительные сведения см. в статье Что такое Bicep.
Почему выбирают шаблоны ARM?
Если вам надо принять решение и выбрать использование шаблонов ARM или другой инфраструктуры в качестве служб кода, рассмотрите преимущества использования шаблонов, описанные ниже.
Декларативный синтаксис. Шаблоны ARM позволяют декларативно создавать и развертывать всю инфраструктуру Azure. Например, можно развертывать не только виртуальные машины, но и сетевую инфраструктуру, системы хранения и любые другие необходимые ресурсы.
Повторяющиеся результаты. Выполняйте повторное развертывание инфраструктуры на протяжении всего цикла разработки и будьте уверены, что ресурсы развертываются согласованным образом. Шаблоны являются идемпотентными, то есть можно многократно развертывать один и тот же шаблон и получать те же типы ресурсов в том же состоянии. Можно разработать один шаблон, представляющий требуемое состояние, и не разрабатывать множество отдельных шаблонов для представления обновлений. Например, следующий файл создает учетную запись хранения. Если развернуть этот шаблон и учетную запись хранения с указанными свойствами уже существует, изменения не вносятся.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": {
"mystore": {
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-04-01",
"name": "mystorageaccount",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
}
}
Оркестрация. Не следует беспокоиться о сложности операций упорядочивания. Resource Manager организует развертывание взаимозависимых ресурсов так, чтобы они создавались в правильном порядке. По возможности Resource Manager развертывает ресурсы параллельно, поэтому развертывание завершается быстрее, чем последовательные развертывания. Шаблон развертывается с помощью одной команды, а не путем выполнения нескольких императивных команд.
Модульные файлы. Шаблоны можно разбить на более мелкие, многократно используемые компоненты и связать их в процессе развертывания. Также можно вложить один шаблон в другой.
Создание любого ресурса Azure. В шаблонах можно немедленно использовать новые службы и функции Azure. Как только поставщик ресурсов представит новые ресурсы, их можно развертывать с помощью шаблонов. Чтобы использовать новые службы, не надо ждать обновления средств или модулей.
Расширяемость. Сценарии развертывания позволяют добавлять в шаблоны сценарии PowerShell или Bash. Скрипты развертывания расширяют возможности настройки ресурсов в процессе развертывания. Вы можете включить скрипт в шаблон или сохранить его во внешнем источнике и ссылаться на него в шаблоне. С помощью сценариев развертывания можно выполнить сквозную настройку среды в одном шаблоне ARM.
Тестирование. Чтобы убедиться, что шаблон следует рекомендациям, протестируйте его с помощью набора средств шаблона ARM (arm-ttk). Этот тестовый набор является сценарием PowerShell, который можно загрузить на сайте GitHub. Набор средств позволяет упростить разработки с помощью языка шаблона.
Предварительный просмотр изменений: перед развертыванием шаблона используйте операцию what-if для предварительного просмотра изменений. С помощью what-if вы увидите, какие ресурсы следует создавать, обновлять или удалять, а также какие-либо свойства ресурсов для изменения. Операция "что если" проверяет текущее состояние среды и устраняет необходимость в управлении состоянием.
Встроенная проверка. Шаблон развертывается только после прохождения проверки. Resource Manager проверяет шаблон перед началом развертывания, чтобы убедиться, что он выполнен успешно. После этого уменьшается вероятность остановки развертывания в незавершенном состоянии.
Отслеживаемые развертывания. На портале Microsoft Azure можно просмотреть журнал развертывания и получить информацию о шаблоне развертывания. Можно просмотреть развернутый шаблон, переданные значения параметров и любые выходные значения. На портале невозможно отслеживать другие инфраструктуры, например службы кода.
Политика как код. Политика Azure — это политика, которая используется как платформа кода для автоматизации управления. Если вы используете политики Azure, исправление политик выполняется в несоответствующих ресурсах при развертывании с помощью шаблонов.
Схемы развертывания. Можно воспользоваться преимуществами схем, предоставляемых корпорацией Майкрософт, чтобы выполнить нормативные требования и стандарты соответствия. Эти схемы включают предварительно созданные шаблоны для различных архитектур.
Интеграция CI/CD. Вы можете интегрировать шаблоны в средства непрерывной интеграции и непрерывного развертывания (CI/CD). Эта интеграция автоматизирует конвейеры выпуска для быстрого и надежного обновления приложений и инфраструктуры. Выполняя задачу шаблона Azure DevOps и Resource Manager, можно использовать Azure Pipelines для непрерывной сборки и развертывания проектов шаблонов ARM. Дополнительные сведения см. в статье Проект VS с конвейерами и учебнике Непрерывная интеграция шаблонов Azure Resource Manager с Azure Pipelines.
Экспортируемый код: можно получить шаблон для существующей группы ресурсов, экспортируя текущее состояние группы ресурсов или просматривая шаблон, используемый для определенного развертывания. Чтобы лучше понять синтаксис шаблона, изучите экспортированный шаблон.
Средства разработки. Шаблоны можно создавать с помощью Visual Studio Code и расширения средства шаблонов. Вы получаете IntelliSense, выделение синтаксиса, встроенную справку и многие другие языковые функции. В дополнение к Visual Studio Code можно использовать Visual Studio.
Файл шаблона
В рамках шаблона можно создавать выражения шаблонов, расширяющие возможности JSON. Эти выражения используют функции , которые предоставляет Resource Manager.
Шаблон состоит из разделов, описанных ниже.
Параметры . Укажите значения во время развертывания, которые настраивают для разных сред при использовании одного шаблона.
Переменные— определение значений , которые вы повторно используете в шаблонах. Их можно создать из значений параметров.
Определяемые пользователем функции. Создает настраиваемые функции, упрощающие шаблон.
Ресурсы. Указывает ресурсы для развертывания.
Выходные данные. Возвращает значения из развернутых ресурсов.
Процесс развертывания шаблона
При развертывании шаблона Resource Manager преобразует шаблон в операции REST API. Например, Resource Manager получает шаблон со следующим определением ресурса:
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "mystorageaccount",
"location": "centralus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
]
Он преобразует определение в следующую операцию REST API, которая отправляется поставщику ресурсов Microsoft.Storage:
PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
"location": "centralus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {}
}
Обратите внимание, что параметр apiVersion, заданный в шаблоне для ресурса, используется в качестве версии API для операции REST. Вы можете многократно развернуть шаблон и обеспечить уверенность в том, что он продолжает работать. Если использовать одну и ту же версию API, можно не беспокоиться о критических изменениях, которые могут появиться в более поздних версиях.
Для развертывания шаблона можно использовать любой из нижеуказанных вариантов.
Конструктор шаблонов
Определите шаблоны и группы ресурсов на основе способа управления решением. Например, можно развернуть трехуровневое приложение с помощью одного шаблона в одной группе ресурсов.
Вам не нужно определять всю инфраструктуру в одном шаблоне. Во многих случаях целесообразно разделять требования к развертыванию между несколькими наборами шаблонов, предназначенными для определенных задач. Эти шаблоны можно многократно использовать для различных решений. Чтобы развернуть конкретное решение, создайте основной шаблон, который связывает все необходимые шаблоны. На следующем рисунке показано, как развернуть трехуровневое решение с помощью родительского шаблона, включающего три вложенных шаблона.
Если в вашем случае у уровней отдельные жизненные циклы, эти уровни можно развернуть в отдельные группы ресурсов. Ресурсы по-прежнему могут быть связаны с ресурсами в других группах ресурсов.
Дополнительные сведения см. в статье Использование связанных шаблонов в Azure Resource Manager.
Общие шаблоны
После создания шаблона может потребоваться поделиться им с другими пользователями в организации. Спецификации шаблонов позволяют сохранять шаблон как тип ресурса. Используйте управление доступом на основе ролей для управления доступом к спецификации шаблона. Пользователи с доступом на чтение к спецификации шаблона могут развернуть его, но не изменить шаблон.
Такой подход означает, что можно безопасно обмениваться шаблонами, соответствующими стандартам организации.
Поддержка
Ниже приведены шаги по открытию запроса в службу поддержки для проблем, связанных с шаблоном Azure Resource Manager (ARM):
Откройте портал Azure.
Щелкните значок "Поддержка и устранение неполадок" в правом верхнем углу.
В кратком описании проблемы введите шаблон ARM и нажмите кнопку "Перейти".
В какой службе возникла проблема?выберите портал в разделе "Мониторинг и управление", а затем нажмите кнопку "Далее".
Выберите подписку и нажмите кнопку Далее.
Выберите "Проблема с шаблонами ARM" и нажмите кнопку "Далее".
Следующие шаги
- Пошаговые инструкции по созданию шаблона см. в статье Учебник. Создание и развертывание первого шаблона ARM.
- Чтобы узнать больше о шаблонах ARM с помощью управляемого набора модулей Microsoft Learn, см. статью Развертывание ресурсов и управление ими в Azure с помощью шаблонов ARM.
- Сведения о свойствах в файлах шаблонов см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.
- Сведения об экспорте шаблонов см. в статье Краткое руководство. Создание и развертывание шаблонов ARM с помощью портала Microsoft Azure.
- Ответы на распространенные вопросы см. в разделе Часто задаваемые вопросы о шаблонах ARM.