Published: 9. 9. 2016   Category: GNU/Linux

Můj život s cloudem od Amazonu

Už přes rok jsem profesionálním uživatelem cloudu firmy Amazon – Amazon Web Services neboli AWS. Je to už tedy dost času na to, abych mohl shrnout zkušenosti s ním a s prací jako DevOps engineer.

Nejdřív k tomu, co je to vůbec ten „cloud. Ono je to takové, už několik let hodně, skloňované slovíčko, ale aspoň mě osobně jeho plný význam unikal a nebo jsem k němu byl dost skeptický, hlavně když si lidé různě stěžovali, že „přišli o data uložená v cloudu“ a tak podobně.


Fig.: Rozmáhá se nám tady takové slovíčko...

Kdysi dávno měl každý server měl svoji veřejnou IP adresu, výpočetní výkon stačil tak na pár webů a malou databázi, updaty se dělaly o víkendu v noci a kvůli hardwarovým problémům člověk musel zvednout zadek a jet okamžitě do serverovny. S rostoucím výkonem počítačů a klesající cenou hardware se začala rozmáhat virtualizace a na jednom stroji tak může běžet více serverů, začala se používat řešení s vysokou dostupností, kdy se do serverovny nemusí hned, ale cluster se musí hned přepnout na funkční nódy, ale stejně se musí čas od času zajet do serverovny a upgrady se pořád řeší v noci z pátku na sobotu.

A to už se konečně blížíme ke cloudovému řešení. Konkrétně k veřejnému cloudovému řešení. Takže: o hardware se vůbec nestaráte, vyberete si operační systém, jeho konfiguraci, zvolíte si určitý výpočetní výkon a když chcete nový server nebo větší výkon, nebo datové úložiště, nikdo nemusí odlepit zadek od židle, protože se vše nakliká a za pár minut je instalováno se vším všudy, od firewallu, load balanceru až po monitoring.

Tohle všechno a mnohem víc teď nabízí Amazon a jeho Web Services. Ty nejzákladnější služby jsou:


Fig.: Výběr služeb v management konzoli AWS, u 2/3 ani nevím k čemu jsou :)

AWS je složitý

Alespoň v momentě kdy s ním začínáte a musíte se prokousat haldou tutoriálů. Amazon nabízí vyzkoušení zdarma, takže se spousta lidí plná nadšení vrhla na cloud, aby si vzápětí vylámala zuby na nějakém základním problému. Ne každý má trpělivost na zdlouhavé RTFM. Ona ani webová ovládací konzole není příliš přehledná a občas je nutné se zanořit hodně hluboko. Zřejmě abyste si připadali důležitě a patřičně geeky jsou všechna zařízení označena jedinečnými hexadecimálními kódy, takže máte třeba virtuální cloud vpc-a8b143c4, v něm tři instance (servery) i-89a12801, i-ac78bff3, i-bf7a135c, k nim se přistupuje přes gateway igw-34a90212 a síťové služby se povolují v security grupách sg-3a89af7c, atd. Ona se sice většina těch věcí dá libovolně pojmenovat, ale stejně jako primární identifikátor jsou použité tyhle těžko zapamatovatelné, náhodné kódy. No a nakonec stejně potřebujete znalosti jako síťování a administrace OS, který provozujete, takže cloud není určen pro úplné laiky.

AWS je jednoduchý

Spoustu věcí už je předpřipravená od Amazonu a když už člověk ví kam kliknout nebo si úlohu patřičně naskriptuje dá se spousta věcí vyřešit velice rychle a elegantně. Můžete si připravit instalaci vašeho prostředí uložit ho jako AMI obraz a ten pak použít na další a další servery. Nový release si nainstalujete, otestujete a ve správný moment přesměrujete load-balancer na nové instance a je hotovo. Potřebují vaši developeři píseček na hraní? Stačí pár kliků a za pár minut už se ssháčkem přihlašujete na nový server.

AWS není levný

Plni nadšení z cloudové prostředí klikáte jako o závod, na každou ptákovinu si spustíte vlastí instanci, data na S3 uspokojivě bobtnají, s očekávaným růstem uživatelů i datový tok a pro jistotu zvolíte výpočetní výkon s dostatečnou rezervou. No a pak přijde zúčtovací období — čas protáčejících se panenek. Ona sice cena za výpočetní výkon začíná někde u 0,007 dolarů za hodinu a spousta věcí je zdarma (free tier), ale ono se to dohromady nasčítá a v momentě kdy si zrovna naklikáváte další cool fíčurky na vás nevyběhne okno, že to bude za měsíc provozu stát zrovna tolik a tolik. U nás to v jeden moment dělalo přes 2000 dolarů (ve skutečnosti jsme toho potřebovali jen polovinu a kdyby jsme si na hraní koupili vlastní server, a v cloudu měli jen to nejnutnější z produkce, tak bychom ušetřili ještě víc). Odhadnout ceny pomůže kalkulačka.

AWS je elastický

Ale aby se dal dostatečně roztahovat je potřeba k němu přistupovat s rozmyslem. Časem totiž můžete narazit na různé limity (v rámci vaší smlouvy a platebních možností). Např. v rámci geografické zóny můžete používat jen 5 VPC, mezi VPC můžete používat peer-2-peer síť, ale ne mezi zónami. Také nastavení security group, SSH klíče, obrazy OS a další nelze sdílet mezi zónami, ale musí se celkem pracně přesunovat. Máte přiděleno několik pevných IP adres, ale protože se za ně platí, tak si je šetříte, jenže po restartu instance je vám dynamicky přidělená nová veřejná IP adresa. A proto, aby jste mohli elastičnost plně využít potřebujete všechno naskriptovat. Proto má AWS službu OpsWorks založenou na Chef, který využívá Ruby. Musíte si tedy připravit nebo upravit softwarové recepty, které obstarají rychlou konfiguraci a deployment aplikace. To je mnohdy zdlouhavé kolečko na odladění: příprava receptu, commit do gitu, deployment receptu, test zda vše funguje, nefunguje na poprvé, takže následuje úprava receptu, commit do gitu, a tak dále... Často je jednodušší někde nějakou změnu provést ručně, ale poté co na to za 14 dní zapomenete, se pak může stát, že zbytečně odhalujete technickou příčinu problému, ale ona to byla jen vaše vlastní lenost (nebo lenost některého z kolegů).

AWS je skriptovatelný

Vše, co se dá naklikat v management console se dá v AWS naskriptovat. K dispozici je AWS CLI client, který obstarává ovládání z příkazové řádky. Protože se často některé informace získávají a předávají ve formátu JSON, není shell skriptování tím nejlepším nástrojem na automatizaci, takže jsem díky tomu hodně oprášil Python a modul boto3, s tím už se dá přehledně a po vytrvalém laborování udělat cokoliv.

AWS není pro zbrklé

Jednoduchost a složitost AWS v jednom, často přináší řadu úskalí. A protože člověk tíhne k jednoduchým a okamžitým řešením, může se stát, že něco zanedbáte. Nemusí to být jen počáteční chyba v návrhu, kterou později nelze odstranit v řádu minut, ale zbrklý přístup vede k bezpečnostním problémům. AWS poskytuje totiž komplexní přístup k API kontrolovaný přes IAM, jenže místo toho, aby každá úloha nebo instance měla svoji jasně definovanou roli, tak místo zdlouhavého laborování s bezpečnostním nastavením jednoduše povolíte všechno, všechno hned funguje a tradá (přece „si někdy v budoucnu uděláte čas“ a pak to všechno dodatečně poladíte). Každý uživatel dostane při vytvoření jedinečné API klíče, ty jsou pak potřeba při spouštění dávkových úloh a správně by se tyhle klíče neměli nikde objevit. Už teď různí roboti skenují github a hledají v zdrojácích API klíče a v případě, že API klíč je uživatele s neomezenými pravomocemi může dojít k nějaké nepříjemnosti, na kterou v horším případě přijdete až ve zúčtovacím období, protože si někdo mezitím nastartoval několik instancí s maximálním výkonem, aby těžil bitcoiny či tropil jiné taškařice.

AWS je funkční

Za celý rok se mi nestalo, že bych přišel o data nebo řešil nějaké technické problémy, za které by mohl výhradně Amazon. Občas se stalo, že nějaký proces (většinou monitoring nebo OpsWorks) zvýšil neúměrně zátěž, takže pak jádro automaticky zabíjelo procesy (oom-killer), ale většinou to byla souhra víc faktorů: další rozežrané aplikace, snaha ušetřit volbou instance s hraniční konfigurací a vlastní chyby v návrhu. Např. load balancer testuje zda instance je v pořádku tím, že periodicky přistupuje na root www serveru. No ale pokud tím rootem je vaše pětimegová landing page uložená v databázi a poháněná WordPressem, může se stát, že odezva nebude nejrychlejší a load-balancer automaticky odstaví instanci (a to se bude dít různě zcela náhodně a nepředvídatelně, takže hledání příčiny, pak bude běh na dlouhou trať).

Doplnění z srpna 2017: S rozšířeností a s roustoucími zkušenostmi s AWS musím doplnit, že problémy se nevyhnou ani AWS. Spousta z nás se nechala uchlácholit vysokou dostupností, a když se pak něco posere, vypadá to jako rána z čistého nebe. V únoru postihl Internet výpadek S3 a to tak masivní, že služby, které stojí na datech uložených v S3 přestaly na pár hodin fungovat a (ne)přímo to postihlo spoustu lidí. Minulý měsíc jsem zaznamenal dva výpadky spojené s problémy s AWS infrastrukturou (v zóně us-east-1), v prvním případě přestala fungovat jedna instance, v konzoli AWS pak byla hláška, že něco je blbě.

System reachability check failed.

This check verifies that your instance is reachable. We test that we are able to
get network packets to your instance. If this check fails, there may be an issue
with the infrastructure hosting your instance (such as AWS power, networking or
software systems). You may need to restart or replace the instance, wait for our
systems to resolve the issue, or seek technical support.

This check does not validate that your operating system and applications are
accepting traffic.
Asi 14 dní na to, přišel v sobotu ráno email s tím, že jedna instance umřela, email byl poslán na root account (který je odlišný od admin accountů). V pondělí jsme měli státní svátek (to už si toho všiml zákazník, samozřejmě nikdo jiný nesledoval monitoring). Já si natáhl bránici tak blbě, že jsem zůstal v posteli a v úterý si vzal sick-day. Užíval jsem si léta, takže jsem nekontroloval pracovní emaily a kolega, který email viděl mi sice poslal zprávu na #Slacku, ale bylo mu zřejmě blbé mi telefonovat, takže to taky pustil z hlavy. Souhra náhod a oheň je na střeše. Poučení z užívání cloudu: je nutné být připraven na eventualitu, abyste „nepřišli o data uložená v cloudu“. Ironie? Backupy máme uložené v cloudu :)

AWS je supermoderní

Protože je AWS relativně nový, cestičku před vámi zatím neprošlapalo tolik lidí a nalezení řešení vašeho problému nerovná se vygůglení odpovědi na stackoverflow. Často zabřednete do čtení dokumentace a zkoušení pokus-omyl klidně na řadu dní. Osobně jsem se vyvztekal u Elastic Container Service (ECS), což je cluster docker kontainerů o který se AWS stará co nejvíce automatizovaně, ale nastavit a rozběhat tu pakárnu se mi pořádně nepovedlo. On je totiž rozdíl když si vše odladíte pěkně na koleně a když před vás postaví hotový black box. Ale tím, že AWS používá stále víc a víc lidí, plní se i web různými How-To, tutoriály a hotovými odpověďmi na stackoverflow.

AWS provozuje americká firma

Tohle vám může vadit nebo je vám to jedno, ale vaše data a aktivity se mohou dostat do rozporu se zákony USA. Osobně mi není úplně jasné jestli zákony USA platí i zónách geograficky umístěných mimo USA. O bezpečnost vaší instalace se musíte postarat sami, ale je bezpečný cloud sám o sobě? Naše firma shromažďuje osobní data a DNA sekvence pro analýzu sportovní výkonnosti, takže podléháme regulaci HIPPA a to znamená, že citlivá data musí kryptována, přístup k nim podléhá kontrole, atd. Takže třeba pronájem výpočetního výkonu ve sdílením prostředí HIPPA nepovoluje a je nutné vypláznout prachy za dedikovaný stroj (což už dělá $2/hodinu). Smlouva s Amazonem je HIPPA kompatibilní. Ovšem opravdu je jistota, že k vašim datům nepřistupuje ještě někdo třetí?

AWS je průmyslový standard

Tedy jak se to vezme :) Ale určitě si ukrojil pořádný díl tržního koláče. A další firmy chtějí těžit z jeho úspěchu, takže vznikají různé projekty, které vám zprostředkují nějakou službu tím, že jí nahrají do vašeho cloudu a nebo vám pomůžou cloud lépe obhospodařovat. Takové službě poskytnete základní údaje a API klíče a někdo třetí už zařídí vše potřebné. Takže třeba, máte big data a ty potřebujete nějak zpracovat, nějaká služba, třeba DataBricks, vytvoří řádově během několika minut výpočetní cluster ve vašem cloudu, pošle data na zpracování, uloží výsledky a cluster zase vypne a to celé stojí jen pár dolarů za pronájem výpočetního času.

AWS je třeba opečovávat

Ony se ty cool věci sami nenaklikají, nenaskriptují a problémy nevyřeší. No a od toho, je tady DevOpsák, něco mezi adminem a tak-trochu-programátorem, aby to celé hodil do oukeje a pak ostatní odrazoval od toho se v tom vrtat, protože to funguje. Takže tu máme po cloudu další buzz-world. A hned se toho chytli manažeři a pověřili HR najít vhodné kandidáty. A protože mám různě po webu profily, jako třeba na linkedinu, dostávám tak zhruba dvě nabídky práce denně. Mnohdy firmy ani netuší co chtějí, takže v popisu práce vyjmenují všechny možné technologie, linuxové distribuce (přidají ještě AIX a Solaris), aspoň 4 různé skriptovací jazyky (bash, perl, Python a Ruby), Chef, Puppet, Ansible. Zkušenosti s QA a Selenium frameworkem jsou plus. A u pohovoru vás pak navíc ještě prozkouší z SQL syntaxe a JavaScriptu, protože bez toho dneska není možné vyvinout zhola nic. A požadovaná praxe je minimálně 5 let a to i u technologií dostupných nějaké 2-3 roky. Vrcholem jsou pak indičtí headhunteři, kteří vás budou přesvědčovat, že jste super kandidát na DevOps pozici, protože jsem přeci DevOps engineer a ty Windows, PowerShell a C# se v klidu doučím a jsem přece celý žhavý se kvůli půlročnímu kontraktu odstěhovat 2000 km daleko...

Takže jak vidíte, cloud už tu s námi zůstane navždy. Administrátoři a programátoři nemusí zakládat stávkové výbory, cloud jim práci nevezme, ale určitě ještě přidá. A za rok tu máme nějaký nový buzzword. Slyšeli jste třeba o pronájmu algoritmů jako micro-service?