Preklad článku bol pripravený špeciálne pre študentov kurzu Zaujíma vás rozvoj v tejto oblasti? Sledujte masterclass Egora Zueva (TeamLead vo firme InBit) a pridajte sa k najbližšej skupine kurzu: začiatok 26. septembra.

čoraz viac ľudí prechádza na AWS Lambda kvôli škálovateľnosti, výkonu, úsporám a možnosti spracovávať milióny a dokonca aj trilióny požiadaviek za mesiac. Na to nie je potrebné spravovať infraštruktúru, na ktorej služba beží. A automatické škálovanie umožňuje obsluhovať tisíce súčasných požiadaviek za sekundu. Myslím, že AWS Lambda možno správne nazvať jednou z najžiadanejších služieb AWS.
AWS Lambda
AWS Lambda je udalosťami riadená servisná platforma bez serverov, ktorá umožňuje spúšťať kód bez prideľovania a správy serverov a dopĺňať ďalšie služby AWS na základe logiky používateľa. Lambda automaticky reaguje na rôzne udalosti (tzv. spúšťače), napríklad na HTTP požiadavky cez Amazon API Gateway, zmenu údajov v Amazon S3 alebo tabuľkách Amazon DynamoDB; alebo môžete spustiť svoj kód prostredníctvom API volaní, používajúc AWS SDK a prechody medzi stavmi v AWS Step Functions.
Lambda vykonáva kód na vysoko dostupnej výpočtovej infraštruktúre a úplne sa stará o správu podkladovej platformy, vrátane údržby serverov a operačného systému, prideľovania zdrojov, automatického škálovania, monitorovania kódu a vedenia denníkov. To znamená, že stačí nahrať svoj kód a nastaviť, ako a kedy by sa mal vykonávať. Služba sa postará o jeho spustenie a zabezpečí vysokú dostupnosť vašej aplikácie.
Kedy prejsť na Lambda?
AWS Lambda je pohodlná výpočtová platforma vhodná na množstvo aplikačných scenárov, samozrejme, ak je jazyk a prostredie behu vášho kódu podporované službou. Ak sa chcete sústrediť na kód a obchodnú logiku, pričom údržbu serverov, prideľovanie zdrojov a škálovanie zveríte externému poskytovateľovi za rozumné peniaze, určite by ste mali prejsť na AWS Lambda.
Lambda je ideálna na vytváranie softvérových rozhraní a ak sa služba používa spolu s API Gateway, môžete výrazne znížiť náklady a rýchlejšie sa dostanete na trh. Existuje mnoho spôsobov, ako používať funkcie Lambda a varianty organizácie bezserverovej architektúry – každý si môže vybrať niečo vhodné podľa svojich cieľov.
Lambda umožňuje vykonávať široké spektrum úloh. Vďaka podpore CloudWatch môžete vytvárať naplánované úlohy a automatizovať jednotlivé procesy. Nebudú žiadne obmedzenia týkajúce sa povahy alebo intenzity používania služby (berú sa do úvahy náklady na pamäť a čas), a nič vám nebráni systematicky pracovať na plnohodnotnej mikroservise založenej na Lambda.
Tu môžete vytvárať akcie orientované na služby, ktoré sa nevykonávajú neustále. Typickým príkladom je škálovanie obrázkov. Dokonca aj v prípade distribuovaných systémov funkcie Lambda nestrácajú svoju relevanciu.
Takže, ak sa nechcete zaoberať prideľovaním a spravovaním výpočtových zdrojov – vyskúšajte AWS Lambda; ak nepotrebujete ťažké, náročné výpočty – tiež vyskúšajte AWS Lambda; ak sa váš kód vykonáva periodicky – to je správne, mali by ste skúsiť AWS Lambda.
Bezpečnosť
Doteraz nie sú žiadne sťažnosti na bezpečnosť. Na druhej strane, pretože mnohé interné procesy a špecifiká implementácie tohto modelu sú používateľovi spravovanej prostredia AWS Lambda skryté, niektoré všeobecne akceptované pravidlá cloudovej bezpečnosti strácajú význam.
Rovnako ako väčšina služieb AWS, Lambda sa poskytuje na princípe spoločnej zodpovednosti AWS a klienta za bezpečnosť a dodržiavanie predpisov. Tento princíp znižuje prevádzkovú záťaž klienta, pretože AWS preberá úlohy údržby, správy a kontroly komponentov služby – od operačného systému hostiteľa a úrovne virtualizácie až po fyzickú bezpečnosť objektov infraštruktúry.
Ak hovoríme konkrétne o AWS Lambda, AWS sa stará o správu základnej infraštruktúry, súvisiacich základných služieb, operačného systému a aplikačnej platformy. Zatiaľ čo klient nesie zodpovednosť za zabezpečenie svojho kódu, uchovávanie dôverných údajov, kontrolu prístupu k nim, ako aj k službe a prostriedkom Lambda (Identity and Access Management, IAM), vrátane použitých funkcií.
Na schéme nižšie je znázornený model zdieľanej zodpovednosti, ktorý sa vzťahuje na AWS Lambda. Oblasť zodpovednosti AWS je vyfarbená na oranžovo, zatiaľ čo zodpovednosť klienta je na modro. Ako vidíte, AWS preberá viac zodpovednosti za aplikácie nasadené na službe.

Model zdieľanej zodpovednosti, ktorý sa vzťahuje na AWS Lambda
Prostredie Lambda
Hlavnou výhodou Lambda je, že pri vykonávaní funkcie vaším menom služba sama prideľuje potrebné prostriedky. Môžete sa vyhnúť administrácii systémov a sústrediť sa na podnikateľskú logiku a písanie kódu.
Služba Lambda je rozdelená na dve roviny. Prvá je riadiaca rovina. Podľa Wikipédie, riadiaca rovina (control plane) je časť siete, ktorá sa stará o prenos signálového toku a smerovanie. Je hlavným komponentom, ktorý prijíma globálne rozhodnutia o pridelení, údržbe a rozdeľovaní pracovných záťaží. Okrem toho, riadiaca rovina zohráva úlohu v sieťovej topológii dodávateľa riešenia, ktorý sa stará o smerovanie a správu toku.
Druhá rovina je rovina dát. Rovnako ako riadiaca rovina má aj ona svoje úlohy. Riadiaca rovina poskytuje API na správu funkcií (CreateFunction, UpdateFunctionCode) a kontroluje interakciu Lambda s inými službami AWS. Rovina dát spravuje API volaní (Invoke API), ktoré spúšťa funkcie Lambda. Po vyvolaní funkcie riadiaca rovina pridelí alebo vyberie existujúce, vopred pripravené prostredie na vykonávanie tejto funkcie a následne vykoná kód v ňom.
AWS Lambda podporuje množstvo programovacích jazykov, vrátane Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 a ďalších prostredníctvom príslušných runtime prostredí. AWS ich pravidelne aktualizuje, distribuuje bezpečnostné opravy a vykonáva ďalšie údržbové operácie týchto prostredí. Lambda umožňuje používať aj iné jazyky, pokiaľ si sami implementujete príslušné runtime prostredie. Potom budete musieť zabezpečiť jeho údržbu, vrátane dohľadu nad bezpečnosťou.
Ako to všetko funguje a ako služba vykoná vaše funkcie?
Každá funkcia funguje v jednej alebo viacerých vyhradených prostrediach, ktoré existujú iba počas životného cyklu tejto funkcie, a potom sú zničené. V každom prostredí sa realizuje iba jedno volanie naraz, ale je znova použité, ak existuje množstvo sériových volaní tej istej funkcie. Všetky runtime prostredia fungujú na virtuálnych strojoch s hardvérovou virtualizáciou — takzvaných microVM. Každý microVM je priradený k konkrétnemu účtu AWS a môže byť opakovane používané prostrediami na vykonávanie rôznych funkcií v tomto účte. MicroVM sú zabalené do štrukturálnych blokov hardvérovej platformy Lambda Worker, ktorú vlastní a spravuje AWS. To isté runtime prostredie nemôže byť používané rôznymi funkciami, rovnako ako microVM sú jedinečné pre rôzne účty AWS.

Model izolácie v AWS Lambda
Izolácia runtime prostredí je realizovaná prostredníctvom niekoľkých mechanizmov. Na najvyššej úrovni každého prostredia sú prítomné samostatné kópie nasledujúcich komponentov:
- Kód funkcie
- Akékoľvek vrstvy Lambda vybrané pre funkciu
- Runtime prostredie funkcie
- Minimálny používateľský priestor na základe Amazon Linux
Na izoláciu rôznych runtime prostredí sa používajú nasledujúce mechanizmy:
- cgroups — obmedzenie prístupu k zdrojom CPU, pamäte, kapacity diskov a siete pre každé runtime prostredie;
- namespaces — zoskupenie ID procesov, ID používateľov, sieťových rozhraní a ďalších zdrojov, ktoré spravuje jadro Linuxu. Každé runtime prostredie funguje vo svojom vlastnom namespace;
- seccomp-bpf — obmedzenie systémových volaní, ktoré je možné použiť v runtime prostredí;
- iptables a routovacie tabuľky — izolácia runtime prostredí medzi sebou;
- Chroot — poskytovanie obmedzeného prístupu k podkladovému súborovému systému.
V kombinácii s proprietárnymi technológiami izolácie AWS zaručujú uvedené mechanizmy spoľahlivé oddelenie vykonávacích prostredí. Izolované prostredia nemôžu pristupovať k dátam iných prostredí a meniť ich.
Hoci niekoľko vykonávacích prostredí jednej účtu AWS môže bežať na jednom microVM, pod žiadnymi okolnosťami nemôžu byť microVM zdieľané rôznymi účtami AWS. Pre izoláciu microVM v AWS Lambda sa používajú len dva mechanizmy: EC2 inštancie a Firecracker. Izolácia hostí (guest isolation) v Lambda založená na inštanciách EC2 sa aplikuje od roku 2015. Firecracker je nový hypervízor s otvoreným kódom, ktorý bol špeciálne navrhnutý AWS pre serverless pracovné zaťaženia a predstavený v roku 2018. Fyzické hardvérové vybavenie, na ktorom bežia microVM, zdieľajú pracovné zaťaženia rôznych účtov.
Uloženie prostredí a stavov procesov
Hoci vykonávacie prostredia Lambda sú jedinečné pre rôzne funkcie, je možné opakovane vyvolávať rovnakú funkciu, čo znamená, že vykonávacie prostredie môže prežiť niekoľko hodín, kým bude zničené.
V každom vykonávacom prostredí Lambda je tiež dostupný súborový systém so zápisovými oprávneniami, prístupný cez adresár /tmp. Jeho obsah nie je prístupný z iných vykonávacích prostredí. Pokiaľ ide o ukladanie stavov procesov, súbory zapísané do /tmp existujú počas celej životnosti vykonávacieho prostredia. To umožňuje akumuláciu výsledkov viacerých vyvolaní, čo je obzvlášť užitočné pre náročné operácie, ako je načítanie modelov strojového učenia.
Príjem údajov od vyvolaní
Rozhranie Invoke API môže byť využité v dvoch režimoch: v režime udalostí a v režime 'požiadavka - odpoveď'. V režime udalostí sa vyvolanie pridáva do fronty na neskoršie vykonanie. V režime 'požiadavka - odpoveď' sa funkcia vyvoláva okamžite s poskytnutou náložou, po čom nasleduje odpoveď. V oboch prípadoch sa funkcia vykonáva v prostredí Lambda, avšak s rôznymi spôsobmi nálože.
Pri volaniach typu „dotaz – odpoveď“ sa zaťažujúca informácia dostáva od API spracovania požiadaviek (API Caller), ako je AWS API Gateway alebo AWS SDK, do vyvažovača záťaže a následne do služby vykonávania volaní Lambda (Invoke Service). Posledná určuje vhodné prostredie na vykonanie funkcie a prenáša tam zaťažujúcu informáciu na dokončenie volania. Vyvažovač záťaže prijíma prenos s ochranou TLS cez internet. Prenos v rámci služby Lambda – po vyvažovači záťaže – prebieha cez interný VPC v konkrétnom regióne AWS.

Model spracovania volaní AWS Lambda: režim „dotaz – odpoveď“
Eventové volania môžu prebiehať okamžite alebo môžu byť zaradené do fronty. V niektorých prípadoch je fronta realizovaná pomocou služby Amazon SQS (Amazon Simple Queue Service), ktorá prenáša volania do služby vykonávania volaní Lambda prostredníctvom interného procesu dotazovania (poller). Prenášaný prenos je zabezpečený pomocou TLS, pričom žiadne ďalšie šifrovanie údajov uložených v Amazon SQS nie je poskytnuté.
Eventové volania nevracajú odpovede – akúkoľvek odpovedajúcu informáciu Lambda Worker jednoducho ignoruje. Volania na základe udalostí z Amazon S3, Amazon SNS, CloudWatch a iných zdrojov spracováva služba Lambda v režime udalostí. Volania z tokov Amazon Kinesis a DynamoDB, volania frontov SQS, vyvažovačov záťaže aplikácií a API Gateway sa spracovávajú v režime „dotaz – odpoveď“.
Monitorovanie
Funkcie Lambda môžete sledovať a auditovať pomocou rôznych mechanizmov a služieb AWS, vrátane nasledujúcich.
Amazon CloudWatch
Zbiera rôzne štatistiky, ako je počet požiadaviek, trvanie vykonania požiadaviek a počet požiadaviek, ktoré skončili chybou.
Amazon CloudTrail
Umožňuje viesť záznamy, kontinuálne monitorovanie a uchovávať informácie o aktivite vo vašom účte, ktoré súvisia s vašou infraštruktúrou AWS. Budete mať kompletnú chronológiu akcií vykonaných prostredníctvom konzoly AWS Management Console, AWS SDK, príkazových nástrojov a iných služieb AWS.
AWS X-Ray
Zaisťuje úplnú viditeľnosť všetkých fáz spracovania požiadaviek vo vašej aplikácii na základe mapy jej vnútorných komponentov. Umožňuje analyzovať aplikácie počas vývoja a v produkčnom prostredí.
AWS Config
Môžete sledovať zmeny konfigurácie funkcií Lambda (vrátane ich odstránenia) a prostredia, značiek, mien spracovateľov, veľkosti kódu, pridelenia pamäte, nastavení časového limitu a parametrov paralelizmu, ako aj úlohy vykonávania Lambda IAM, podnetu a priradenia skupín zabezpečenia.
Záver
AWS Lambda ponúka mocnú sadu nástrojov na vytváranie bezpečných a škálovateľných aplikácií. Mnohé metódy zabezpečenia a dodržiavania predpisov v AWS Lambda sa neodlišujú od tých, ktoré sa používajú v ostatných službách AWS, hoci existujú aj výnimky. K februáru 2019 Lambda spĺňa požiadavky SOC 1, SOC 2, SOC 3, PCI DSS, zákona USA o kontinuitách a odpovednosti zdravotného poistenia (HIPAA) a ďalších regulatív. Preto, ak zvažujete implementáciu novej aplikácie, zvažujte službu AWS Lambda – možno je ideálnym riešením pre váš projekt.
Zdroj: habr.com
