Překlad článku byl připraven speciálně pro studenty kurzu . Zajímá vás, jak se rozvíjet v této oblasti? Podívejte se na masterclass Egora Zueva (TeamLead ve společnosti InBit) a přidejte se k nejbližší skupině kurzu: začátek 26. září.

Stále více lidí přechází na AWS Lambda kvůli škálovatelnosti, výkonnosti, úsporám a možnosti zpracovávat miliony a dokonce i triliony požadavků měsíčně. K tomu není potřeba spravovat infrastrukturu, na které služba běží. Automatické škálování umožňuje obsluhovat tisíce současných požadavků za sekundu. Myslím, že AWS Lambda lze právem označit za jednu z nejžádanějších služeb AWS.
AWS Lambda
AWS Lambda je událostmi řízená služba serverless výpočtů, která umožňuje spouštět kód bez alokace a správy serverů a doplňuje další služby AWS na základě uživatelské logiky. Lambda automaticky reaguje na různá události (takzvané spouštěče), například na HTTP požadavky přes Amazon API Gateway, na změny dat v koších Amazon S3 nebo tabulkách Amazon DynamoDB; nebo můžete spustit svůj kód prostřednictvím API volání pomocí AWS SDK a přechodů mezi stavy v AWS Step Functions.
Lambda vykonává kód na vysoce dostupné výpočetní infrastruktuře a zcela zodpovídá za správu podkladové platformy, včetně údržby serverů a operačního systému, alokace zdrojů, automatického škálování, monitorování kódu a vedení protokolů. To znamená, že stačí nahrát svůj kód a nastavit, jak a kdy má být vykonáván. Služba se postará o jeho spuštění a zajistí vysokou dostupnost vaší aplikace.
Kdy přejít na Lambda?
AWS Lambda je pohodlná výpočetní platforma vhodná pro mnoho aplikačních scénářů, pokud samozřejmě jazyk a runtime vašeho kódu jsou službou podporovány. Pokud se chcete soustředit na kód a obchodní logiku, zatímco obnovu serverů, alokaci zdrojů a škálování svěříte externímu poskytovateli za rozumné peníze, určitě byste měli přejít na AWS Lambda.
Lambda je ideální pro vytváření programových rozhraní a pokud použijete službu spolu s API Gateway, můžete výrazně snížit náklady a rychleji uvést na trh. Existují různé způsoby využití funkcí Lambda a možnosti uspořádání serverless architektury — každý si může vybrat něco vhodného s ohledem na stanovený cíl.
Lambda umožňuje provádět široké spektrum úloh. Díky podpoře CloudWatch můžete vytvářet odložené úkoly a automatizovat jednotlivé procesy. Neexistují žádná omezení týkající se charakteru a intenzity používání služby (zohledňuje se spotřeba paměti a čas) a nic vám nebrání pracovat postupně na plnohodnotném microservice založeném na Lambdě.
Zde lze vytvářet na služby orientované akce, které se neprovádějí neustále. Typickým příkladem je škálování obrázků. I v případě distribuovaných systémů funkce Lambda neztrácejí na aktuálnosti.
Takže, pokud se nechcete zabývat vyčleňováním a správou výpočetních zdrojů — zkuste AWS Lambda; pokud nepotřebujete těžké, náročné výpočty — také zkuste AWS Lambda; pokud se váš kód spouští periodicky — máte pravdu, měli byste vyzkoušet AWS Lambda.
Bezpečnost
Zatím není k bezpečnosti žádné výtky. Na druhou stranu, protože uživateli řízené prostředí AWS Lambda skrývá mnoho vnitřních procesů a zvláštností implementace tohoto modelu, některá obecně přijímaná pravidla cloudové bezpečnosti ztrácejí na platnosti.
Stejně jako většina služeb AWS, Lambda je poskytována na základě zásady sdílené odpovědnosti AWS a klienta za bezpečnost a dodržování regulací. Tento princip snižuje operační zátěž na klienta, protože AWS se ujímá úkolů údržby, správy a kontroly komponentů služby — od operačního systému hostitele a úrovně virtualizace až po fyzickou bezpečnost objektů infrastruktury.
Pokud mluvíme konkrétně o AWS Lambda, AWS se stará o správu podložní infrastruktury, souvisejících základních služeb, operačního systému a platformy aplikací. Zatímco klient nese odpovědnost za zabezpečení svého kódu, ukládání citlivých dat, řízení přístupu k nim, jakož i k službám a prostředkům Lambda (Identity and Access Management, IAM), včetně použitých funkcí.
Na níže uvedeném diagramu je znázorněn model sdílené odpovědnosti, který se vztahuje na AWS Lambda. Oblast odpovědnosti AWS je vyznačena oranžovou barvou a odpovědnost klienta je modrá. Jak vidíte, AWS nese větší odpovědnost za aplikace nasazené na službě.

Model sdílené odpovědnosti, který se vztahuje na AWS Lambda
Prostředí runtime Lambda
Hlavní výhodou Lambda je, že když vykonává funkci vaším jménem, služba sama přiděluje potřebné prostředky. Můžete se vyhnout investicím času a úsilí do správy systémů a soustředit se na obchodní logiku a psaní kódu.
Služba Lambda je rozdělena do dvou rovin. První je řídící rovina. Podle Wikipedie je řídící rovina (control plane) částí sítě zodpovědnou za přepravu signálního provozu a směrování. Je hlavní součástí, která přijímá globální rozhodnutí o alokaci, údržbě a rozdělení pracovních zátěží. Řídící rovina také slouží jako síťová topologie dodavatele řešení, zodpovědná za směrování provozu a jeho správu.
Druhá rovina je rovina dat. Ta má, stejně jako řídící rovina, své úkoly. Řídící rovina poskytuje API pro správu funkcí (CreateFunction, UpdateFunctionCode) a kontroluje interakci Lambda s jinými službami AWS. Rovina dat spravuje API volání (Invoke API), které spouští funkce Lambda. Po vyvolání funkce řídící rovina přiděluje nebo vybírá existující, předem připravené prostředí runtime pro tuto funkci a poté v něm vykonává kód.
AWS Lambda podporuje řadu programovacích jazyků, včetně Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 a dalších prostřednictvím odpovídajících běhových prostředí. AWS je pravidelně aktualizuje, distribuuje opravy zabezpečení a provádí další údržbu těchto prostředí. Lambda také umožňuje používat jiné jazyky, za podmínky, že sami implementujete odpovídající běhové prostředí. V takovém případě se budete muset postarat o jeho údržbu, včetně sledování bezpečnosti.
Jak to všechno funguje a jak bude služba vykonávat vaše funkce?
Každá funkce běží v jednom nebo více vyhrazených prostředích, která existují pouze po dobu životního cyklu této funkce a poté jsou zničena. V každém prostředí se současně provádí pouze jeden hovor, ale je znovu použito, pokud dojde k více sériovým hovorům téže funkce. Všechna běhová prostředí fungují na virtuálních strojích s hardwarovou virtualizací - na takzvaných microVM. Každá microVM je přiřazena konkrétnímu účtu AWS a může být opakovaně používána prostředími k provádění různých funkcí v tomto účtu. MicroVM jsou baleny do stavebních bloků hardwarové platformy Lambda Worker, kterou vlastní a spravuje AWS. Totéž běhové prostředí nemůže být použito různými funkcemi, stejně jako jsou microVM jedinečné pro různé účty AWS.

Model izolace v AWS Lambda
Izolace běhových prostředí je realizována pomocí několika mechanismů. Na nejvyšší úrovni každé prostředí existují oddělené kopie následujících komponentů:
- Kód funkce
- Jakékoliv vrstvy Lambda zvolené pro funkci
- Běhové prostředí funkce
- Minimální uživatelský prostor založený na Amazon Linux
Pro izolaci různých běhových prostředí se používají následující mechanismy:
- cgroups - omezení přístupu k prostředkům CPU, paměti, šířce pásma a síti pro každé běhové prostředí;
- namespaces - seskupení ID procesů, ID uživatelů, síťových rozhraní a dalšího majetku, který spravuje jádro Linuxu. Každé běhové prostředí funguje ve svém vlastním prostoru názvů;
- seccomp-bpf - omezení systémových volání, která lze použít v běhovém prostředí;
- iptables a routing tables - izolace běhových prostředí mezi sebou;
- chroot — poskytování omezeného přístupu k níže ležícímu souborovému systému.
Ve spojení se svými proprietárními izolačními technologiemi AWS zajišťují uvedené mechanismy spolehlivé oddělení prostředí provádění. Takto izolovaná prostředí nemohou přistupovat k datům jiných prostředí a měnit je.
I když může na jednom microVM běžet více prostředí provádění jedné účtu AWS, nemohou být microVM za žádných okolností sdíleny různými účty AWS. Pro izolaci microVM v AWS Lambda se používají pouze dva mechanismy: instance EC2 a Firecracker. Izolace hostů v Lambda na bázi instancí EC2 se používá od roku 2015. Firecracker je nový hypervisor s otevřeným zdrojovým kódem, který byl speciálně navržen AWS pro serverless pracovní zátěže a uveden na trh v roce 2018. Fyzické zařízení, na kterém běží microVM, je společně využíváno pracovními zátěžemi různých účtů.
Ukládání prostředí a stavů procesů
Ačkoliv jsou prostředí provádění Lambda jedinečná pro různé funkce, je možné znovu volat stejnou funkci, což znamená, že prostředí provádění může existovat několik hodin, než bude zničeno.
Každé prostředí provádění Lambda také obsahuje zapisovatelný souborový systém, který je přístupný prostřednictvím adresáře /tmp. Jeho obsah není možné přistupovat z jiných prostředí provádění. Co se týče ukládání stavů procesů, soubory zapsané do /tmp existují po celou dobu životního cyklu prostředí provádění. To umožňuje akumulaci výsledků několika volání, což je obzvlášť užitečné pro tak náročné operace, jako je nahrávání modelů strojového učení.
Přenos dat volání
Rozhraní Invoke API lze využít ve dvou režimech: v režimu událostí a v režimu "dotaz — odpověď". V režimu událostí je volání přidáno do fronty pro následné provedení. V režimu "dotaz — odpověď" je funkce ihned vyzvána s poskytnutou užitečnou zátěží, po čemž se vrátí odpověď. V obou případech se funkce provádí v prostředí Lambda, ale s různými cestami užitečné zátěže.
Při voláních typu „dotaz – odpověď“ přichází z API zpracování požadavků (API Caller), jako je AWS API Gateway nebo AWS SDK, payload do load balanceru a poté do služby vykonávání volání Lambda (Invoke Service). Ta určuje vhodné prostředí pro provádění funkce a předává tam payload pro dokončení volání. Load balancer přijímá provoz s TLS ochranou přes internet. Provoz uvnitř služby Lambda – po load balanceru – prochází vnitřním VPC v určitém regionu AWS.

Model zpracování volání AWS Lambda: režim „dotaz – odpověď“
Událostní volání mohou být prováděna okamžitě nebo přidávána do fronty. V některých případech je fronta implementována pomocí služby Amazon SQS (Amazon Simple Queue Service), která předává volání do služby vykonávání volání Lambda pomocí vnitřního procesoru (poller). Předávaný provoz je chráněn TLS, přičemž žádné další šifrování dat uložených v Amazon SQS není zajištěno.
Událostní volání nevracejí odpovědi – jakékoli odpovědní informace Lambda Worker prostě ignoruje. Volání na základě událostí z Amazon S3, Amazon SNS, CloudWatch a dalších zdrojů zpracovává služba Lambda v režimu událostí. Volání z proudů Amazon Kinesis a DynamoDB, volání front SQS, load balanceru aplikací a API Gateway se zpracovávají v režimu „dotaz – odpověď“.
Monitoring
Funkce Lambda můžete monitorovat a auditovat pomocí různých mechanismů a služeb AWS, včetně následujících.
Amazon CloudWatch
Shromažďuje různé statistické údaje, jako je počet požadavků, doba trvání provádění požadavků a počet požadavků, které skončily chybou.
Amazon CloudTrail
Umožňuje vedení protokolů, nepřetržité monitorování a uchovávání informací o aktivitách ve vašem účtu, které souvisí s vaší infrastrukturou AWS. Budete mít kompletní chronologii akcí provedených prostřednictvím konsoly AWS Management Console, AWS SDK, nástrojů příkazového řádku a dalších služeb AWS.
AWS X-Ray
Zajišťuje úplnou viditelnost všech fází zpracování požadavků ve vaší aplikaci na základě mapy jejích vnitřních komponentů. Umožňuje analyzovat aplikace během vývoje a v produkčním prostředí.
AWS Config
Budete moci sledovat změny v konfiguraci funkcí Lambda (včetně jejich odstranění) a runtime, tagů, názvů zpracovatelů, velikosti kódu, přidělování paměti, nastavení časového limitu a parametrů paralelismu, stejně jako role provádění Lambda IAM, podsítě a přiřazení bezpečnostních skupin.
Závěr
AWS Lambda nabízí silný soubor nástrojů pro vytváření bezpečných a škálovatelných aplikací. Mnoho metod zabezpečení a ochrany shody v AWS Lambda se neliší od těch používaných v ostatních službách AWS, i když existují výjimky. K březnu 2019 Lambda splňuje požadavky SOC 1, SOC 2, SOC 3, PCI DSS, zákona USA o kontinuitě a odpovědnosti v oblasti zdravotního pojištění (HIPAA) a dalších regulací. Proto, když zvažujete implementaci další aplikace, zvažte službu AWS Lambda – možná je ideální pro vaši úlohu.
Zdroj: habr.com
