Розуміння інструментів IaC: Cloudformation проти Terraform

Вибір між AWS CloudFormation та Terraform може здаватися складним. Ця стаття стане вашим гідом у прийнятті обґрунтованого рішення, яке найкраще відповідатиме вашим потребам.

Хмарні технології докорінно змінили підхід до DevOps, ставши невід’ємною частиною процесу розробки та підтримки програмного забезпечення. Хоча переваги хмарних обчислень очевидні для бізнесів будь-якого масштабу, існує певна складність – необхідність ручного налаштування інфраструктури.

Традиційно, налаштування вимагало взаємодії з консолями хмарних провайдерів, що працювало добре для невеликих проєктів. Однак, при змінах, що вносяться різними людьми, інфраструктура може стати надмірно складною і важкою у підтримці. Відсутність ефективних інструментів для спільної роботи та відстеження змін в хмарі є проблемою. Саме тут на допомогу приходить концепція “Інфраструктура як код” (Infrastructure as Code, IaC).

Інфраструктура як код (IaC) – це підхід до керування IT-інфраструктурою за допомогою коду. Замість ручного налаштування через консоль, IaC дозволяє створювати файли конфігурацій, які автоматично забезпечують розгортання хмарної інфраструктури. Це забезпечує послідовність, спрощує обслуговування, пришвидшує процеси та мінімізує ризик людських помилок.

Використання IaC з Amazon Web Services

AWS є лідером на ринку хмарних обчислень, пропонуючи понад 200 сервісів для різноманітних потреб. При впровадженні IaC в AWS часто виникає вибір між двома основними інструментами: AWS CloudFormation та Terraform. Розуміння відмінностей між ними є ключовим для вибору оптимального рішення. Ця стаття допоможе вам порівняти AWS CloudFormation та Terraform, щоб ви могли визначити, який інструмент найкраще підходить для вашого проєкту.

Terraform проти AWS CloudFormation: Ключові відмінності

Модульність

Модульність є важливим фактором при виборі інструменту IaC для великих організацій.

CloudFormation

CloudFormation не має вбудованої підтримки модулів, але пропонує використання так званих вкладених стеків.

Наприклад, ви можете створити стандартний шаблон CloudFormation для налаштування S3 відра. Коли користувачу потрібно буде створити S3 відро, він зможе використовувати цей шаблон як вкладений стек, забезпечуючи стандартизовану конфігурацію.

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

Для кращого розуміння розглянемо приклад. Неправильне використання S3 відер може призвести до витоку конфіденційних даних. Тому, бажано мати стандартний підхід до використання S3. Перший варіант – створити шаблон вкладеного стеку, який можна використовувати в інших стеках CloudFormation.

Інший варіант – скористатися Каталогом послуг AWS, якщо ви не хочете, щоб користувачі використовували вкладені стеки напряму. Каталог дозволяє користувачам використовувати стандартний шаблон через консольний інтерфейс, налаштовуючи деякі параметри. Це дає можливість контролювати розгортання інфраструктури у вашому обліковому записі AWS та запобігати небажаним сценаріям.

Terraform

Terraform має вбудовану підтримку модулів, що дозволяє створювати стандартизовані конфігурації та використовувати їх в інших файлах конфігурації.

Оскільки Terraform є інструментом з відкритим кодом, ви можете використовувати готові модулі з реєстру Terraform. Також можна створювати власні модулі і розміщувати їх у приватному реєстрі.

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

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

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

Terraform, з іншого боку, надає чіткий метод створення, підтримки та обміну модулями. Ви можете легко знайти потрібні модулі в реєстрі Terraform та використовувати їх у своїх файлах.

Контроль та управління інфраструктурою

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

CloudFormation сам по собі не забезпечує контроль над використанням шаблонів, але ви можете використовувати політики AWS IAM, щоб дозволити користувачам використовувати лише стандартні шаблони CloudFormation для створення ресурсів. На прикладі S3 відра, можна обмежити всі дозволи “S3 Create” для користувачів, дозволяючи їм створювати відра лише через Каталог послуг AWS або вкладені стеки.

Terraform дозволяє контролювати, які ресурси можуть створювати ваші користувачі, за допомогою Sentinel. Sentinel дозволяє застосовувати політики на основі логіки для дозволу або заборони дій користувача. Наприклад, ви можете заборонити користувачам створення S3 відер напряму, дозволивши їм використовувати лише стандартний модуль.

Управління станом

І AWS CloudFormation, і Terraform потребують механізм відстеження ресурсів, якими вони керують.

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

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

Обидва інструменти дозволяють перевіряти зміни, які будуть внесені до інфраструктури. В Terraform команда “terraform plan” показує план змін. У CloudFormation цю інформацію можна переглянути через набори змін.

Мова

Terraform використовує мову конфігурації HashiCorp, HCL, створену HashiCorp. Вона схожа на JSON, але з додатковими функціями та можливостями.

Шаблони CloudFormation пишуться у форматах YAML або JSON.

Логування та відкати

І AWS CloudFormation, і Terraform мають надійні можливості логування. З досвіду, виявлення помилок і проблем не є складним (здебільшого).

CloudFormation: За замовчуванням, CloudFormation відкочує всі зміни у випадку невдалого оновлення стеку. Цю функцію можна відключити для відлагодження.

Terraform: Terraform не відкочує зміни автоматично у разі невдачі. Це не є проблемою, оскільки ви завжди можете використовувати команду “terraform delete” для видалення частково розгорнутої конфігурації та повторного запуску Terraform.

Область застосування

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

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

Підтримка функцій

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

Ви можете вбудувати стек CloudFormation у свій код Terraform. Таким чином, якщо в Terraform відсутня якась функція, ви можете тимчасово використати стек CloudFormation у коді Terraform.

Технічна підтримка

Платний план технічної підтримки AWS включає підтримку CloudFormation.

HashiCorp також надає платну технічну підтримку для Terraform.

Висновок

AWS CloudFormation і Terraform є потужними та добре розробленими інструментами. Відмінності, наведені вище, допоможуть вам зробити виважений вибір, виходячи з ваших потреб. Якщо ви плануєте використовувати кілька хмарних платформ, Terraform є кращим універсальним рішенням. Якщо ж ви шукаєте інструмент IaC тільки для AWS, обидва інструменти є гарним вибором.

Якщо ви зацікавлені в вивченні Terraform, перегляньте онлайн-курси.