Podrobna analiza AWS Lambda

Prevod članka je bil pripravljen posebej za študente tečaja "Storitve v oblaku". Vas zanima razvoj v tej smeri? Oglejte si mojstrski tečaj Egorja Zueva (TeamLead pri InBit) "Storitev AWS EC2" in se pridružite naslednji tečajni skupini: začne se 26. septembra.

Podrobna analiza AWS Lambda

Več ljudi se seli na AWS Lambda zaradi razširljivosti, zmogljivosti, prihrankov in zmožnosti obravnavanja milijonov ali celo trilijonov zahtev na mesec. Če želite to narediti, vam ni treba upravljati infrastrukture, na kateri deluje storitev. Samodejno skaliranje vam omogoča, da postrežete na tisoče hkratnih zahtev na sekundo. Mislim, da lahko AWS Lambda upravičeno imenujemo ena najbolj priljubljenih storitev AWS.

AWS Lambda

AWS Lambda je brezstrežniška računalniška storitev, ki temelji na dogodkih in vam omogoča izvajanje kode brez zagotavljanja ali upravljanja strežnikov in razširitev drugih storitev AWS z uporabo logike po meri. Lambda se samodejno odziva na različne dogodke (imenovane sprožilci), kot so zahteve HTTP prek Amazon API Gateway, spremembe podatkov v vedrih Amazon S3 ali tabelah Amazon DynamoDB; lahko pa zaženete svojo kodo prek klicev API z uporabo AWS SDK in prehodov stanj v AWS Step Functions.

Lambda izvaja kodo na visoko razpoložljivi računalniški infrastrukturi in je v celoti odgovoren za upravljanje osnovne platforme, vključno z vzdrževanjem strežnika in operacijskega sistema, zagotavljanjem virov, samodejnim skaliranjem, spremljanjem kode in beleženjem. To pomeni, da morate le naložiti svojo kodo in konfigurirati, kako in kdaj naj se izvede. Storitev pa bo poskrbela za njen zagon in zagotovila visoko razpoložljivost vaše aplikacije.

Kdaj preklopiti na Lambda?

AWS Lambda je priročna računalniška platforma, ki je primerna za različne primere uporabe, če storitev podpira jezik in čas izvajanja vaše kode. Če se želite osredotočiti na svojo kodo in poslovno logiko, medtem ko zunanje izvajanje vzdrževanja strežnika, oskrbe in prilagajanja po razumni ceni, je AWS Lambda zagotovo prava pot.

Lambda je idealna za ustvarjanje programskih vmesnikov, in če jo uporabljate v povezavi z API Gateway, lahko znatno zmanjšate stroške in hitreje pridete na trg. Obstajajo različni načini uporabe Lambda funkcij in možnosti za organizacijo brezstrežniške arhitekture - vsak lahko izbere nekaj primernega glede na svoj cilj.

Lambda vam omogoča izvajanje širokega spektra nalog. Tako lahko zahvaljujoč podpori CloudWatch ustvarite odložena opravila in avtomatizirate posamezne procese. Ni omejitev glede narave in intenzivnosti uporabe storitve (upošteva se poraba pomnilnika in čas) in nič vam ne preprečuje sistematičnega dela na polnopravni mikrostoritvi, ki temelji na Lambdi.

Tukaj lahko ustvarite storitveno usmerjena dejanja, ki se ne izvajajo neprekinjeno. Tipičen primer je skaliranje slike. Lambda funkcije ostajajo pomembne tudi v primeru porazdeljenih sistemov.

Torej, če se ne želite ukvarjati z dodeljevanjem in upravljanjem računalniških virov, poskusite AWS Lambda; če ne potrebujete težkih izračunov, ki zahtevajo veliko virov, poskusite tudi AWS Lambda; če se vaša koda občasno izvaja, je prav, poskusite AWS Lambda.

varnost

Zaenkrat ni nobenih pritožb glede varnosti. Po drugi strani pa so številni notranji procesi in implementacijske funkcije tega modela skriti pred uporabnikom upravljanega izvajalnega okolja AWS Lambda, nekatera splošno sprejeta pravila varnosti v oblaku postanejo nepomembna.

Tako kot večina storitev AWS je tudi Lambda zagotovljena na podlagi skupne varnosti in skladnosti med AWS in stranko. To načelo zmanjša operativno obremenitev odjemalca, saj AWS prevzame naloge vzdrževanja, upravljanja in spremljanja komponent storitve – od gostiteljskega operacijskega sistema in virtualizacijske plasti do fizične varnosti infrastrukturnih sredstev.

Natančneje, ko govorimo o AWS Lambda, je AWS odgovoren za upravljanje osnovne infrastrukture, povezanih osnovnih storitev, operacijskega sistema in aplikacijske platforme. Medtem ko je naročnik odgovoren za varnost svoje kode, shranjevanje zaupnih podatkov, nadzor dostopa do njih, kot tudi do storitev in virov Lambda (Identity and Access Management, IAM), vključno v mejah uporabljenih funkcij.

Spodnji diagram prikazuje model deljene odgovornosti, ki velja za AWS Lambda. Odgovornost AWS je oranžna, odgovornost stranke pa modra. Kot lahko vidite, AWS prevzame več odgovornosti za aplikacije, nameščene v storitvi.

Podrobna analiza AWS Lambda

Model deljene odgovornosti, ki se uporablja za AWS Lambda

Lambda runtime

Glavna prednost Lambde je, da z opravljanjem funkcije v vašem imenu storitev sama dodeli potrebna sredstva. Lahko se izognete zapravljanju časa in truda za sistemsko administracijo in se osredotočite na poslovno logiko in kodiranje.

Storitev Lambda je razdeljena na dve ravnini. Prva je nadzorna ravnina. Glede na Wikipedijo je nadzorna ravnina del omrežja, ki je odgovoren za prenos signalnega prometa in usmerjanje. Je primarna komponenta, ki sprejema globalne odločitve o zagotavljanju, servisiranju in distribuciji delovnih obremenitev. Poleg tega nadzorna ravnina deluje kot omrežna topologija ponudnika rešitve, odgovorna za usmerjanje in upravljanje prometa.

Druga ravnina je podatkovna ravnina. Tako kot krmilno letalo ima svoje naloge. Nadzorna ravnina zagotavlja API-je za upravljanje funkcij (CreateFunction, UpdateFunctionCode) in nadzoruje, kako Lambda komunicira z drugimi storitvami AWS. Podatkovna ravnina nadzoruje Invoke API, ki izvaja funkcije Lambda. Po klicu funkcije nadzorna ravnina dodeli ali izbere obstoječe izvajalno okolje, ki je vnaprej pripravljeno za to funkcijo, in nato izvede kodo v njem.

AWS Lambda podpira različne programske jezike, vključno z Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 in drugimi, prek njihovih ustreznih izvajalnih okolij. AWS jih redno posodablja, distribuira varnostne popravke in izvaja druge vzdrževalne dejavnosti v teh okoljih. Lambda vam omogoča tudi uporabo drugih jezikov, pod pogojem, da sami implementirate ustrezno okolje izvajanja. In potem boste morali poskrbeti za njegovo vzdrževanje, vključno s spremljanjem njegove varnosti.

Kako vse skupaj poteka in kako bo služba opravljala vaše naloge?

Vsaka funkcija se izvaja v enem ali več namenskih okoljih, ki obstajajo samo za čas trajanja te funkcije in se nato uničijo. Vsako okolje naredi samo en klic naenkrat, vendar se ponovno uporabi, če obstaja več serijskih klicev iste funkcije. Vsa izvajalna okolja delujejo na virtualnih strojih s strojno virtualizacijo – tako imenovanih microVM. Vsak microVM je dodeljen določenemu računu AWS in ga lahko okolja ponovno uporabijo za izvajanje različnih funkcij znotraj tega računa. MicroVM so zapakirani v gradnike strojne platforme Lambda Worker, ki je v lasti in upravljanju AWS. Različne funkcije ne morejo uporabljati istega izvajalnega okolja, niti mikroVM niso edinstvene za različne račune AWS.

Podrobna analiza AWS Lambda

Lambda izolacijski model AWS

Izolacija izvajalnih okolij se izvaja z uporabo več mehanizmov. Na najvišji ravni vsakega okolja so ločene kopije naslednjih komponent:

  • Koda funkcije
  • Vse plasti Lambda, izbrane za funkcijo
  • Okolje za izvajanje funkcij
  • Minimalni uporabniški prostor, ki temelji na Amazon Linuxu

Za izolacijo različnih izvajalskih okolij se uporabljajo naslednji mehanizmi:

  • cgroups - omejite dostop do CPE, pomnilnika, pomnilnika in omrežnih virov za vsako okolje izvajanja;
  • imenski prostori - združevanje ID-jev procesov, ID-jev uporabnikov, omrežnih vmesnikov in drugih virov, ki jih upravlja jedro Linuxa. Vsako izvajalno okolje teče v svojem imenskem prostoru;
  • seccomp-bpf - omejuje sistemske klice, ki se lahko uporabljajo v času izvajanja;
  • iptables in usmerjevalne tabele - izolacija izvajalskih okolij drug od drugega;
  • chroot - omogoča omejen dostop do osnovnega datotečnega sistema.

V kombinaciji z lastniškimi izolacijskimi tehnologijami AWS ti mehanizmi zagotavljajo zanesljivo ločevanje med izvajanjem. Tako izolirana okolja ne morejo dostopati do podatkov iz drugih okolij ali jih spreminjati.

Čeprav lahko več izvajalnih obdobij istega računa AWS deluje na enem mikroVM, mikroVM v nobenem primeru ni mogoče deliti med različnimi računi AWS. AWS Lambda uporablja samo dva mehanizma za izolacijo mikroVM: instance EC2 in Firecracker. Izolacija gostov v Lambdi na podlagi primerkov EC2 obstaja od leta 2015. Firecracker je nov odprtokodni hipervizor, ki ga je posebej zasnoval AWS za delovne obremenitve brez strežnika in je bil predstavljen leta 2018. Fizična strojna oprema, ki poganja mikroVM, se deli med delovnimi obremenitvami v različnih računih.

Shranjevanje okolij in procesnih stanj

Čeprav so izvajalni časi Lambda edinstveni za različne funkcije, lahko večkrat kličejo isto funkcijo, kar pomeni, da lahko izvajalni čas preživi več ur, preden se uniči.

Vsako izvajalno okolje Lambda ima tudi zapisljiv datotečni sistem, dostopen prek imenika /tmp. Do njegove vsebine ni mogoče dostopati iz drugih izvajalnih okoljev. Kar zadeva obstojnost stanja procesa, datoteke, zapisane v /tmp, obstajajo ves življenjski cikel izvajalnega okolja. To omogoča zbiranje rezultatov več klicev, kar je še posebej uporabno za drage operacije, kot je nalaganje modelov strojnega učenja.

Prenos podatkov klicev

Invoke API se lahko uporablja v dveh načinih: način dogodka in način zahteve-odgovora. V načinu dogodka se klic doda v čakalno vrsto za kasnejšo izvedbo. V načinu zahteva-odziv se funkcija takoj pokliče s podanim koristnim tovorom, po katerem se vrne odgovor. V obeh primerih se funkcija izvaja v okolju Lambda, vendar z različnimi potmi tovora.

Med klici zahteva-odziv koristni tok teče od API-ja za obdelavo zahtev (API Caller), kot je AWS API Gateway ali AWS SDK, do izravnalnika obremenitve in nato do storitve klica Lambda (Invoke Service). Slednji določi primerno okolje za izvajanje funkcije in tja posreduje koristni tovor za dokončanje klica. Izravnalnik obremenitve prejema promet, zaščiten s TLS, prek interneta. Promet znotraj storitve Lambda – po izravnalniku obremenitve – poteka skozi notranji VPC v določeni regiji AWS.

Podrobna analiza AWS Lambda

Model obdelave klicev AWS Lambda: način zahteve-odziva

Dogodke je mogoče klicati takoj ali jih dodati v čakalno vrsto. V nekaterih primerih je čakalna vrsta implementirana z uporabo storitve Amazon SQS (Amazon Simple Queue Service), ki klice posreduje storitvi za izpolnjevanje klicev Lambda prek notranjega postopka anketiranja. Preneseni promet je zaščiten s TLS in ni dodatnega šifriranja podatkov, shranjenih v Amazon SQS.

Klici dogodkov ne vrnejo odgovorov – Lambda Worker preprosto ignorira vse informacije o odzivu. Klice na podlagi dogodkov iz Amazon S3, Amazon SNS, CloudWatch in drugih virov obdeluje Lambda v načinu dogodkov. Klici iz tokov Amazon Kinesis in DynamoDB, čakalnih vrst SQS, klicev Application Load Balancer in API Gateway se obdelujejo na način zahteva-odziv.

Spremljanje

Funkcije Lambda lahko spremljate in revidirate z različnimi mehanizmi in storitvami AWS, vključno z naslednjimi.

amazoncloudwatch
Zbira različne statistične podatke, kot so število zahtev, trajanje zahtev in število neuspelih zahtev.

Amazon CloudTrail
Omogoča vam beleženje, stalno spremljanje in vzdrževanje informacij o aktivnosti računa, povezanih z vašo infrastrukturo AWS. Imeli boste celotno zgodovino dejanj, izvedenih z uporabo konzole AWS Management Console, AWS SDK, orodij ukazne vrstice in drugih storitev AWS.

Rentgen AWS
Zagotavlja popoln vpogled v vse faze obdelave zahtevkov v vaši aplikaciji na podlagi zemljevida njenih notranjih komponent. Omogoča analizo aplikacij med razvojem in v produkcijskih okoljih.

Konfiguracija AWS
Sledili boste lahko spremembam konfiguracije funkcije Lambda (vključno z izbrisom) in časov izvajanja, oznak, imen obdelovalcev, velikosti kode, dodelitve pomnilnika, nastavitev časovne omejitve in nastavitev sočasnosti ter vloge izvajanja Lambda IAM, podomrežij in povezav varnostnih skupin .

Zaključek

AWS Lambda ponuja zmogljiv nabor orodij za izdelavo varnih in razširljivih aplikacij. Veliko praks varnosti in skladnosti v AWS Lambda je enakih kot v drugih storitvah AWS, čeprav obstajajo izjeme. Od marca 2019 je Lambda skladna s SOC 1, SOC 2, SOC 3, PCI DSS, skladnostjo z Zakonom o prenosljivosti in odgovornosti zdravstvenega zavarovanja (HIPAA) in drugimi predpisi. Torej, ko razmišljate o implementaciji svoje naslednje aplikacije, razmislite o storitvi AWS Lambda – morda je najboljša za vašo nalogo.

Vir: www.habr.com

Dodaj komentar