Що таке AWS CloudFormation?

AWS CloudFormation — це сервіс Amazon Web Services, який дає змогу автоматизовано створювати, змінювати, оновлювати й видаляти інфраструктуру в хмарі AWS. Для цього він використовує декларативні шаблони (темплейти) у форматі YAML або JSON.
Його принцип роботи базується на підході «інфраструктура як код» (IaC), що дозволяє керувати ресурсами як програмним кодом без ручної метушні.
Розвиток AWS CloudFormation
AWS CloudFormation був запущений у 2011 році як сервіс для автоматизації створення і керування інфраструктурою в AWS. Спочатку він допомагав користувачам описувати свою інфраструктуру за допомогою темплейтів у форматі JSON, підтримуючи 13 з 15 наявних сервісів AWS.
У 2016 році CloudFormation додав підтримку YAML, тому шаблони стали більш зрозумілими та зручними для читання. Звідси й менша кількість помилок, і простіша робота з інфраструктурою, оскільки YAML виглядає значно чистіше, ніж JSON.
У 2018 році з’явилась функція Drift Detection. Вона дозволяє перевіряти, чи не було змінено щось вручну у ресурсах, які ти розгортав за допомогою темплейтів.
З 2019 року CloudFormation отримав нові можливості для розширення. Відтоді можна створювати кастомні ресурси через CloudFormation Registry. І, звісно, додали CLI, бо куди ж без нього.
А сьогодні AWS CloudFormation підтримує понад 200 сервісів і є основним сервісом для автоматизації управління інфраструктурою в AWS. Він безпечно й ефективно розгортає складні архітектури та автоматизує процеси в хмарі.
Як працює AWS CloudFormation?
- Написання темплейту
Починаєш із шаблону в YAML або JSON. Це, по суті, детальний список твоїх потреб: які ресурси створити, як вони мають бути пов’язані, хто головний, хто допоміжний. - Запуск стека
Далі ти запускаєш темплейт як стек — набір ресурсів, який автоматично створюється згідно з твоїми вимогами. Він допомагає організувати їх в логічну групу, що спрощує їх управління. - Автоматичне створення та управління ресурсами
CloudFormation автоматично створює, налаштовує й оновлює ресурси відповідно до твоїх вказівок. Кожен етап виконується без потреби втручатися вручну.
З чого складається CloudFormation?
У шаблоні CloudFormation є кілька секцій, але головна — Resources. Саме тут описуються всі ресурси, які мають з’явитися в AWS.
Інші секції — не обов’язкові, але з ними все працює набагато зручніше:
AWSTemplateFormatVersion — вказує версію формату темплейту.
Description — короткий опис, що робить темплейт.
Metadata — додаткова технічна інформація про шаблон або його частини.
Parameters — дозволяють передавати значення під час запуску, щоб робити темплейт гнучкішим.
Mappings — задають фіксовані значення для різних сценаріїв (наприклад, регіонів).
Conditions — можливість задавати умови для створення ресурсів.
Transform — використовується, коли ти підключаєш макроси або, наприклад, AWS Serverless Application Model (SAM).
Outputs — визначають, яку інформацію показати після створення стека (наприклад, URL сервера або ID ресурсу).
Основні переваги CloudFormation
- Шаблони для автоматизації ресурсів
Ти можеш створювати шаблони для автоматизованого створення різноманітних ресурсів AWS. До них відносяться EC2, S3, RDS, Lambda та інші. - Управління стеками
Ресурси можна згрупувати в стек — набір пов’язаних ресурсів, який керується як єдине ціле. - Оновлення та зміни конфігурацій
CloudFormation визначає зміни, необхідні для оновлення інфраструктури. Вона забезпечує безперервну роботу ресурсів під час оновлення. - Статус і моніторинг
Можна дивитися, що з твоїм стеком: все ок чи щось горить. Сповіщення теж є. - Підтримка параметрів та умов
Шаблони можуть використовувати параметри для гнучкості. Умови допомагають налаштувати їх для різних сценаріїв. - Інфраструктура як код (IaC)
Ми вже це згадували, та нагадуємо ще раз. CloudFormation дозволяє описувати інфраструктуру як код. Це полегшує автоматизацію розгортання та забезпечує версійність інфраструктури.
Недоліки та обмеження CloudFormation
- CloudFormation може бути складним для новачків, оскільки вимагає глибокого розуміння структури темплейтів і синтаксису.
- Є обмеження на розмір темплейтів і параметрів, що може ускладнити створення великих інфраструктур.
- Іноді CloudFormation не може правильно визначити залежності між ресурсами.
- При масштабуванні великих стеків може виникнути затримка, і час розгортання чи оновлення збільшується.
- CloudFormation не підтримує всі сторонні сервіси, що обмежує можливості інтеграції з іншими інструментами.
- Діагностика помилок може бути складною, оскільки повідомлення про помилки не завжди є детальними.
- Оновлення темплейтів може призвести до непередбачуваних змін і вплинути на роботу ресурсів.
- Існують обмеження на кількість ресурсів у стеку, тому іноді доводиться управляти кількома одразу (що, звичайно, не дуже зручно).
Порівняння з аналогами
CloudFormation — не єдине рішення для опису інфраструктури як коду.
Terraform працює з різними хмарами. Гнучкий, універсальний, але не завжди синхронізується з новими фічами AWS одразу. І треба окремо зберігати стан.
AWS CDK дозволяє писати інфраструктуру звичними мовами програмування. Але всередині — той самий CloudFormation.
Pulumi — ще більше свободи, ще менше шаблонів. Але потрібен програмістський підхід і окрема інфраструктура для збереження стану.
Іншими словами, якщо потрібно щось стабільне й підтримуване, CloudFormation — те, що треба.