Методологія управління інфраструктурою як кодом ("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 використовує свій власний синтаксис, але він виглядає досить дружелюбно. Наприклад, ось так виглядає мінімальний блок коду, який створює 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 ближче, але не знаєте з чого почати, то я рекомендую починати з офіційного інтерактивного керівництва.