Terraform vs Pulumi: як вибрати інструмент для IaC
Впровадження Infrastructure as Code вже стало стандартом у роботі над інфраструктурою для DevOps-інженерів. Вибір правильного інструмента для IaC може суттєво вплинути на ефективність та зручність роботи. Довгий час єдиним варіантом був Terraform, проте зараз Pulumi набирає все більше обертів.
У цьому матеріалі ми порівняємо Terraform та Pulumi, визначимо ключові відмінності та розберемо, для яких сценаріїв підходить кожен з цих інструментів.
Для чого потрібен Infrastructure as Code
У підході IaC інфраструктура сприймається як код. Таким чином команда розробки може керувати нею за допомогою тих самих процесів, інструментів та мов програмування, які використовуються для коду застосунків.
Це дає можливість використовувати практики розробки ПЗ протягом усього життєвого циклу надання інфраструктури, що полегшує ефективний розподіл ресурсів. Для управління нею можна використовувати автоматизацію, інструменти контролю версій, балансувальники навантаження, віртуальні машини тощо.
Застосування методів розробки дозволяє керувати версіями інфраструктури за допомогою Git-репозиторіїв, впроваджувати code review, щоб переконатися у коректності майбутніх змін у коді. Також за допомогою IaC можна реплікувати інфраструктуру та впровадити її у CI/CD-пайплайн.
Огляд Terraform
Terraform — найперший IaC-інструмент, який міг безперешкодно мігрувати з однієї хмарної платформи до іншої незалежно від своєї базової інфраструктури. Цей сервіс використовує власну мову для конкретного домену, яка називається Hashicorp Configuration Language (HCL).
Створений Hashicorp у 2014 році, отримав свою популярність серед розробників та компаній після 2017 року, коли замість загальнодоступних версій інструменту ще існувала версія v0.11. Terraform був протестований в реальних робочих умовах протягом тривалого часу, тому це хороший та найочевидніший вибір для Infrastructure as a Code.
Огляд Pulumi
Pulumi, на відміну від Terraform зі специфічним синтаксисом HCL, дозволяє визначати інфраструктуру за допомогою багатьох мов програмування: TypeScript (Node.js), Python, C#, VB, F# (.NET), Go, Java, YAML. Завдяки багатомовності використовувати цей інструмент набагато простіше, ніж Terraform. Pulumi також підтримує всі основні хмарні провайдери.
Pulumi вперше з’явився з відкритим вихідним кодом у 2018 році, але айтівці почали звертати на нього більше уваги після релізу поточної версії v3.
Відмінності між Terraform та Pulumi
Хоча обидва інструменти мають одну мету, їхні підходи та можливі функції відрізняються. Щоб допомогти тобі вибрати між цими сервісами, розглянемо їхні ключові відмінності.
Підтримка мов програмування
Найбільша відмінність між цими інструментами полягає саме у мовах програмування. Terraform використовує HCL, проте це не повноцінна мова програмування, а лише декларативна мова конфігурації. Тому вона не здатна робити так багато складних речей, як може робити інша мова програмування.
З іншого боку, HCL доволі проста для прочитання та не вимагає опису кроків, як створити інфраструктуру. Завдяки декларативній мові можна просто прописати, як має виглядати інфраструктура, а Terraform визначить необхідні кроки самостійно.
Pulumi підтримує багато мов, тому якщо з якихось причин для проєкту потрібно визначити свою інфраструктуру на одній з основних мовах програмування, Pulumi має величезну перевагу.
Можливості IDE
Що стосується Terraform, то його плагіни доступні для деяких IDE, наприклад, Visual Studio. Інтеграція з IDE обмежується можливостями самого плагіну.
У Pulumi ситуація дещо краща, адже підтримка мов програмування означає, що можна отримати ефективну інтеграцію з IDE, яка поставляється з обраною мовою. Наприклад, при використанні C# у Pulumi, Visual Studio надає такі функції, як автозавершення коду, автодоповнення, сильна типізація тощо.
Можливість тестування коду
З Pulumi можна використовувати юніт-тести, інтеграційні або функціональні тести та інструменти, що постачаються разом з мовами програмування. Pulumi також надає можливість виконувати тести, які імітують зовнішні виклики.
У Terraform також можна запускати тести через сторонні інструменти, проте тестування обмежене переважно лише інтеграційними тестами. Команда plan показує запропоновані зміни інфраструктури ще до того, як вони будуть застосовані. Це дозволяє побачити зміни до їх виконання. Також є команди для перевірки та форматування конфігураційного файлу, проте це не є повноцінним тестуванням.
Управління секретами
Terraform керує секретами за допомогою окремого інструменту Vault. Він дозволяє керувати секретами без наявності прямого доступу до них. Також цей інструмент шифрує всі значення, які зберігає.
Проте файли стану Terraform зберігаються як відкритий текст, тому тут необхідно обмежити доступ та надати дозвіл лише тим, хто працює з цими файлами. Також рекомендується завжди шифрувати файл стану, щоб запобігти випадковому витоку конфіденційної інформації.
Pulumi зберігає секрети зі стану інфраструктури в хмарі Pulumi Cloud, проте можна обрати іншого провайдера для цього. Цей інструмент також підтримує шифрування конфіденційних даних для додаткового захисту.
Управління станом інфраструктури (state)
Як і всі IaC-інструменти, Pulumi та Terraform зберігають метадані про інфраструктуру для керування хмарними ресурсами. Ці сервіси пропонують таку опцію, де код відображає бажаний стан інфраструктури, інструменти порівнюють його з поточним станом та визначають ресурси, які треба оновити, створити чи видалити.
Типово Terraform зберігає стан локально у файлі з назвою terraform.tfstate. Стан Terraform можна зберігати за допомогою централізованого файлу, що надає сценарії для резервного копіювання та відновлення, а також дозволяє командам співпрацювати та керувати інфраструктурою зі спільним станом.
Pulumi зазвичай зберігає стан інфраструктури у хмарі Pulumi Cloud. Використання поширених мов розробки у Pulumi дозволяє порівнювати стан у файлі .diff, що схоже на перевірку та порівняння коду.
Ліцензія
Pulumi — це опенсорсний інструмент, який можна використовувати без проблем. На відміну від нього, компанія HashiCorp у 2023 році перевела Terraform на ліцензію BSL, яка дозволяє вільно застосовувати цей інструмент тільки для невиробничого використання. Щоб не порушити ліцензію, бізнесу треба підписати окремий контракт з HashiCorp.
Замість висновків
І Terraform, і Pulumi є розповсюдженими та відомими на ринку. Вибирати між ними необхідно тільки спираючись на потреби проєкту. Щоб полегшити вибір, ми виділили, коли варто використовувати кожен з цих інструментів.
Використовуй Terraform, якщо:
- для проєкту використовуються віртуальні машини, мережеві конфігурації та бази даних;
- на проєкті перевага надається декларуванню інфраструктури мовою, розробленою саме для цієї мети;
- середовище проєкту складається з різнорідних елементів, наприклад, декількох хмар чи SaaS-платформ;
- для команди важлива наявність навчальних посібників, сторонніх інструментів та активна спільнота користувачів.
Використовуй Pulumi, якщо:
- потрібно використовувати складні умови, які доступні з написанням коду на відомих мовах програмування;
- застосунок є контейнерним або має безсерверну архітектуру;
- є потреба у керуванні конфігураціями та секретами без додаткових інструментів та тією ж мовою програмування;
- потрібна підтримка IDE для перевірки помилок або автозавершення;
- бізнес надає перевагу інструментам з відкритим кодом.
Детальніше про Insfrastructure as Code ми розповідаємо на курсі «DevOps з нуля». За 9 місяців викладачі-практики поділяться своїми знаннями та досвідом, щоб після курсу ти міг оновити своє резюме та подаватися на вакансії Junior DevOps Engineer.