Terraform

Otwartoźródłowe narzędzie HashiCorp do udostępniania i zarządzania infrastrukturą metodą Infrastructure as Code. Opisuje zasoby w deklaratywnych plikach konfiguracyjnych.

Terraform to narzędzie HashiCorp do udostępniania i zarządzania infrastrukturą w modelu Infrastructure as Code (IaC). Zamiast klikać po panelu chmury i ręcznie tworzyć serwery, sieci czy bazy danych, opisujesz docelowy stan infrastruktury w deklaratywnych plikach .tf (w języku HCL), a Terraform sam doprowadza środowisko do tego stanu. Mówisz „chcę mieć trzy maszyny i load balancer”, a nie „kliknij tu, potem tam”.

Jak to działa

Terraform jest agnostyczny względem dostawcy — przez tzw. providery gada z setkami API: AWS, Azure, Google Cloud, Cloudflare, Kubernetes, a nawet GitHubem. Działanie opiera się na state — pliku, w którym Terraform pamięta, co już stworzył. Porównuje twój kod z tym stanem i z realnym światem, a potem liczy różnicę: co dodać, co zmienić, co usunąć.

Podejście jest deklaratywne: nie piszesz jak coś zbudować krok po kroku, tylko co ma istnieć. Resztę — kolejność, zależności, równoległość — Terraform planuje sam na podstawie grafu zasobów.

Przykład z praktyki

Typowy cykl pracy to trzy komendy. terraform init pobiera providery i inicjuje katalog. terraform plan pokazuje dry-run — listę zmian, zanim cokolwiek się wydarzy (tu wyłapiesz, że przypadkiem kasujesz produkcyjną bazę). terraform apply wykonuje plan. Definicja jednego zasobu wygląda tak: resource "aws_instance" "web" { ami = "ami-123" instance_type = "t3.micro" }. Commitujesz to do Gita i masz historię zmian całej infrastruktury.

Na co uważać

Pierwszy mit: że Terraform jest „otwartoźródłowy”. Od sierpnia 2023 HashiCorp zmienił licencję z MPL 2.0 na BSL (Business Source License), która ogranicza komercyjne użycie konkurencyjne. W odpowiedzi powstał fork OpenTofu pod skrzydłami Linux Foundation — w pełni open source i kompatybilny. W grudniu 2024 HashiCorp kupił IBM za 6,4 mld dolarów, ale licencja się nie zmieniła. Drugi grzech początkujących: ręczne grzebanie w zasobach przez panel, gdy state o tym nie wie — wtedy Terraform przy kolejnym apply „naprawia” świat po swojemu. Trzeci: trzymanie pliku state lokalnie zamiast w zdalnym backendzie (np. S3) — kończy się to konfliktami w zespole. I zawsze czytaj plan przed apply.

Pojęcia powiązane: Infrastructure as Code, OpenTofu, HCL, Ansible, Pulumi, Kubernetes, DevOps, provider, state, idempotentność.