Terraform: що це і для чого він потрібен

Terraform: що це і для чого він потрібен

  • 16 листопада, 2020
  • читати 5 хв
Сергій Василенко
Сергій Василенко Platform Software Engineer у Grammarly, Викладач Комп'ютерної школи Hillel.

Методологія управління інфраструктурою як кодом ("Infrastructure as Code") не нова, так само як і Terraform вже давно не є хайповим словом в IT-сфері. Ця стаття буде корисна інженерам, які хочуть зрозуміти, в чому суть Terraform і, можливо, почати його вивчати.

Чому "Infrastructure as Code" — це важливо?

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

А тепер задумайтесь: ви змогли б це повторити без помилок кілька разів поспіль? А скільки часу ви б на це витратили?

Щоб створювати ресурси без ризику щось забути і робити це швидко при повторенні — придумали Infrastructure as Code. Це підхід до управління інфраструктурою через набори конфігураційних файлів (коду), в яких декларативно (тобто в специфікації фінального результату) описується бажаний стан цієї інфраструктури.

Такий підхід вирішує багато завдань і проблем, наприклад:

  • Конфігурація є джерелом правди про те, як все повинно бути налаштоване.
  • Вона ж часто є і документацією.
  • Повторні застосування цієї конфігурації (наприклад, вам потрібно кілька оточень) гарантовано призводять до того ж результату.
  • Усувається людський фактор (коли забули щось додати або налаштувати).

Terraform — це один з інструментів реалізації Infrastructure as Code.

Як Terraform працює?

Terraform (утиліта командного рядка) працює з файлами (кодом) і інтерпретує їх усередині cloud або on-premise платформи — створює, змінює або видаляє ресурси.

Terraform підтримує велику кількість платформ: від основних хмарних провайдерів (AWS, Azure, GCP) до більш скромних платформ, наприклад, Hetzner або 1 & 1. Крім того, він підтримує роботу з таким ПО, як Docker, Kubernetes, Chef, що розширює функціонал і дозволяє використовувати їх в зв'язці. Тому Terraform такий популярний — це справжній швейцарський ніж у світі управління інфраструктурою.

Як Terraform працює

Код Terraform використовує свій власний синтаксис, але він виглядає досить дружелюбно. Наприклад, ось так виглядає мінімальний блок коду, який створює EC2 instance в AWS.

resource "aws_instance" "web_server" {

ami = "ami-a1b2c3d4"

instance_type = "t3.micro"

}

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

Щоб застосувати конфігурацію, використовується CLI-додаток, що запускає код на обробку та застосування провайдером по відношенню до тієї чи іншої платформі.

При першому використанні Terraform відбувається ініціалізація проекту — каталогу, в якому знаходяться файли конфігурації (ваш код). Для цього використовується команда terraform init. Ця команда дозволяє завантажити необхідні версії провайдерів та інших залежностей, використовуваних в конфігурації інфраструктури.

Далі під час першого застосування команди terraform apply Terraform створить описані ресурси на хостинг-платформі і створить спеціальний файл — state file — в каталозі проекту.

Саме цей файл в подальшому буде використовуватися Terraform для порівняння поточного стану вашої інфраструктури з новою версією вашої конфігурації щоразу при виконанні terraform apply. Таким чином він зрозуміє: які ресурси змінити, видалити або додати.

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

Modules — дозволяють створювати логічні блоки (абстракції) з різних наборів ресурсів і знову використовувати такі блоки надалі.

Variables — дозволяють параметризованих код, роблячи його більш універсальним.

Expressions — дозволяють обчислювати або звертатися до різних типів даних в коді. Наприклад, взяти елемент зі списку або вибрати якесь значення на підставі умови.

Functions — вбудовані функції, які ще більше розширюють можливості по роботі з даними всередині конфігурації. Наприклад, перетворення рядків, математичні обчислення, робота зі списками і т.д.

Це і багато іншого робить Terraform потужним інструментом для управління інфраструктурою: як всередині однієї хостинг-платформи, так і між декількома одночасно.

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