Zkratka proInfrastructure as CodeTakéIaC, infra as codePokročilý
Definice
Infrastruktura jako kód je způsob správy serverů, sítí, databází a cloudových služeb pomocí verzovaných konfiguračních souborů místo ručních kliknutí v administraci. Tým v kódu popíše požadovaný stav prostředí, nástroje změny naplánují, provedou a dovolí je opakovat, kontrolovat i vracet podobně jako u aplikačního kódu.
Proč se infrastruktura zapisuje do repozitáře
Infrastruktura jako kód řeší problém, který vzniká při ruční správě prostředí: nikdo přesně neví, kdo co změnil, proč se produkce liší od testu a jak prostředí bezpečně obnovit po havárii. Konfigurace uložená v repozitáři dává infrastruktuře historii, code review, automatické kontroly a možnost vrátit chybnou změnu stejným procesem jako u aplikace.
Typický tým popíše například virtuální síť, databázi, Kubernetes deployment, IAM role nebo DNS záznam v textových souborech. Pipeline potom změnu ověří, naplánuje a aplikuje. Výsledkem není jen rychlejší provisioning, ale hlavně menší prostor pro nezdokumentované zásahy.
Deklarativní popis požadovaného stavu
Infrastruktura jako kód bývá často deklarativní: soubor říká, jak má cílový stav vypadat, ne každý nízkoúrovňový krok k jeho dosažení. Nástroj porovná aktuální stav s popisem a navrhne rozdíl. Právě tady se hodí princip idempotence, protože opakované spuštění stejné konfigurace nemá znovu vytvářet prostředky, které už existují.
Deklarativní přístup neznamená, že se nemusí přemýšlet o pořadí a závislostech. Databáze může potřebovat síť, cluster potřebuje oprávnění a změna typu disku může vyvolat výpadek. Kvalitní IaC proto kombinuje popis zdrojů, validaci vstupů, práci se stavem a jasná pravidla pro schvalování.
Plán změn před spuštěním
Infrastruktura jako kód je bezpečnější, když tým nejdřív vidí plán. Plán ukáže, které prostředky se vytvoří, upraví nebo smažou. U malých změn pomáhá zachytit překlep v názvu regionu. U velkých změn odhalí zásah, který by mohl odstranit produkční databázi nebo změnit veřejné oprávnění úložiště.
Schvalování plánu je důležité i organizačně. Provozní tým, bezpečnostní specialista a vývojář se dívají na stejný diff místo toho, aby porovnávali obrazovky v cloudové konzoli. IaC tím podporuje DevOps kulturu, ale nenahrazuje odpovědnost za architekturu, zálohy ani řízení přístupů.
Kde se infrastruktura jako kód láme
Riziko IaC roste, když se mimo nástroj provádějí ruční úpravy. Takový rozdíl se označuje jako drift: reálné prostředí už neodpovídá repozitáři. Další slabé místo je správa tajemství. Hesla, privátní klíče a tokeny nemají být natvrdo v konfiguraci, ale ve správci tajemství nebo v bezpečně předávaných proměnných.
Infrastruktura jako kód také nezaručuje přenositelnost mezi cloudy. Stejný princip lze použít v AWS, Azure, Google Cloud i Kubernetes, ale konkrétní zdroje, limity a bezpečnostní modely se liší. Dobrá konfigurace proto není jen syntakticky správná. Dobrá konfigurace odpovídá provozním pravidlům dané platformy.
Příklady z praxe
Bucket pro aplikační logy
Vývojový tým potřebuje stejné logovací úložiště pro testovací prostředí po každém založení účtu. Terraform konfigurace vytvoří bucket a zapne verzování, takže se stejný stav dá znovu nasadit z repozitáře. Při změně názvu nebo nastavení review ukáže přesný rozdíl před aplikací.
resource "aws_s3_bucket" "logs" { bucket = "acme-app-logs-dev" } resource "aws_s3_bucket_versioning" "logs" { bucket = aws_s3_bucket.logs.id versioning_configuration { status = "Enabled" } }Kubernetes deployment v repozitáři
Provozní tým chce mít Kubernetes aplikaci popsanou stejně v testu i produkci. YAML manifest určuje deployment se dvěma replikami a konkrétním obrazem kontejneru. Pokud někdo repliku ručně smaže, správce clusteru ji podle deklarovaného stavu znovu vytvoří.
apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:stable
Časté omyly
- MýtusIaC je prostě Terraform.
- Ve skutečnostiTerraform je častý nástroj pro infrastrukturu jako kód, ale není jediný. Stejný princip používají také jiné nástroje a formáty, například cloudové šablony, Kubernetes manifesty nebo konfigurační systémy.
- MýtusKdyž máme IaC, nikdo už nesmí nikdy kliknout v cloudové konzoli.
- Ve skutečnostiRuční zásah může být v incidentu nutný, ale měl by se následně promítnout zpět do konfigurace. Jinak vzniká drift a repozitář přestává popisovat skutečné prostředí.
Časté dotazy
- Kdy se infrastruktura jako kód vyplatí i u malého projektu?
- Infrastruktura jako kód dává smysl i u malého projektu, pokud se prostředí bude opakovaně vytvářet, předávat mezi lidmi nebo obnovovat po chybě. Jednorázový osobní experiment si často vystačí s ručním nastavením. Malý produkční projekt ale rychle získá výhodu z verzované konfigurace, protože změny databáze, DNS, úložiště nebo práv nezůstanou jen v hlavě jednoho administrátora.
- Čím se infrastruktura jako kód liší od skriptu pro nastavení serveru?
- Infrastruktura jako kód se od běžného skriptu liší tím, že obvykle popisuje požadovaný stav prostředí a pracuje s evidencí existujících zdrojů. Skript často jen provádí příkazy v daném pořadí a po opakovaném spuštění může vytvořit duplicity nebo skončit chybou. IaC nástroj typicky porovnává aktuální stav s konfigurací a rozhoduje, co je potřeba změnit.
- Kam patří hesla a tokeny při používání IaC?
- Infrastruktura jako kód nemá obsahovat tajné hodnoty přímo v repozitáři. Bezpečnější postup je uložit hesla, tokeny a privátní klíče do správce tajemství a do konfigurace dávat jen odkazy nebo názvy proměnných. Repozitář s IaC se často čte v CI/CD a při code review, takže omylem uložené tajemství se může rychle rozšířit mimo původní tým.
- Znamená IaC automaticky bezpečnější infrastrukturu?
- Infrastruktura jako kód omezuje ruční chyby, ale sama o sobě nezaručuje bezpečné prostředí. Chybná konfigurace může automatizovaně otevřít síťový port, přidělit příliš široká oprávnění nebo smazat důležitý prostředek. Bezpečnost IaC stojí na review, testech politik, oddělených oprávněních, zálohách a kontrole plánu před nasazením.
Zdroje
- What is Infrastructure as Code (IaC)?(otevře se v novém okně)
- What is Infrastructure as Code?(otevře se v novém okně)
- Terraform on Google Cloud(otevře se v novém okně)
- Object Management(otevře se v novém okně)