Infrastructure as Code (IaC) з AWS CloudFormation — автоматизація AWS

Ручне налаштування хмари обертається розбіжностями між контурами й тривалими розгортаннями. Ми описуємо інфраструктуру в AWS CloudFormation і передаємо контур під ключ: однаковий результат у будь-якому середовищі, час випуску скорочується кратно.
Часті запитання

AWS CloudFormation: де ручне налаштування хмари ламається

Ручне налаштування хмари ламається не на першому запуску, а на третьому-четвертому зміненні. Інженер додає правило в security group, піднімає інстанс, навішує теги — і повторює це в dev, stage та prod із пам'яті.

За тиждень середовища розходяться: у stage увімкнено логування, у prod — ні, версія образу на одному стенді оновлена, на іншому залишилася попередня. Яка конфігурація була робочою на момент інциденту — не знає ніхто.

Розходження конфігурації не видно до першого серйозного збою. Коли падає прод, відновлення перетворюється на археологію: частина налаштувань осіла в нотатках, частина — у голові інженера, який саме у відпустці.

Час відновлення зростає не тому, що команда працює повільно, а тому що середовище не можна відтворити з нуля.

Інфраструктура як код знімає це на рівні моделі: опис стенда живе в шаблонах, зміни проходять перевірку й потрапляють у систему контролю версій, а не в консоль.

Автоматизація AWS через CloudFormation робить кожен стенд результатом застосування одного й того ж опису — від мереж і балансувальників до прав доступу. Відтворюваність середовищ перестає залежати від того, хто саме збирав стенд і в якому порядку натискав кнопки.

Розбираємо, як це закривається на практиці: де проходять межі між шаблонами і що робити з ресурсами, які вже налаштовані вручну.

Що змінюється після переходу на шаблони інфраструктури

Перший контур, зібраний за описом, задає точку відліку: якщо раніше середовище піднімали руками кілька днів і кожен стенд виходив трохи іншим, то тепер розгортання займає 15-20 хвилин.

У стенді відтворюються мережа, права, групи безпеки та параметри сервісів — без «забутих» налаштувань із чек-листа.

Далі змінюється сама природа відкатів. Розходження налаштувань між стендами — найчастіше джерело «локально працює, на проді ні» — зникає як клас: частка відкатів із цієї причини падає з половини випусків до поодиноких випадків, бо всі середовища збираються з єдиного шаблону.

За кілька тижнів помітно скорочується час відновлення. Аварійний контур не лагодять вручну, а перестворюють з опису — десятки хвилин замість годин, проведених у правці конфігурацій під навантаженням. Відкат до попередньої версії середовища стає такою ж штатною операцією, як випуск.

Вартість простою перестає бути невідомою величиною. Вікно недоступності більше не розтягується на діагностику: воно обмежене часом застосування шаблону, а цей час відомий заздалегідь і його можна закладати в угоду про рівень сервісу.

На дистанції місяців ефект накопичується: зміни перевіряються до застосування, стенди піднімаються під кожну задачу і так само зносяться, середовища залишаються ідентичними.

AWS CloudFormation тут працює не як інструмент заради інструменту, а як виконуваний опис інфраструктури, який лежить у репозиторії поруч із кодом сервісу.

Способи опису інфраструктури: порівняння підходів

Декларативні шаблони описують бажаний стан, а інструмент сам приводить до нього акаунт — це прибирає розходження між документацією та реальністю. Але вибір конкретного підходу визначає, скільки інженерних годин іде на супровід щомісяця. Нижче — варіанти, між якими справді обирають, та їхні обмеження.

Варіант Коли підходить Обмеження
Шаблони CloudFormation (YAML/JSON) Уся інфраструктура в одній хмарі, потрібен нативний відкат стеку та зв'язка з ролями доступу Громіздкий синтаксис на великих описах, відкат іде цілком по стеку
Модулі мовою програмування (CDK, Pulumi) Команда пише код і хоче перевикористовувані модулі, цикли та перевірку типів З'являється крок збірки, потрібна дисципліна версій бібліотек
Описи на HCL (Terraform) В одному контурі кілька хмар і сервісів різних постачальників Окреме сховище стану, блокування узгоджуються вручну
Скрипти налаштування (Ansible) Приведення до єдиного вигляду вже працюючих машин, разові операції Не зберігають стан, повторний запуск дає різний результат

Модулі інфраструктури знімають головний біль: типова мережа, ролі доступу та логування описуються один раз і підключаються параметрами.

Замість копії шаблону на кожне середовище з'являється один модуль і файл значень — правка в ньому змінює всі середовища одразу, а не тричі вручну.

Обмеження автоматизації варто визнати заздалегідь. Ресурси, створені застосунками, дані у сховищах і правки через консоль залишаються поза описом — тому в процес закладають регулярне порівняння фактичного стану з шаблоном і правило, що стек залишається єдиним джерелом правди. Інакше вже перша ручна зміна обнуляє всю вигоду від автоматизації.

Порядок впровадження: від аудиту до передачі регламентів

Порядок робіт тут важливіший за швидкість: шаблон, зібраний без інвентаризації, описує не ту інфраструктуру, а виведення його одразу в продуктив перетворює помилку на простій. Тому етапи впровадження йдуть послідовно, і кожен наступний спирається на результат попереднього.

  1. Аудит інфраструктури. Проходимо по акаунтах і регіонах, фіксуємо фактичні ресурси, зв'язки між ними та зміни, зроблені руками в обхід описів. На виході — інвентарна відомість і перелік розходжень із документацією.

  2. Схема залежностей. Розкладаємо ресурси по стеках: мережа, обчислення, сховища, доступи. Визначаємо порядок створення і те, що не можна змінювати без простою, — це задає межі шаблонів CloudFormation.

  3. Збірка шаблонів. Описуємо ресурси декларативно, параметризуємо відмінності середовищ і виносимо секрети окремо від описів. Повторювані блоки згортаємо в спільні фрагменти — правка робиться в одному місці.

  4. Перевірка на стенді. Розгортаємо копію контуру в ізольованому середовищі та проганяємо повний цикл: створення з нуля, зміна, видалення. Розходження з очікуваним планом змін ловимо до продуктивного середовища.

  5. Виведення в продуктив. Переводимо ресурси під управління описами поетапно, звіряючи стан після кожного кроку. Попередня конфігурація зберігається до підтвердження результату — відкат залишається можливим.

  6. Передача регламентів. Віддаємо описи шаблонів, схему стеків, порядок правок і правила перевірки змін, інструкції з відкату. Команда замовника вносить зміни сама, без звернення до нас на кожному кроці.

Комплект шаблонів, схеми та регламенти передачі

Після впровадження в команди замовника залишається робочий репозиторій з описами інфраструктури, а не набір скриншотів із консолі.

Комплект розрахований на інженера, який не брав участі в роботах: за ним можна розгорнути середовище з нуля, побачити зв'язки між сервісами та безпечно провести зміну.

  • Шаблони середовищ — описи CloudFormation для розробки, тестового та продуктивного контурів. Різняться параметрами, а не копіями коду: правка в одному місці не розходиться по трьох версіях.
  • Схеми залежностей — порядок створення та видалення ресурсів, вкладені стеки, передача значень між ними. За схемою видно, що зачепить зміна конкретного ресурсу.
  • Політики доступу — ролі для розгортання та для застосунків, межі прав, розділення ручних правок і змін через шаблон.
  • Регламент змін — гілка, збірка, перевірка другим інженером, підтвердження для продуктивного контуру, порядок відкату на попередню версію.
  • Документація — призначення параметрів, вихідні значення, інструкція з розгортання з нуля, відомі обмеження та обхідні рішення.
  • Захисти від випадкового руйнування — заборона видалення стеку, політики на оновлення критичних ресурсів, регулярне звіряння фактичного стану з описом.
  • Каталог перевикористовуваних фрагментів — типові блоки мережі, сховища та прав, які підключаються в нові сервіси замість копіювання.

Комплект передаємо з розбором на працюючій інфраструктурі та розміткою, де що лежить. Далі ваша команда вносить зміни сама.

Кейс: як скоротився час розгортання контуру

Контур для приймання та передпродакшену збирався вручну за інструкцією: мережі, балансувальник, бази, права доступу.

Повне розгортання займало 6–8 годин роботи двох інженерів, а розходження між середовищами випливали вже на тестуванні — частину змін відкочували зворотними правками прямо в консолі.

Ми описали інфраструктуру декларативно в шаблонах Amazon Web Services CloudFormation: окремий стек на кожне середовище, спільні параметри винесені в окремий шар, зміни проходять рев'ю до застосування. Відкат перестав бути ручною операцією — повернення до попереднього стеку займає один крок.

До і після

Розгортання контуру з нуля скоротилося з 6–8 годин до 20–25 хвилин, і запускає його один інженер, не чекаючи на решту. Частка відмов під час викатки знизилася приблизно втричі: середовище відтворюється один в один, бо зміни приходять з опису, а не з ручних правок.

Час відновлення після збою конфігурації впав із кількох годин до 10–15 хвилин — контур просто перезбирається.

Окремий ефект — нові середовища: тестовий контур під задачу піднімається за пів години замість тижня узгоджень і збірки. Шаблони та параметри стали спільним активом: команда додає середовища копіюванням шару, а не повторенням інструкції.

Чим AWS CloudFormation відрізняється від ручних сценаріїв?

Скрипт виконує послідовність команд: створити, налаштувати, підключити. Він не знає, що вже зроблено, тому повторний запуск або падає на наявному ресурсі, або створює дублікат.

AWS CloudFormation працює за іншою моделлю — шаблон описує бажаний стан, а не порядок дій, і система сама приводить інфраструктуру до цього опису.

Ключова відмінність — управління станом. Стек зберігає відомості про фактично створені ресурси, тому повторне застосування шаблону обчислює різницю між описом і реальністю та змінює лише її.

Один і той самий шаблон застосовується багаторазово з однаковим результатом, а точкова правка параметра не перезбирає все середовище заново.

Далі шаблон стає єдиним джерелом правди. Він лежить у системі контролю версій і проходить перевірку як код, тому з історії змін видно, хто, коли і навіщо змінив конкретний параметр.

Правки, внесені в консолі вручну, випливають як розходження з шаблоном, а не живуть в інфраструктурі роками як нікому не відома деталь.

Оновлення теж ідуть інакше: перед застосуванням видно, що буде створено, змінено або видалено, а в разі помилки стек повертається до попереднього стану.

Невдалий прогон не залишає половину середовища в невідомому вигляді — відновлення та розгортання нового середовища виконуються за одним сценарієм.

Технічні сумніви перед початком робіт

Сумніви перед стартом зазвичай технічні: що буде з працюючим контуром, як контролювати правки в обхід шаблонів і хто отримує доступ до продакшену.

Уже є працюючий контур — усе перезбирати?

Ні. Ресурси описуємо в шаблонах і підключаємо до наявних налаштувань без перестворення: сервіси продовжують працювати. Далі зміни йдуть лише через шаблон, а консоль залишається для читання стану.

Чи можна впроваджувати частинами?

Так, за шарами: мережа, дані, застосунки. Кожен шар — окремий стек із явними залежностями, тому автоматизація однієї ділянки не блокує решту та не вимагає зупиняти роботи.

Як відстежувати ручні правки?

Перевірка розходжень показує зміни, зроблені в обхід шаблону. Їх або повертають у код, або свідомо закріплюють — невідомих відхилень у контурі не залишається.

Як ділити права доступу?

Ролі прив'язані до стеків і середовищ. У прод зміни потрапляють лише через конвеєр із рев'ю; у розробників — тестовий контур і читання стану проду.

Що з відкатом змін?

Перед застосуванням показуємо план: що створюється, змінюється, видаляється. Відкат — повернення до попередньої версії шаблону, стан стеку приводиться до неї.

Обговоримо задачу та повернемося з планом впровадження

На першому розборі дивимося не на формулювання «потрібен код замість ручних правок», а на фактичний стан інфраструктури: що вже описано в шаблонах AWS CloudFormation, а що досі піднімається руками з консолі.

Уточнюємо кількість середовищ і облікових записів, розділення бойового та тестового контурів, схему доступу команди і те, як зміни зараз потрапляють у бойове середовище — ручною правкою чи через автоматизоване розгортання.

Окремо фіксуємо, що не можна чіпати без нагальної потреби: бази з даними, мережеві правила, прив'язки доменів.

Повертаємося з документом, а не з усними обіцянками: у ньому видно, з чого складається робота, скільки займає кожен етап і на якому кроці ви отримуєте проміжний результат.

  • карта інфраструктури: які ресурси переходять під управління шаблонами, які залишаються поза кодом і чому;
  • склад робіт за етапами — від підготовки описів до перенесення середовищ і налаштування розгортання;
  • строки кожного етапу та точки, де ви бачите працюючий результат, а не звіт;
  • порядок міграції з планом відкату до попереднього стану на кожному кроці;
  • правила іменування ресурсів, розбиття на перевикористовувані блоки та зберігання параметрів;
  • перелік перевірок, які проганяються до застосування змін до бойового контуру;
  • критерії приймання: що вважається виконаним на кожному етапі та хто це підтверджує.

Опишіть задачу — кількості середовищ, поточного способу розгортання та обмежень щодо доступів достатньо, щоб ми повернулися з оцінкою та планом робіт.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139