Модуль 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, яка показує зміни в хмарі ще до того, як ви їх застосуєте.
ARM Templates: Фундамент
Розділ «ARM Templates: Фундамент»Усі дії в Azure — через портал, CLI або скрипти — проходять через Azure Resource Manager (ARM). Раніше інфраструктуру описували у форматі JSON (ARM Templates). Це працювало, але JSON дуже важко читати і писати людині.
Bicep — це “людське обличчя” для ARM. Ви пишете чистий код на Bicep, а він автоматично перетворюється на JSON для Azure.
Bicep: Код для вашої хмари
Розділ «Bicep: Код для вашої хмари»Ось як виглядає створення сховища (Storage Account) на Bicep:
param location string = resourceGroup().locationparam 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.
Практична вправа: Інфраструктура як код
Розділ «Практична вправа: Інфраструктура як код»- Встановіть розширення Bicep для VS Code.
- Напишіть шаблон, який створює мережу VNet та одну підмережу.
- Запустіть команду What-If, щоб побачити майбутні зміни.
- Розгорніть шаблон:
Terminal window az deployment group create --resource-group myRG --template-file main.bicep - Змініть назву підмережі в коді та деплойте знову — подивіться, як Azure оновить існуючий ресурс.
Вітаємо!
Розділ «Вітаємо!»Ви завершили трек Основ Azure DevOps. Тепер у вас є повний набір знань для роботи з хмарою Microsoft: від ідентифікації та мереж до безсерверних контейнерів та інфраструктури як коду.
Що далі?
- Перегляньте Розеттський камінь гіперскейлерів, щоб порівняти Azure з іншими хмарами.
- Перейдіть до треку Платформної інженерії, де ви навчитеся будувати IDP на базі цих сервісів.