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
Розбіжність між станом у конфігурації та реальною інфраструктурою після ручних змін.

Приклад

Провайдер AWS і один S3-бакет. Далі terraform plan і terraform apply.

Шпаргалка

Terraform: шпаргалка
Команда або кодЩо робить
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Застосувати саме той план, який переглянули

Як вивчити

  1. Зрозумій ідею інфраструктури як коду: описуєш бажаний стан, Terraform приводить хмару до нього.
  2. Встанови Terraform і зроби перший ресурс через провайдер (наприклад Docker або локальний файл) без хмари.
  3. Вивчи цикл init, plan, apply, destroy і читай план, перш ніж його застосовувати.
  4. Освой змінні, outputs, locals і data блоки та розділи конфіг на файли.
  5. Розберись зі state: чому його не можна губити чи комітити, і винеси в remote backend із блокуванням.
  6. Виділи повторюваний код у модулі та підключи готовий модуль із реєстру.
  7. Підніми реальну інфраструктуру в хмарі (VPC, сервер, база) в окремому тестовому акаунті.
  8. Додай запуск plan у CI на pull request і керуй середовищами через workspaces або окремі state.

Питання на співбесіді

  1. 1. Що таке state і чому він важливий?

    State звʼязує ресурси в конфігурації з реальними обʼєктами в хмарі. Без нього Terraform не знає, що вже створено. Його зберігають у віддаленому backend із блокуванням, бо там можуть бути секрети.

  2. 2. Що робить terraform plan?

    Порівнює конфігурацію зі state та реальністю й показує, що буде створено, змінено чи видалено, без виконання змін. Це дає змогу перевірити наслідки перед apply.

  3. 3. Чим Terraform відрізняється від Ansible?

    Terraform декларативно створює й змінює ресурси інфраструктури та веде state. Ansible переважно налаштовує ПЗ та конфігурацію на серверах процедурними плейбуками без state.

  4. 4. Що змінилося з ліцензією Terraform?

    У 2023 році HashiCorp перейшла з MPL-2.0 на BSL 1.1, яка обмежує конкурентне комерційне використання. Спільнота створила форк OpenTofu з MPL-2.0 під Linux Foundation.

Питання з банку співбесід

Порівняння з цією технологією

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи