0Pricing
Cloud & IT Cert Prep · Урок

Создание шаблонов 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 — локальная установка не требуется.

Все уроки этого курса

  1. Как работает Azure Resource Manager
  2. Создание шаблонов ARM
  3. Bicep: современная IaC для Azure
  4. Terraform в Azure
← Назад к Cloud & IT Cert Prep