Заварюйте кофе, бо це буде довгий технічний допис про інструмент, який може суттєво спростити життя, коли інфраструктура розростається і звичайного Terraform стає недостатньо.
Яку проблему він вирішує?
Уявіть, що у вас є декілька середовищ:
dev, staging та prod. У кожному з них розгорнуті певні ресурси.Якщо у вас моноліт, все доволі просто. Ви створюєте окремий Git репозиторій
cloud-infra, у якому описуєте всю інфраструктуру за допомогою Terraform, а для розділення середовищ використовуєте Workspaces.Але уявімо, що ваша система поступово переходить до мікросервісної архітектури. Кількість ресурсів зростає, а централізована Terraform конфігурація "жирною".
Тому інфраструктуру часто розділяють на незалежні Terraform конфігурації.
Наприклад, спільну інфраструктуру залишаємо в
cloud-infra. А оскільки кожен мікросервіс має власний репозиторій, у ньому також можна розмістити Terraform конфігурацію для ресурсів, які належать конкретному сервісу: PostgreSQL, Redis, S3 тощо.Таким чином, кожен мікросервіс може мати власний Terraform State, незалежний від state інших сервісів та спільної інфраструктури.
І в багатьох випадках такого підходу цілком достатньо.
Але зі зростанням складності інфраструктури можуть виникнути нові проблеми.
Наприклад, вам потрібно розгорнути ресурси в певному порядку, але вони описані в різних Terraform конфігураціях і мають окремі State.
Або один мікросервіс залежить від інфраструктури іншого, тому перед його розгортанням потрібно переконатися, що всі необхідні ресурси вже створені.
Частіше всього, тут починається побудова кастомних велосипедів, які максимально костильно забезпечують оркестрацію ресурсів 😁
І якраз тут можна використати Terragrunt
Фактично, це інструмент, який працює поверх Terraform та дозволяє оркеструвати незалежні проєкти з окремими state.
Не буду детально розписувати всі його можливості, адже, як на мене, набагато важливіше зрозуміти проблему, яку він вирішує 🤌
Дуже коротко про основні фічі:
- Повторне використання спільних конфігурацій без копіювання між середовищами та різними Terraform проєктами
- Управління залежностями між незалежними проєктами та порядком їх розгортання
- централізоване керування і оркестрація
- зручна організація конфігурацій для різних середовищ (коли workspaces не стає мало).
В своєму досвіді, я тільки раз працював з ним - це був великий enterprise продукт з величезною інфрою. Він там ідеально вписувався, так як дійсно спрощував життя і перекладав операційні проблеми на рівень DevOps, а розгортання потрібної інфри на інженерів
🔗 - https://terragrunt.gruntwork.io/
І саме головне питання, треба відео по ньому? 📹
Без коду, а більше огляд його можливостей на архітектурном рівні з життєвими прикладами.