IaC (Infrastructure as Code, czyli infrastruktura jako kod) to podejście, w którym serwery, sieci, bazy danych i całą resztę środowiska opisujesz w plikach tekstowych, zamiast klikać po panelu w chmurze albo logować się po kolei na każdą maszynę. Te pliki to zwykle deklaratywny opis stanu docelowego („chcę mieć trzy serwery, load balancer i bazę PostgreSQL”), a narzędzie samo dba o to, żeby rzeczywistość zgadzała się z opisem. Skoro to zwykły tekst, wrzucasz go do git i traktujesz tak samo jak kod aplikacji: z historią zmian, code review i możliwością cofnięcia do działającej wersji.
Jak to działa i po co
Klasycznie wyróżnia się dwa style. W podejściu deklaratywnym opisujesz stan końcowy, a narzędzie wylicza, co trzeba dodać, zmienić lub usunąć (tak działa Terraform czy CloudFormation). W podejściu imperatywnym piszesz kolejne kroki do wykonania. Większość nowoczesnych narzędzi celuje w model deklaratywny, bo łatwiej w nim utrzymać tzw. idempotentność, czyli to, że uruchomienie tej samej konfiguracji dziesięć razy daje ten sam efekt, a nie dziesięć kopii serwera.
Korzyść jest prosta: środowisko da się odtworzyć od zera w kilka minut, a dev, staging i produkcja przestają się od siebie tajemniczo różnić. Koniec z „u mnie działało” i z jedynym kolegą, który pamięta, jak ręcznie skonfigurowano firewalla trzy lata temu.
Przykład z praktyki
Najpopularniejszy gracz to Terraform (oraz jego otwarty fork OpenTofu). Opisujesz zasób w plikach .tf, np. instancję EC2 czy bucket S3, a potem uruchamiasz:
terraform plan— pokazuje, co się zmieni, zanim cokolwiek ruszy w realu,terraform apply— wprowadza zmiany w chmurze,terraform destroy— sprząta całe środowisko, gdy nie jest już potrzebne.
Do konfiguracji wnętrza maszyn (instalacja pakietów, ustawienia usług) częściej sięgniesz po Ansible, który używa plików YAML zwanych playbookami. Terraform stawia infrastrukturę, Ansible ją konfiguruje — często idą w parze.
Częste błędy i mity
Pierwsza pułapka to plik stanu (state). Terraform trzyma w nim mapę tego, co już utworzył. Jeśli wrzucisz go do repozytorium albo dwie osoby odpalą apply naraz, zrobi się bałagan. Dlatego state trzyma się zdalnie (np. w S3) z blokadą.
Druga sprawa: nie klikaj zmian ręcznie w panelu chmury „na szybko”. Tworzysz wtedy drift — rozjazd między kodem a rzeczywistością, przez który następny apply potrafi zaskoczyć. I nie trzymaj haseł ani kluczy w plikach .tf — od sekretów są dedykowane narzędzia.
Pojęcia powiązane
Terraform, Ansible, OpenTofu, DevOps, CI/CD, konteneryzacja (Docker, Kubernetes), GitOps, idempotentność, provisioning, declarative configuration.