Detaljna analiza AWS Lambda

Prijevod članka pripremljen je posebno za studente predmeta "Cloud usluge". Zainteresovani ste za razvoj u ovom pravcu? Pogledajte majstorsku klasu Egora Zueva (TeamLead na InBit-u) "AWS EC2 usluga" i pridružite se sledećoj grupi kurseva: počinje 26. septembra.

Detaljna analiza AWS Lambda

Sve više ljudi prelazi na AWS Lambda radi skalabilnosti, performansi, uštede i mogućnosti rukovanja milionima ili čak trilionima zahtjeva mjesečno. Da biste to učinili, ne morate upravljati infrastrukturom na kojoj servis radi. A automatsko skaliranje vam omogućava da poslužite hiljade istovremenih zahtjeva u sekundi. Mislim da se AWS Lambda s pravom može nazvati jednim od najpopularnijih AWS servisa.

AWS Lambda

AWS Lambda je računarska usluga vođena događajima bez servera koja vam omogućava da pokrenete kod bez obezbeđivanja ili upravljanja serverima i proširite druge AWS usluge koristeći prilagođenu logiku. Lambda automatski odgovara na različite događaje (koji se nazivaju okidači), kao što su HTTP zahtjevi preko Amazon API Gateway-a, promjene podataka u Amazon S3 buckets ili Amazon DynamoDB tabele; ili možete pokrenuti svoj kod kroz API pozive koristeći AWS SDK i prelaze stanja u AWS Step Functions.

Lambda pokreće kod na visoko dostupnoj računarskoj infrastrukturi i u potpunosti je odgovoran za administriranje osnovne platforme, uključujući održavanje servera i operativnog sistema, obezbjeđivanje resursa, automatsko skaliranje, praćenje koda i evidentiranje. Odnosno, samo trebate učitati svoj kod i konfigurirati kako i kada treba da se izvrši. Zauzvrat, servis će se pobrinuti za njegovo pokretanje i osigurati visoku dostupnost vaše aplikacije.

Kada preći na Lambda?

AWS Lambda je zgodna računarska platforma koja je pogodna za različite slučajeve upotrebe, sve dok usluga podržava jezik i vrijeme izvođenja vašeg koda. Ako želite da se usredsredite na svoj kod i poslovnu logiku dok eksternalizujete održavanje servera, obezbeđivanje i skaliranje po razumnoj ceni, AWS Lambda je definitivno pravi put.

Lambda je idealna za kreiranje programskih interfejsa, a kada se koristi u kombinaciji sa API Gateway-om, možete značajno smanjiti troškove i brže doći na tržište. Postoje različiti načini korištenja Lambda funkcija i opcija za organiziranje arhitekture bez servera - svako može odabrati nešto prikladno na osnovu svog cilja.

Lambda vam omogućava obavljanje širokog spektra zadataka. Stoga, zahvaljujući podršci za CloudWatch, možete kreirati odgođene zadatke i automatizirati pojedinačne procese. Nema ograničenja u pogledu prirode i intenziteta korištenja usluge (uzimaju se u obzir potrošnja memorije i vrijeme), a ništa vas ne sprečava da sistematski radite na punopravnom mikroservisu baziranom na Lambdi.

Ovdje možete kreirati radnje orijentirane na usluge koje se ne izvode kontinuirano. Tipičan primjer je skaliranje slike. Čak iu slučaju distribuiranih sistema, Lambda funkcije ostaju relevantne.

Dakle, ako ne želite da se bavite alokacijom i upravljanjem računarskim resursima, isprobajte AWS Lambda; ako vam nisu potrebne teške proračune koje zahtijevaju velike resurse, isprobajte i AWS Lambda; ako se vaš kod povremeno pokreće, to je tačno, trebali biste isprobati AWS Lambda.

Sigurnost

Za sada nema pritužbi na sigurnost. S druge strane, budući da su mnogi interni procesi i karakteristike implementacije ovog modela skriveni od korisnika AWS Lambda upravljanog runtime okruženja, neka općeprihvaćena pravila sigurnosti u oblaku postaju nevažna.

Kao i većina AWS usluga, Lambda se pruža na osnovu zajedničke sigurnosti i usklađenosti između AWS-a i korisnika. Ovaj princip smanjuje operativni teret za klijenta, budući da AWS preuzima zadatke održavanja, administriranja i nadgledanja komponenti usluge - od operativnog sistema domaćina i sloja virtuelizacije do fizičke sigurnosti infrastrukturnih sredstava.

Konkretno govoreći o AWS Lambda, AWS je odgovoran za upravljanje osnovnom infrastrukturom, povezanim osnovnim uslugama, operativnim sistemom i platformom aplikacija. Dok je klijent odgovoran za sigurnost svog koda, skladištenje povjerljivih podataka, kontrolu pristupa njima, kao i Lambda servisu i resursima (Identity and Access Management, IAM), uključujući i u granicama funkcija koje se koriste.

Dijagram ispod prikazuje model podijeljene odgovornosti kako se primjenjuje na AWS Lambda. AWS odgovornost je narandžasta, a odgovornost korisnika plava. Kao što vidite, AWS preuzima veću odgovornost za aplikacije postavljene na servisu.

Detaljna analiza AWS Lambda

Model zajedničke odgovornosti primjenjiv na AWS Lambda

Lambda runtime

Glavna prednost Lambde je u tome što obavljanjem funkcije u vaše ime, usluga sama dodjeljuje potrebne resurse. Možete izbjeći gubljenje vremena i truda na administraciju sistema i fokusirati se na poslovnu logiku i kodiranje.

Lambda servis je podijeljen u dvije ravni. Prvi je upravljački plan. Prema Wikipediji, kontrolni avion je dio mreže odgovoran za transport signalnog prometa i rutiranje. To je primarna komponenta koja donosi globalne odluke o obezbjeđivanju, servisiranju i distribuciji radnog opterećenja. Osim toga, kontrolna ravan djeluje kao mrežna topologija dobavljača rješenja, odgovorna za rutiranje i upravljanje prometom.

Druga ravan je ravan podataka. On, kao i kontrolni avion, ima svoje zadatke. Kontrolna ravan pruža API-je za upravljanje funkcijama (CreateFunction, UpdateFunctionCode) i kontrolira kako Lambda komunicira s drugim AWS uslugama. Ravan podataka kontrolira API Invoke, koji pokreće Lambda funkcije. Nakon što se funkcija pozove, kontrolna ravnina dodjeljuje ili odabire postojeće okruženje za izvršavanje koje je unaprijed pripremljeno za tu funkciju, a zatim izvršava kod u njemu.

AWS Lambda podržava različite programske jezike, uključujući Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 i druge, kroz njihova odgovarajuća okruženja za izvršavanje. AWS ih redovno ažurira, distribuira sigurnosne zakrpe i obavlja druge aktivnosti održavanja u tim okruženjima. Lambda vam omogućava da koristite i druge jezike, pod uslovom da sami implementirate odgovarajuće vrijeme izvođenja. I tada ćete morati voditi računa o njegovom održavanju, uključujući praćenje njegove sigurnosti.

Kako sve to funkcionira i kako će služba obavljati vaše funkcije?

Svaka funkcija radi u jednom ili više namjenskih okruženja, koja postoje samo za vrijeme trajanja te funkcije, a zatim se uništavaju. Svako okruženje upućuje samo jedan poziv istovremeno, ali se ponovo koristi ako postoji više serijskih poziva za istu funkciju. Sva runtime okruženja rade na virtuelnim mašinama sa hardverskom virtuelizacijom - takozvanim microVM-ovima. Svaki microVM je dodijeljen određenom AWS nalogu i okruženja ga mogu ponovo koristiti za obavljanje različitih funkcija unutar tog naloga. MicroVM-ovi su upakovani u sastavne blokove hardverske platforme Lambda Worker, koja je u vlasništvu i kojom upravlja AWS. Različite funkcije ne mogu koristiti isto vrijeme izvođenja, niti su microVM jedinstveni za različite AWS račune.

Detaljna analiza AWS Lambda

AWS Lambda model izolacije

Izolacija runtime okruženja implementirana je korištenjem nekoliko mehanizama. Na najvišem nivou svakog okruženja postoje zasebne kopije sljedećih komponenti:

  • Kôd funkcije
  • Bilo koji Lambda sloj odabran za funkciju
  • Okruženje za izvršavanje funkcije
  • Minimalni korisnički prostor zasnovan na Amazon Linuxu

Sljedeći mehanizmi se koriste za izolaciju različitih okruženja izvršavanja:

  • cgroups - ograničiti pristup CPU-u, memoriji, skladištu i mrežnim resursima za svako runtime okruženje;
  • imenski prostori - grupiranje ID-ova procesa, korisničkih ID-ova, mrežnih sučelja i drugih resursa kojima upravlja Linux kernel. Svako vrijeme izvođenja radi u svom vlastitom imenskom prostoru;
  • seccomp-bpf - ograničava sistemske pozive koji se mogu koristiti u vremenu izvođenja;
  • iptables i tabele rutiranja - izolacija izvršnih okruženja jedno od drugog;
  • chroot - pruža ograničen pristup osnovnom sistemu datoteka.

U kombinaciji sa AWS vlasničkim tehnologijama izolacije, ovi mehanizmi osiguravaju pouzdano odvajanje vremena rada. Okruženja izolovana na ovaj način ne mogu pristupiti niti modificirati podatke iz drugih okruženja.

Iako se višestruko vrijeme izvođenja istog AWS naloga može pokrenuti na jednom microVM-u, ni pod kojim okolnostima se microVM-ovi ne mogu dijeliti između različitih AWS naloga. AWS Lambda koristi samo dva mehanizma za izolaciju microVM-a: EC2 instance i Firecracker. Izolacija gostiju u Lambdi bazirana na EC2 instancama postoji od 2015. godine. Firecracker je novi hipervizor otvorenog koda koji je posebno dizajnirao AWS za radna opterećenja bez servera i predstavljen 2018. Fizički hardver koji pokreće microVM dijeli se između radnih opterećenja na različitim računima.

Čuvanje okruženja i stanja procesa

Iako su Lambda vremena izvođenja jedinstvena za različite funkcije, mogu pozvati istu funkciju više puta, što znači da vrijeme izvođenja može preživjeti nekoliko sati prije nego što bude uništeno.

Svako Lambda runtime također ima sistem datoteka na koji se može pisati, a kojem se pristupa preko /tmp direktorija. Njegovom sadržaju se ne može pristupiti iz drugih runtimea. Što se tiče postojanosti stanja procesa, fajlovi napisani u /tmp postoje tokom čitavog životnog ciklusa okruženja za izvršavanje. Ovo omogućava da se akumuliraju rezultati višestrukih poziva, što je posebno korisno za skupe operacije kao što je učitavanje modela mašinskog učenja.

Prijenos podataka poziva

Invoke API se može koristiti u dva načina: modu događaja i modu za zahtjev-odgovor. U režimu događaja, poziv se dodaje u red za kasnije izvršenje. U modu zahtjev-odgovor, funkcija se trenutno poziva sa datim korisnim opterećenjem, nakon čega se vraća odgovor. U oba slučaja, funkcija radi u Lambda okruženju, ali s različitim putevima korisnog opterećenja.

Tokom poziva zahtjev-odgovor, korisni teret teče od API-ja za obradu zahtjeva (API Caller), kao što je AWS API Gateway ili AWS SDK, do balansera opterećenja, a zatim do usluge Lambda poziva (Invoke Service). Potonji određuje odgovarajuće okruženje za izvršavanje funkcije i tamo prosljeđuje korisni teret kako bi dovršio poziv. Balansator opterećenja prima saobraćaj zaštićen TLS-om preko Interneta. Saobraćaj unutar Lambda usluge—nakon balansera opterećenja—prolazi kroz interni VPC u određenom AWS regionu.

Detaljna analiza AWS Lambda

AWS Lambda model obrade poziva: Režim Request-Response

Pozivi događaja mogu se uputiti odmah ili dodati u red čekanja. U nekim slučajevima, red čekanja se implementira pomoću Amazon SQS (Amazon Simple Queue Service), koji prosljeđuje pozive usluzi Lambda ispunjenja poziva kroz interni proces anketiranja. Preneseni promet zaštićen je TLS-om i nema dodatne enkripcije podataka pohranjenih u Amazon SQS.

Pozivi događaja ne vraćaju odgovore – Lambda Worker jednostavno ignoriše sve informacije o odgovoru. Pozive zasnovane na događajima iz Amazon S3, Amazon SNS, CloudWatch i drugih izvora Lambda obrađuje u načinu događaja. Pozivi iz Amazon Kinesis i DynamoDB tokova, SQS redova, Application Load Balancer i API Gateway pozivi se obrađuju na način zahtjev-odgovor.

Monitoring

Možete nadgledati i revidirati Lambda funkcije koristeći različite AWS mehanizme i usluge, uključujući sljedeće.

amazoncloudwatch
Prikuplja različite statistike kao što su broj zahtjeva, trajanje zahtjeva i broj neuspjelih zahtjeva.

Amazon CloudTrail
Omogućava vam da evidentirate, kontinuirano nadgledate i održavate informacije o aktivnostima naloga povezane sa vašom AWS infrastrukturom. Imat ćete potpunu historiju radnji izvršenih korištenjem AWS upravljačke konzole, AWS SDK-a, alata komandne linije i drugih AWS usluga.

AWS X-Ray
Pruža potpunu vidljivost u svim fazama obrade zahtjeva u vašoj aplikaciji na osnovu mape njenih internih komponenti. Omogućava vam analizu aplikacija tokom razvoja iu proizvodnim okruženjima.

AWS Config
Moći ćete pratiti promjene u konfiguraciji Lambda funkcije (uključujući brisanje) i vremena izvođenja, oznake, imena rukovatelja, veličinu koda, dodjelu memorije, postavke vremenskog ograničenja i postavke istodobnosti, kao i Lambda IAM izvršnu ulogu, podmreže i povezivanje sigurnosnih grupa .

zaključak

AWS Lambda nudi moćan skup alata za izgradnju sigurnih i skalabilnih aplikacija. Mnoge prakse sigurnosti i usklađenosti u AWS Lambda su iste kao iu drugim AWS uslugama, iako postoje izuzeci. Od marta 2019., Lambda je usklađena sa SOC 1, SOC 2, SOC 3, PCI DSS, Zakonom o prenosivosti i odgovornosti zdravstvenog osiguranja (HIPAA) i drugim propisima. Dakle, kada razmišljate o implementaciji svoje sljedeće aplikacije, razmislite o AWS Lambda usluzi – možda će najbolje odgovarati vašem zadatku.

izvor: www.habr.com

Dodajte komentar