Intro
Nikoho nebaví dělat stejný věci dvakrát. V IT je to skvělá cesta, jak vyhořet (nebo něco podělat :-)).
Naposledy jsem tu psal o DynamoDB a o tom, proč je super nemuset se starat o servery. Jenže i ten serverless svět musíte nějak „postavit“. A když se to dělá ručně, je to neskutečnej opruz.
Standardní situace: máte hotový systém a potřebujete ho nasadit pro nového klienta. V AWS to znamená naklikat sítě, nastavit permissions, založit databáze, vytvořit lambdy, nadefinovat stavové mašiny, nahrát certifikáty, nastavit DNS…
Je to práce na hodiny. A když něco nakliknete blbě, často to zjistíte až pozdě – třeba že se neukládají zálohy, nebo že má někdo přístup tam, kam nemá. A nebo to nejhorší: systém nefunguje a vaše jediná možnost je to celé shodit a začít odznovu.
Proto už druhý rok dělám všechno, co jde, přes Infrastructure as Code (IaC).
Recept na infrastrukturu
V repozitářích, které nějakou infrastrukturu od AWS potřebují, vždycky najdete soubor template.yaml (jeden nebo víc podle potřeby). Není to jen doprovodnej text nebo dokumentace. Je to v podstatě kompletní technický nákres celého systému, který umí zpracovat AWS služba CloudFormation a podle něj tu infrastrukturu postaví.
Je v něm napsáno všechno – od toho, jaké indexy mají být v databázi, až po to, kdo k ní smí přistupovat a jak (Least Privilege).
Místo toho, abych lezl do AWS konzole, připravím šablonu a pak v terminálu pustím svůj manage.py skript. Ten si ten soubor přebere, zkontroluje ho, doplní věci, které CloudFormation neumí vyřešit sám (např. sestavení docker kontejnerů nebo volání různých API), a během pár minut v cloudu vybuduje přesně to, co jsem mu zadal.
Je to vlastně jako psaní receptů. Cloud je pak ta robotická kuchyně, která to podle nich uvaří. A na práci s počítači je pro mě nejpříjemnější to, že když jim dvakrát zadám tu samou práci, tak ji dvakrát udělají stejně.
Proč mě to vlastně zajímá (a vás by mělo taky)
Není to jen o tom, že mě nebaví klikat v prohlížeči (ač to je pro líné programátory, jako jsem já, super věc). Má to zásadní dopad na to, jak naše systémy fungují, jak funguje DevOps a jak rychle umíme onboardovat nové klienty.
Disaster Recovery (když to lehne)
Stát se může cokoli. AWS může mít výpadek v jednom regionu (jako se to občas děje ve Frankfurtu). Díky IaC pro mě není problém vzít ten stejný nákres a během chvíle celý systém postavit znovu třeba v Irsku.
Kdybych to měl klikat ručně, strávím na tom mládí a zaručeně na něco zapomenu.
Konzistence
Potřebuju testovací prostředí, který je na 100 % stejný jako produkce? No problem. Pustím skript znova s jiným parametrem
Mám jistotu, že tam nejsou žádný skrytý rozdíly, který by pak v nasazení pro klienta dělaly neplechu. Existují nástroje typu LocalStack, ale věřte tomu, že to není jedna ku jedné s realitou v produkci.
Radši pro testování nasadím garantovaně stejný stack jako produkční a zaplatím za to jednotky korun měsíčně, než riskovat, že mi testy neodhalí zásadní chybu. A když chcete dělat zátěžové testy, stejně to na lokále férově neuděláte.
Historie změn
Protože je infrastruktura v kódu, na gitu je vidět každá změna. Kdo, kdy a proč přidal databázi, změnil oprávnění nebo upravil síť. Je to nejlepší dokumentace, jakou můžete mít (a dá se i vizualizovat).
Byznysovej pohled: čas jsou peníze
Pro klienta to znamená, že neplatí můj čas ani čas nikoho jiného strávený nudným nastavováním prostředí.
U komplexnějších věcí (třeba náš modulární BaaS) by ruční nasazení trvalo klidně den. Takhle je to otázka minut práce stroje a pár vteřin mého vypsání jednoho příkazu do terminálu.
To nám dovoluje soustředit se na ty zajímavé věci – jak data reálně zpracovat, jak postavit lepší UI nebo jak zrychlit vyhledávání. IaC nám dává svobodu do systému říznout, protože víme, že ho kdykoli dokážeme postavit znova na zelené louce 🫰
Závěr
Infrastructure as Code může někomu znít jako nudná technická disciplína, ale u nás je to víceméně základní hygiena. Je to rozdíl mezi systémem, o kterém víte, jak funguje, a máte ho pod kontrolou… a systémem, na který se všichni bojí sáhnout, aby se náhodou nerozbil.
A upřímně: radši strávím hodinu psaním a laděním čistého YAML než deset minut v AWS konzoli.
Ten pocit, když pustíte skript a vidíte, jak se pod rukama staví celý digitální barák, mi dělá radost. 🙂