Создание шаблонов ARM
Создайте параметризованный шаблон ARM в формате JSON для развертывания учетной записи хранения и VM, а также используйте функции шаблонов и переменные, чтобы сделать шаблоны повторно используемыми.
«Создание шаблонов ARM» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Зачем использовать ARM-шаблоны
ARM-шаблоны позволяют определять инфраструктуру Azure как код в формате JSON. Благодаря этому развертывания становятся воспроизводимыми и согласованными, а шаблоны можно хранить под контролем версий вместе с кодом приложения. Шаблоны идемпотентны: многократный запуск одного и того же шаблона даёт одинаковый результат, поэтому его безопасно применять повторно после внесения изменений.
Каркас шаблона и схема
Каждый ARM-шаблон начинается со свойства $schema, указывающего URL схемы шаблона, за которым следует строка contentVersion. Схема сообщает порталу Azure и расширениям редактора, как проверять шаблон и предоставлять IntelliSense. Далее следуют пять основных разделов: parameters, variables, functions, resources и outputs.
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#',
'contentVersion': '1.0.0.0',
'parameters': {},
'variables': {},
'functions': [],
'resources': [],
'outputs': {}
}Определение параметров
Параметры делают шаблоны повторно используемыми, принимая входные данные во время развертывания. У каждого параметра есть type (string, int, bool, object, array, secureString), необязательное defaultValue и необязательные allowedValues для проверки. Использование secureString для паролей гарантирует, что значение никогда не будет записано в журнал истории развертываний.
"parameters": {
"storageAccountName": {
"type": "string",
"minLength": 3,
"maxLength": 24,
"metadata": { "description": "Globally unique storage account name" }
},
"sku": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": ["Standard_LRS", "Standard_GRS", "Premium_LRS"]
}
}Использование переменных для вычисляемых значений
Переменные хранят значения, вычисленные на основе параметров или функций шаблона, уменьшая повторения и упрощая обслуживание шаблонов. Переменные вычисляются один раз и используются во всём разделе ресурсов с помощью выражения [variables('name')]. Распространённый шаблон — формирование имени ресурса путём объединения параметра с уникальным суффиксом.
"variables": {
"uniqueStorageName": "[concat(parameters('storageAccountName'), uniqueString(resourceGroup().id))]",
"location": "[resourceGroup().location]"
}Определение ресурсов
Массив resources — это основа ARM-шаблона. Каждый элемент описывает один ресурс Azure и содержит обязательные поля: type, apiVersion, name и location. Поле apiVersion фиксирует версию схемы поставщика ресурсов. Всегда используйте последнюю стабильную версию, чтобы получить доступ к новейшим функциям и избежать устаревших свойств.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('uniqueStorageName')]",
"location": "[variables('location')]",
"sku": { "name": "[parameters('sku')]" },
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
]Функции и выражения шаблонов
Выражения ARM-шаблонов заключаются в квадратные скобки [...] и поддерживают встроенные функции для строк, массивов, объектов и идентификаторов ресурсов. Распространённые функции включают concat(), resourceGroup(), resourceId(), uniqueString() и parameters(). ARM вычисляет эти функции на стороне сервера во время развертывания, а не локально.
// Reference a resource ID inside a template
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'myVNet', 'mySubnet')]"
// Build a unique, deterministic name
"name": "[concat('storage', uniqueString(resourceGroup().id))]"
// Conditionally include a resource
"condition": "[equals(parameters('deployStorage'), true)]"Выходные данные: возврат значений
Раздел outputs определяет значения, которые ARM возвращает после успешного развертывания. Выходные данные необходимы для связывания шаблонов: сначала Вы разворачиваете сетевой шаблон и получаете идентификатор ресурса подсети, а затем передаёте его как параметр шаблону VM. Выходные данные могут ссылаться на любое выражение, включая свойства ресурсов из развертывания.
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('uniqueStorageName')]"
},
"blobEndpoint": {
"type": "string",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints.blob]"
}
}Связанные и вложенные шаблоны
Для сложных архитектур ARM поддерживает связанные шаблоны (ссылки на внешние URL-адреса шаблонов) и вложенные шаблоны (встраивание шаблона в массив ресурсов с использованием типа Microsoft.Resources/deployments). Это позволяет разделить крупное развертывание инфраструктуры на модульные, повторно используемые части, сохранив единый шаблон оркестрации в качестве точки входа.
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "networkDeploy",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://raw.githubusercontent.com/contoso/templates/main/network.json",
"contentVersion": "1.0.0.0"
},
"parameters": {
"vnetName": { "value": "[parameters('vnetName')]" }
}
}
}Файлы параметров
Вместо передачи параметров в командной строке сохраните их в отдельном файле параметров — файле JSON с объектом parameters, содержащим пары имя-значение. Файлы параметров могут быть специфичными для окружения (например, dev.parameters.json, prod.parameters.json) и храниться в системе управления исходным кодом, а конфиденциальные значения можно указывать через ссылки на Azure Key Vault, а не в виде обычного текста.
// dev.parameters.json
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#',
'contentVersion': '1.0.0.0',
'parameters': {
'storageAccountName': { 'value': 'devstorageacct' },
'sku': { 'value': 'Standard_LRS' }
}
}
// Deploy with parameters file
// az deployment group create -g MyRG -f azuredeploy.json -p dev.parameters.jsonРазвертывание и проверка шаблонов
Используйте команду Azure CLI az deployment group create, чтобы развернуть шаблон в группе ресурсов. Перед развертыванием в рабочей среде выполните az deployment group validate, чтобы обнаружить ошибки схемы и логики, а затем az deployment group what-if, чтобы просмотреть изменения ресурсов. Эти три команды образуют безопасный конвейер развертывания: проверка, предварительный просмотр, развертывание.
# Step 1: Validate the template syntax
az deployment group validate \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 2: Preview changes
az deployment group what-if \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 3: Deploy
az deployment group create \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.jsonРекомендации по ARM-шаблонам
Следуйте этим рекомендациям по работе с ARM-шаблонами: используйте параметры для значений, зависящих от окружения, используйте переменные, чтобы избежать повторений, фиксируйте версии API на стабильных версиях, используйте secureString для паролей, добавляйте описания в метаданных параметров и разделяйте большие шаблоны на связанные модули. Храните шаблоны в репозитории Git и разворачивайте их через конвейер CI/CD для возможности аудита.
Быстрая проверка
Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900), рассмотренных в этом уроке.
Итоги урока
В этом уроке Вы узнали, что ARM-шаблоны — это документы JSON, декларативно определяющие инфраструктуру Azure, параметры и переменные делают шаблоны повторно используемыми и удобными для сопровождения, а рабочий процесс validate, what-if, deploy обеспечивает безопасные и воспроизводимые развертывания. Далее мы рассмотрим Bicep — современный уровень абстракции над ARM JSON.
Часто задаваемые вопросы
Урок «Создание шаблонов ARM» бесплатный?
Да — полный текст урока «Создание шаблонов ARM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Создание шаблонов ARM»?
Создайте параметризованный шаблон ARM в формате JSON для развертывания учетной записи хранения и VM, а также используйте функции шаблонов и переменные, чтобы сделать шаблоны повторно используемыми. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание шаблонов ARM»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Как работает Azure Resource Manager
- Создание шаблонов ARM
- Bicep: современная IaC для Azure
- Terraform в Azure