Перейти до вмісту

Модуль 3.12: Основи ARM та Bicep

Складність: [MEDIUM] | Час на виконання: 1.5 год | Передумови: Модуль 3.1 (Entra ID), базовий Azure CLI

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

У березні 2022 року команда платформи однієї SaaS-компанії мала відновити тестове середовище після аварії. Середовище складалося з 23 ресурсів: мережі, 3 сайтів, бази даних, кешу та сховищ. Оригінальне середовище створювалося вручну в порталі Azure протягом кількох місяців, а налаштування були записані в старій вікі-сторінці, яку ніхто не оновлював. Відновлення зайняло у 5 інженерів 3 повні дні. Коли “відновлене” середовище нарешті запустили, 6 сервісів не працювали через дрібні відмінності в конфігурації. Ціна помилки: $15 000 в інженерних годинах.

Після цього команда витратила тиждень на написання шаблонів Bicep. Тепер розгортання всього середовища з нуля займає 12 хвилин. Коли їм знадобилося ще одне середовище для тестів, вони просто запустили одну команду з іншими параметрами і пішли на обід. Інфраструктура була готова раніше, ніж вони закінчили їсти.

Це і є обіцянка Infrastructure as Code (IaC): ваша інфраструктура описана у файлах, а не в чиїйсь пам’яті чи вікі. Bicep — це сучасна мова від Microsoft, яка робить опис ресурсів Azure простим і зрозумілим для людей.

У цьому модулі ви навчитеся структурі шаблонів, опануєте синтаксис Bicep, навчитеся використовувати модулі для повторного використання коду та дізнаєтеся про функцію What-If, яка показує зміни в хмарі ще до того, як ви їх застосуєте.


Усі дії в Azure — через портал, CLI або скрипти — проходять через Azure Resource Manager (ARM). Раніше інфраструктуру описували у форматі JSON (ARM Templates). Це працювало, але JSON дуже важко читати і писати людині.

Bicep — це “людське обличчя” для ARM. Ви пишете чистий код на Bicep, а він автоматично перетворюється на JSON для Azure.


Bicep: Код для вашої хмари

Розділ «Bicep: Код для вашої хмари»

Ось як виглядає створення сховища (Storage Account) на Bicep:

param location string = resourceGroup().location
param storageName string = 'stkubedojo${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}

Ключові концепції:

Розділ «Ключові концепції:»
  • Parameters: Значення, які можна міняти при запуску (напр. “dev” або “prod”).
  • Variables: Внутрішні розрахунки (напр. створення унікальної назви).
  • Resources: Самі сервіси Azure, які ми хочемо створити.
  • Modules: Можливість розділити один великий файл на маленькі шматочки (напр. окремо мережа, окремо база).

What-If: Перевірка перед деплоєм

Розділ «What-If: Перевірка перед деплоєм»

Це найважливіша команда. Вона порівнює ваш код із тим, що вже є в Azure, і показує різницю:

  • + створити новий ресурс.
  • ~ змінити існуючий.
  • - видалити.

Завжди запускайте What-If перед деплоєм у продакшн, щоб випадково не видалити базу даних!


ПомилкаЧому це стаєтьсяЯк виправити
Ручні зміни в порталі”Треба швидко підправити одну галочку”Будь-яка ручна зміна буде затерта при наступному деплої Bicep. Вносьте зміни тільки в код
Жорстке прописання імен”Назву сервер MyServer”Імена багатьох ресурсів мають бути унікальними у всьому світі. Використовуйте функцію uniqueString()
Один гігантський файлКод стає некерованимРозділяйте інфраструктуру на модулі: network.bicep, db.bicep тощо
Немає перевірки What-IfСліпа довіра до свого кодуЗробіть az deployment group what-if обов’язковим кроком у вашому CI/CD

1. У чому різниця між Bicep та Terraform для роботи з Azure?

Bicep — це нативна мова від Microsoft тільки для Azure. Вона не потребує зберігання “файлу стану” (state file), бо Azure сама знає стан ресурсів. Terraform — мультихмарний, він працює з AWS, GCP та іншими, але потребує управління файлом стану.

2. Що таке "Scope" (Область дії) деплою в Bicep?

Scope визначає, де будуть створені ресурси. За замовчуванням це Resource Group, але ви можете деплоїти на рівні Subscription (напр. для створення нових груп ресурсів) або Tenant.


Практична вправа: Інфраструктура як код

Розділ «Практична вправа: Інфраструктура як код»
  1. Встановіть розширення Bicep для VS Code.
  2. Напишіть шаблон, який створює мережу VNet та одну підмережу.
  3. Запустіть команду What-If, щоб побачити майбутні зміни.
  4. Розгорніть шаблон:
    Terminal window
    az deployment group create --resource-group myRG --template-file main.bicep
  5. Змініть назву підмережі в коді та деплойте знову — подивіться, як Azure оновить існуючий ресурс.

Ви завершили трек Основ Azure DevOps. Тепер у вас є повний набір знань для роботи з хмарою Microsoft: від ідентифікації та мереж до безсерверних контейнерів та інфраструктури як коду.

Що далі?