DevOps
Terraform
Terraform це інструмент інфраструктури як коду: ви описуєте ресурси хмари в конфігурації, а він створює та змінює їх.
Що це
Terraform від HashiCorp дозволяє описати інфраструктуру (сервери, мережі, бази, DNS) декларативною мовою HCL і керувати нею через провайдери для AWS, Azure, Google Cloud, Cloudflare та сотень інших сервісів.
Робочий цикл: terraform plan показує, що зміниться, terraform apply застосовує зміни. Поточний стан зберігається у state-файлі, який зазвичай виносять у віддалене сховище з блокуванням. Конфігурацію розбивають на модулі для повторного використання.
Про ліцензію. У 2023 році HashiCorp перейшла з MPL-2.0 на Business Source License 1.1, що призвело до форку OpenTofu під Linux Foundation. У 2025 році HashiCorp стала частиною IBM.
Коли брати
- Інфраструктуру треба відтворювати та версіонувати в Git.
- Керуєте кількома середовищами та хмарами однаковим способом.
- Потрібен перегляд змін (plan) перед застосуванням.
- Автоматизуєте розгортання через CI.
Коли не варто
- Потрібна повністю відкрита ліцензія: розгляньте OpenTofu.
- Завдання це налаштування ПЗ всередині серверів, а не створення ресурсів: тут Ansible.
- Один-два ресурси, які простіше створити вручну.
Ключові поняття
- Provider
- Плагін, який вміє працювати з API конкретної платформи (aws, google, cloudflare).
- State
- Файл із відповідністю конфігурації та реальних ресурсів; його захищають і зберігають віддалено.
- Plan / apply
- Спершу показати зміни, потім виконати їх: так видно наслідки наперед.
- Module
- Повторно використовуваний набір ресурсів із вхідними змінними та виходами.
- Drift
- Розбіжність між станом у конфігурації та реальною інфраструктурою після ручних змін.
Приклад
Шпаргалка
| Команда або код | Що робить |
|---|---|
terraform init | Завантажити провайдери й ініціалізувати теку |
terraform fmt | Відформатувати файли конфігурації |
terraform validate | Перевірити синтаксис конфігурації |
terraform plan | Показати, що зміниться |
terraform apply | Застосувати зміни |
terraform destroy | Видалити всю керовану інфраструктуру |
terraform output | Показати значення outputs |
terraform state list | Ресурси, що є у state |
terraform import aws_s3_bucket.b my-bucket | Взяти наявний ресурс під керування |
terraform plan -out=tfplan && terraform apply tfplan | Застосувати саме той план, який переглянули |
Як вивчити
- Зрозумій ідею інфраструктури як коду: описуєш бажаний стан, Terraform приводить хмару до нього.
- Встанови Terraform і зроби перший ресурс через провайдер (наприклад Docker або локальний файл) без хмари.
- Вивчи цикл
init,plan,apply,destroyі читай план, перш ніж його застосовувати. - Освой змінні, outputs, locals і
dataблоки та розділи конфіг на файли. - Розберись зі state: чому його не можна губити чи комітити, і винеси в remote backend із блокуванням.
- Виділи повторюваний код у модулі та підключи готовий модуль із реєстру.
- Підніми реальну інфраструктуру в хмарі (VPC, сервер, база) в окремому тестовому акаунті.
- Додай запуск
planу CI на pull request і керуй середовищами через workspaces або окремі state.
Питання на співбесіді
1. Що таке state і чому він важливий?
State звʼязує ресурси в конфігурації з реальними обʼєктами в хмарі. Без нього Terraform не знає, що вже створено. Його зберігають у віддаленому backend із блокуванням, бо там можуть бути секрети.
2. Що робить terraform plan?
Порівнює конфігурацію зі state та реальністю й показує, що буде створено, змінено чи видалено, без виконання змін. Це дає змогу перевірити наслідки перед apply.
3. Чим Terraform відрізняється від Ansible?
Terraform декларативно створює й змінює ресурси інфраструктури та веде state. Ansible переважно налаштовує ПЗ та конфігурацію на серверах процедурними плейбуками без state.
4. Що змінилося з ліцензією Terraform?
У 2023 році HashiCorp перейшла з MPL-2.0 на BSL 1.1, яка обмежує конкурентне комерційне використання. Спільнота створила форк OpenTofu з MPL-2.0 під Linux Foundation.
Питання з банку співбесід
- О другій ночі інженер вручну виправив security group у консолі AWS, щоб підняти прод. Наступного ранку колега зробив
terraform applyдля іншої зміни, правка тихо відкотилась, і інцидент повторився. Чому так сталося і як цього не допускати?MiddleDevOps - Як організувати dev, staging і prod, де живуть конфіг і секрети, і що робити, коли ключ закомітили в репозиторій?MiddleDevOps
- Якими шляхами секрети витікають із сервісу, і чи досить видалити
.envз репо наступним комітом?MiddleWeb security
Порівняння з цією технологією
Схожі технології
- OpenTofuOpenTofu це відкритий форк Terraform під ліцензією MPL-2.0, що розвивається під егідою Linux Foundation.
- AnsibleAnsible це інструмент автоматизації без агентів: плейбуки на YAML налаштовують сервери та розгортають ПЗ через SSH.
- AWSНайбільша хмарна платформа з сотнями сервісів: від віртуальних машин і сховища до баз даних, черг і ML.
- KubernetesKubernetes це система оркестрації контейнерів: розгортає, масштабує та лікує застосунки на кластері серверів.
- GitHub ActionsGitHub Actions це CI/CD, вбудований у GitHub: workflow на YAML запускаються на події репозиторію, як-от push чи pull request.
Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).