IaC i GitOps – automatyzacja infrastruktury krok po kroku

17 gru, 2025
IaC i GitOps – automatyzacja infrastruktury krok po kroku

IaC i GitOps – automatyzacja infrastruktury krok po kroku

IaC i GitOps pozwalają budować infrastrukturę jak oprogramowanie: w kodzie, z przeglądem zmian, testami i szybkim rollbackiem. W praktyce skracasz wdrożenia z dni do godzin, ograniczasz błędy „ręczne” i masz audyt: kto, co i kiedy zmienił.

Czym jest IaC i jakie problemy rozwiązuje w firmie?

IaC (Infrastructure as Code) to zapisywanie infrastruktury w postaci kodu (repozytorium), zamiast klikania w panele chmurowe i „magii w konsoli”. Dzięki temu:

  • środowiska są powtarzalne (dev/stage/prod nie różnią się „bo ktoś tak ustawił”),
  • zmiany są wersjonowane (commit = historia i odpowiedzialność),
  • wdrożenia są automatyzowane (pipeline zamiast ręcznych kroków),
  • można robić review i kontrolę jakości jak w kodzie aplikacji.

Z mojego doświadczenia: największa oszczędność czasu nie wynika z samej automatyzacji, tylko z eliminacji „zgadywania”, co jest aktualnie wdrożone.

Czym jest GitOps i czym różni się od klasycznego CI/CD?

GitOps to podejście, w którym Git jest jedynym źródłem prawdy o stanie systemu, a wdrożenie dzieje się przez mechanizm, który ciągle porównuje stan rzeczywisty z deklarowanym w repo.

Różnica względem „zwykłego CI/CD” jest praktyczna:

  • w CI/CD pipeline często „wypycha” zmiany na środowisko,
  • w GitOps środowisko „ściąga” zmiany z repo i samo pilnuje zgodności (drift detection).

W projektach produkcyjnych GitOps daje mi dwie rzeczy, których ręczne wdrożenia nie dają nigdy:

  • ciągłą zgodność stanu (mniej driftu),
  • łatwy rollback (powrót do commita).

Kiedy warto stosować IaC, a kiedy GitOps?

Najprościej:

  • IaC: provisioning infrastruktury (sieci, VM, konta, IAM, load balancery, bazy, storage, polityki).
  • GitOps: ciągłe wdrażanie konfiguracji i aplikacji (szczególnie na Kubernetes), utrzymanie zgodności stanu.

W praktyce najczęściej kończy się na modelu:

  • IaC stawia fundament (cloud/on-prem),
  • GitOps utrzymuje to, co „żyje” i zmienia się często (workloady, konfiguracje, manifesty).

Jak dobrać narzędzia IaC i GitOps, żeby nie zrobić sobie piekła?

Wybór narzędzi ma mniej wspólnego z modą, a więcej z Twoim środowiskiem i kompetencjami.

IaC (provisioning):

  • Terraform / OpenTofu: dobre do multi-cloud i standardu rynkowego,
  • CloudFormation / Bicep: świetne, gdy jesteś „all-in” w jednym cloudzie,
  • Ansible: najlepszy do konfiguracji systemów (konfiguracja, hardening, operacje), nie do „życia zasobów w chmurze”.

GitOps (ciągła zgodność):

  • Argo CD / Flux: standard dla Kubernetes,
  • model „pull” (agent w klastrze) zazwyczaj jest bezpieczniejszy i prostszy operacyjnie.

Z doświadczenia: największe problemy biorą się nie z narzędzia, tylko z braku zasad repo, kontroli sekretów i procesu akceptacji zmian.

Jak powinna wyglądać docelowa struktura repozytorium?

Dobra struktura repo to połowa sukcesu. Najczęściej sprawdza mi się układ „platform + środowiska”:

  • modules/ – moduły (VPC/VNet, IAM, Kubernetes, bazy, monitoring)
  • envs/dev/, envs/stage/, envs/prod/ – konfiguracje środowisk
  • apps/ – manifesty/Helm/Kustomize dla aplikacji (GitOps)
  • policies/ – reguły polityk (np. policy-as-code)
  • docs/ – runbooki i standardy

Klucz: prod nie może być kopią dev „z ręki”. Prod to świadoma konfiguracja, ale na tych samych modułach.

Jak zabezpieczyć IaC i GitOps, żeby automatyzacja nie stała się wektorem ataku?

To jest punkt, który najczęściej „wychodzi bokiem” po pierwszym audycie.

W praktyce wdrażam obowiązkowo:

  • secrets management: żadnych haseł i kluczy w repo (nawet „na chwilę”),
  • separacja uprawnień: pipeline ma minimalne uprawnienia, a prod wymaga podwójnej akceptacji,
  • remote state (dla Terraform/OpenTofu) z blokadą i szyfrowaniem,
  • policy-as-code: zakaz publicznych bucketów, otwartych security group, niekontrolowanych uprawnień IAM,
  • podpisy i weryfikacja artefaktów (tam, gdzie ma to sens),
  • audyt i logowanie: kto wdrożył zmianę i na jakim środowisku,
  • drift detection: wykrywanie „kliknięć w panelu”.

W realnych incydentach najczęstsza przyczyna problemów to: „ktoś poprawił w konsoli, bo szybciej”. GitOps/IaC ma to ukrócić.

Jak wdrożyć IaC krok po kroku, bez zatrzymania firmy?

Poniżej ścieżka, którą prowadzę najczęściej w firmach, które dziś mają „ręczne” zarządzanie.

Krok 1: Zrób inwentaryzację i wybierz zakres pilota

Najpierw wybierz jeden obszar o dużej powtarzalności, np.:

  • sieć + VM,
  • środowisko dev,
  • monitoring i logowanie,
  • staging dla aplikacji.

Nie zaczynaj od „przepiszmy cały świat” – to się prawie zawsze kończy porzuceniem tematu.

Krok 2: Ustal standard pracy (branching, review, approvals)

Minimalny standard:

  • PR obowiązkowy,
  • code review,
  • checki automatyczne (lint, fmt, validate),
  • osobne approvals dla prod.

Krok 3: Zbuduj backend stanu i zasady bezpieczeństwa

Dla Terraform/OpenTofu:

  • zdalny stan,
  • blokady (lock),
  • szyfrowanie,
  • rotacja dostępów,
  • rozdzielone stany per środowisko.

Krok 4: Zrób moduły i zacznij od „landing zone”

Najpierw fundament:

  • sieć,
  • IAM,
  • logowanie,
  • podstawowe polityki,
  • standard tagowania i nazewnictwa.

Dopiero potem „zasoby biznesowe”.

Krok 5: Dodaj pipeline dla plan/apply

Praktyczny model:

  • plan automatycznie dla PR,
  • apply tylko po merge + approval (osobno dla prod),
  • artefakty planu zachowane do audytu.

Krok 6: Włącz drift detection i cykliczne testy

Minimum:

  • regularny „plan” bez zmian (wykrywa drift),
  • alert, jeśli drift wykryty,
  • procedura: „klik w konsoli” = PR naprawczy.

Jak wdrożyć GitOps krok po kroku na Kubernetes?

Jeśli masz K8s (lub planujesz), GitOps daje największy zwrot.

Krok 1: Rozdziel repo „infra” od repo „apps”

To upraszcza uprawnienia i odpowiedzialność:

  • platform team = infra,
  • zespoły produktowe = apps.

Krok 2: Ustal format deklaracji

Najczęściej:

  • Helm albo Kustomize,
  • osobne overlays per środowisko.

Krok 3: Zainstaluj kontroler GitOps w klastrze i podepnij repo

Model „pull” jest bezpieczniejszy (cluster ma dostęp do repo, nie odwrotnie).

Krok 4: Zrób polityki wdrożeń

  • ograniczenia namespace,
  • limity zasobów,
  • standardy ingress i certyfikatów,
  • zakaz „latest” na obrazach.

Krok 5: Wprowadź bezpieczny rollback

Rollback w GitOps to zwykle:

  • powrót do commita,
  • albo revert PR.

Najważniejsze: rollback musi być procedurą ćwiczoną, a nie „opcją w teorii”.

Jak wygląda realny scenariusz: firma e-commerce z sezonowością?

W praktyce (częsty case):

  • IaC buduje powtarzalne środowiska i autoskalowanie,
  • GitOps zapewnia kontrolę wdrożeń i szybkie wycofanie zmian,
  • FinOps pilnuje kosztów i budżetów,
  • monitoring wykrywa regresję i drift.

Efekt biznesowy: w sezonie nie „gasimy pożarów ręcznie”, tylko przełączamy się na procedury.

Jakie KPI pokazują, że IaC i GitOps naprawdę działają?

Jeśli po wdrożeniu automatyzacji nie masz mierników, to łatwo wrócić do „ręcznie, bo szybciej”.

Najbardziej praktyczne KPI:

  • czas postawienia środowiska od zera,
  • liczba zmian wdrażanych tygodniowo,
  • odsetek zmian cofanych (rollback rate),
  • MTTR (czas przywrócenia po awarii),
  • liczba incydentów z driftu / ręcznych zmian.

Jakie błędy widzę najczęściej przy IaC i GitOps?

  1. „Wrzucimy IaC, a proces zostanie po staremu”
  2. Sekrety w repo lub w logach pipeline
  3. Brak rozdziału dev/stage/prod
  4. Brak polityk i minimalnych uprawnień
  5. Brak testów rollback i DR

Automatyzacja bez standardów to tylko szybsze robienie błędów.

Jak zacząć w 30 dni, żeby to miało sens?

Tydzień 1: inwentaryzacja, wybór pilota, standard repo i review
Tydzień 2: backend stanu, pierwsze moduły landing zone
Tydzień 3: pipeline plan/apply + podstawowe polityki bezpieczeństwa
Tydzień 4: drift detection + pierwszy „rebuild test” środowiska

Po tych 30 dniach powinieneś móc:

  • postawić dev/stage w sposób powtarzalny,
  • wprowadzać zmiany przez PR,
  • wykrywać drift,
  • cofnąć wdrożenie bez paniki.

Źródła