Artikli tõlge on ette valmistatud spetsiaalselt kursuse üliõpilastele . Kas sind huvitab selles suunas areneda? Vaata Ege Zuevi (TeamLeadi InBitis) meistriklassi ja liitu lähima kursuse grupiga: algus 26. septembril.

Üha rohkem inimesi liigub AWS Lambda juurde, et saavutada skaleeritavust, tulemuslikkust, säästlikkust ja võimalust töödelda miljoneid ja isegi triljoneid päringuid kuus. Selleks ei ole vaja haldada teenuse töötamiseks vajalikku infrastruktuuri. Automaatne skaleerimine võimaldab teenindada tuhandeid samaaegseid päringuid sekundis. Usun, et AWS Lambda on õigustatult üks nõutumaid AWS teenuseid.
AWS Lambda
AWS Lambda on sündmustel põhinev serverita arvutusteenus, mis võimaldab käitada koodi ilma serverite eraldamise ja haldamiseta ning täiendab teisi AWS teenuseid põhinedes kasutaja loogikale. Lambda reageerib automaatselt erinevatele sündmustele (nii-öelda käivitustele), näiteks HTTP-päringutele läbi Amazon API Gateway, andmete muutusele Amazon S3 korvides või Amazon DynamoDB tabelites; või võite oma koodi käivitada API-väljakutsete kaudu, kasutades AWS SDK-d ja AWS Step Functions'i seisundite vahelisi üleminekuid.
Lambda käitab koodi kõrge kättesaadavusega arvutuste infrastruktuuril ja vastutab täielikult aluseks oleva platvormi haldamise eest, sealhulgas serverite ja operatsioonisüsteemi hooldamine, ressursside eraldamine, automaatne skaleerimine, koodi jälgimine ja logimine. Seega piisab, kui laadite oma koodi üles ja seadistate, kuidas ja millal see peaks toimima. Oma korda hoolitseb teenus selle käivitamise eest ning tagab rakenduse kõrge kättesaadavuse.
Millal liikuda Lambda peale?
AWS Lambda on mugav arvutuste platvorm, mis sobib paljude rakenduste stsenaariumidega, loomulikult juhul, kui teie koodi keel ja töötluskeskkond on teenuse poolt toetatud. Kui soovite keskenduda koodile ja äriloogikale, usaldades serverite hooldamise, ressursside eraldamise ja skaleerimise mõistlike hindadega teenusepakkujale, tasub kindlasti liikuda AWS Lambda peale.
Lambda sobib ideaalselt tarkvaraliideste loomiseks ning kui kasutada teenust koos API Gateway'ga, saab oluliselt vähendada kulusid ja kiiremini turule jõuda. On erinevaid viise Lambda funktsioonide kasutamiseks ja serverivaba arhitektuuri korraldamiseks — igaüks saab valida midagi sobivat vastavalt seatud eesmärgile.
Lambda võimaldab teha laia valikut ülesandeid. Tänu CloudWatch'i toele on võimalik luua ajastatud ülesandeid ja automatiseerida eraldi protsesse. Teenuse kasutamise iseloomule ja intensiivsusele pole piiranguid (arvesse võetakse mälu ja aega), ja miski ei sega teid järjepidevalt töötamast täieõiguslikul mikroteenusel, mis põhineb Lambdal.
Siin saab luua teenusepõhiseid toiminguid, mis ei toimu pidevalt. Tüüpiline näide on piltide skaleerimine. Isegi jaotatud süsteemide korral ei kaota Lambda funktsioonid oma populaarsust.
Nii et kui te ei soovi tegeleda arvutusressursside eraldamise ja haldamisega — proovige AWS Lambda; kui te ei vaja suuri ja ressursinälga arvutusi — proovige samuti AWS Lambda; kui teie kood töötab perioodiliselt — olete õigel teel, proovige AWS Lambda.
Turvalisus
Praegu pole turvalisuse osas kaebusi. Teisalt, kuna AWS Lambda hallatava jooksukeskkonna kasutaja poolt paljusid sisemisi protsesse ja selle mudeli rakendamise eeliseid varjatakse, kaotavad mõned üldteada pilveteenuse turvameetmed oma aktuaalsuse.
Nagu enamik AWS teenuseid, pakutakse Lambda't AWS-i ja kliendi vahelise jagatud vastutuse printsiibi alusel turvalisuse ja vastavuse tagamise osas. See printsiip vähendab kliendi operatiivset koormust, kuna AWS võtab enda kanda teenuse komponentide hoolduse, haldamise ja kontrollimise ülesanded — alates hosti operatsioonisüsteemist ja virtualiseerimise tasemest kuni infrastruktuuri füüsilise turvalisuseni.
Kui rääkida konkreetselt AWS Lambdast, vastutab AWS madalama taseme infrastruktuuri, seotud aluste teenuste, operatsioonisüsteemi ja rakendusplatvormi haldamise eest. Klient vastutab oma koodi turvamise, konfidentsiaalsete andmete salvestamise ja juurdepääsu kontrollimise eest, samuti Lambda teenusele ja ressurssidele (Identity and Access Management, IAM), sealhulgas kasutatavate funktsioonide kaudu.
Alloleval skeemil on näidatud AWS Lambdaga seotud üldise vastutuse mudel. AWS-i vastutuse ala on esitatud oranžiga ja kliendi vastutuse ala sinisega. Nagu näete, võtab AWS endale suurema vastutuse teenusel kasutatavate rakenduste eest.

Üldise vastutuse mudel, mis kehtib AWS Lambda jaoks
Lambda käituskeskkond
Lambda peamine eelis on see, et teenus eraldab vajalikud ressursid, kui see täidab teie funktsioon. Te ei pea kulutama aega ja ressursse süsteemide haldamisele, vaid võite keskenduda äri loogikale ja koodi kirjutamisele.
Lambda teenus on jagatud kaheks tasandiks. Esimene on haldustasand. Wikipedia andmetel on haldustasand (control plane) osa võrgust, mis vastutab signaalitrafiku edastamise ja marsruutimise eest. See on peamine komponent, mis teeb globaalsetele otsustele ressursside jaotamise, hooldamise ja töökoormuste jaotamise osas. Lisaks on haldustasand teenusepakkuja võrgu topoloogia, mis tegeleb liikluse marsruutimise ja haldamisega.
Teine tasand on andmetasand. Nagu haldustasandil, on ka andmetasandil oma ülesanded. Haldustasand pakub API-d funktsioonide haldamiseks (CreateFunction, UpdateFunctionCode) ja kontrollib Lambda interaktsiooni teiste AWS teenustega. Andmetasand haldab API kutsungite (Invoke API), mis käivitab Lambda funktsioonid. Funktsiooni kutsumise korral eraldab haldustasand kas olemasoleva või eelnevalt selle funktsiooni jaoks ette valmistatud käituskeskkonna ning seejärel täidab selles koodi.
AWS Lambda toetab mitmeid programmeerimiskeeli, sealhulgas Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 ja teisi, läbi vastavate töötluskeskkondade. AWS uuendab neid regulaarselt, jaotab turvaparandusi ja teostab muid hooldustöid nende keskkondade osas. Lambda võimaldab kasutada ka teisi keeli, tingimusel et te iseseisvalt rakendate vastava töötluskeskkonna. Sel juhul peate ise selle hooldamisega tegelema, sealhulgas jälgima turvalisust.
Kuidas see kõik töötab ja kuidas teenus teie funktsioone täidab?
Iga funktsioon töötab ühes või mitmes eraldatud keskkonnas, mis eksisteerib vaid selle funktsiooni elutsükli jooksul ja hävitatakse seejärel. Igas keskkonnas toimub samaaegselt vaid üks kutse, kuid seda kasutatakse uuesti, kui ühe ja sama funktsiooni mitmeid järjestikuseid kutsed tekivad. Kõik töötluskeskkonnad töötavad virtuaalmasinatel, millel on riistvaraline virtualiseerimine – nn microVM-id. Iga microVM määratakse kindlale AWS-i kontole ja seda saab korduvalt kasutada erinevate funktsioonide täitmiseks selles kontoris. MicroVM-id on suletud Lambda Workeri riistvara platvormi struktuurides, mille omab ja haldab AWS. Ühte ja sama töötluskeskkonda ei saa kasutada erinevad funktsioonid, nagu ka microVM-id on ainulaadsed erinevate AWS-i kontode jaoks.

Isolatsioonimudel AWS Lambdas
Töötluskeskkondade isoleerimine on realiseeritud mitmete mehhanismide kaudu. Kõrgel tasemel on igas keskkonnas eraldi koopiad järgmistest komponentidest:
- Funktsiooni kood
- Mistahes Lambda kihid, mis on valitud funktsiooni jaoks
- Funktsiooni töötluskeskkond
- Minimaalne kasutajaruumi Amazon Linuxi alusel
Eri töötluskeskkondade isoleerimiseks rakendatakse järgmisi mehhanisme:
- cgroups – juurdepääsu piiramine CPU, mälu, salvestusruumi ja võrgu ressurssidele iga töötluskeskkonna jaoks;
- namespaces – protsesside ID-de, kasutajate ID-de, võrgu liidestega ja teiste ressurssidega, mida haldab Linuxi tuum, rühmitamine. Iga töötluskeskkond töötab oma nimespetsiifilises keskkonnas;
- seccomp-bpf – piiratud süsteemikutsed, mida töötluskeskkonnas kasutada saab;
- iptables ja suunamis tabelid – töötluskeskkondade isoleerimine üksteisest;
- chroot — piiratud juurdepääs alumisele failisüsteemile.
AWS-i omanduses olevate isoleerimistehnoloogiate kombinatsioon tagab loetletud mehhanismide abil usaldusväärse eraldatuse täitmis keskkondade vahel. Sellisel viisil isoleeritud keskkonnad ei saa ligipääsu teiste keskkondade andmetele ega neid muuta.
Kuigi mitmed AWS-i konto täitmis keskkonnad võivad olla jooksutatud ühes microVM-is, ei tohi mikrovahendeid kunagi jagada erinevad AWS-i kontod. AWS Lambdas kasutatakse microVM-ide isoleerimiseks kahte mehhanismi: EC2 instantsid ja Firecracker. EC2 instantside põhine külastajate isoleerimine Lambdas on välja töötatud alates 2015. aastast. Firecracker on uus avatud lähtekoodiga hüperviisor, mille AWS on spetsiaalselt välja töötanud serverivabade töökoormuste jaoks ja mis esitati 2018. aastal. Füüsiline riistvara, millel microVM-id töötavad, jagavad erinevate kontode töökoormused.
Keskkondade ja protsesside olekute salvestamine
Kuigi Lambda täitmis keskkonnad on ainulaadsed erinevatele funktsioonidele, on võimalik sama funktsiooni uuesti kutsuda, st täitmis keskkond võib eksisteerida mitu tundi, enne kui see hävitatakse.
Igas Lambda täitmis keskkonnas on ka kirjutamisõigusega failisüsteem, mis on kohapeal saadaval kaustas /tmp. Selle sisu ei ole võimalik teiste täitmis keskkondade kaudu juurde pääseda. Mis puutub protsesside olekute salvestamisse, siis /tmp-s salvestatud failid eksisteerivad täitmis keskkonna kogu elutsükli jooksul. See võimaldab akumuleerida mitme kutsumise tulemusi, mis on eriti kasulik kulukate toimingute jaoks, nagu masinõppe mudelite laadimine.
Kutsumise andmete edastamine
Invoke API liidest saab kasutada kahes režiimis: sündmuserežiimis ja päring-«vastus» režiimis. Sündmuserežiimis lisatakse kutse ootele, et seda hiljem täita. Päring-«vastus» režiimis kutsutakse funktsioon kohe esitatud kasuliku koormaga ja seejärel tagastatakse vastus. Mõlemal juhul käivitatakse funktsioon Lambda keskkonnas, kuid erinevate kasuliku koormuse teede kaudu.
Kutsungide tüüpide "päring - vastus" korral saadetakse koormus API töötlemise API-st (API Caller), nagu AWS API Gateway või AWS SDK, koormuse tasakaalustajale ja seejärel Lambda kutsumise teenusele (Invoke Service). Viimane määrab sobiva keskkonna funktsiooni täitmiseks ja edastab koormuse sinna, et lõpetada kutsung. Koormuse tasakaalustaja saab TLS-kaitstud liikluse interneti kaudu. Lambda teenuse sisene liiklus, mis toimub pärast koormuse tasakaalustajat, liigub läbi sisemise VPC-s määratud AWS regioonis.

AWS Lambda kutsumismudeli „päring - vastus” režiim
Sündmuspõhised kutsungid võivad toimuda kohe või lisanduda järjekorda. Mõnel juhul on järjekord teostatav Amazon SQS (Amazon Simple Queue Service) teenuse kaudu, mis edastab kutsungid Lambda kutsumise teenusele sisemise küsijate protsessi (poller) kaudu. Edastatav liiklus on kaitstud TLS-iga, samas ei ole ette nähtud täiendavat andmete krüpteerimist, mis on salvestatud Amazon SQS-s.
Sündmuspõhised kutsungid ei tagasta vastuseid — kõik vastuste teave Lambda Worker lihtsalt ignoreerib. Kutsungid, mis põhinevad Amazon S3-l, Amazon SNS-l, CloudWatch-il ja muudel allikatel, töödeldakse Lambda teenuses sündmuste režiimis. Kutsungid Amazon Kinesis-st ja DynamoDB-st, SQS järjekordadest, rakenduste koormuse tasakaalustajast ja API Gateway-st töödeldakse "päring - vastus" režiimis.
Jälgimine
Saate jälgida ja auditeerida Lambda funktsioone erinevate AWS mehhanismide ja teenuste abil, sealhulgas järgmistega.
Amazon CloudWatch
Kogub erinevaid statistilisi andmeid, nagu päringute arv, päringute täitmise kestus ja arv vigu, mis on lõppenud veaga.
Amazon CloudTrail
võimaldab pidada žurnaleid, pidevat jälgimist ja salvestada teavet teie AWS infrastruktuuri seotud tegevuste kohta. Te saate täieliku tegevuste ajalugu, mille on teinud AWS Management Console, AWS SDK, käsurea tööriistad ja muud AWS teenused.
AWS X-Ray
Pakub täielikku nähtavust kõigis teie rakenduse kutsungite töötlemise etappides, tuginedes selle sisemiste komponentide kaartidele. See võimaldab analüüsida rakendusi arendamise ja tootmisvõimekuse käigus.
AWS Config
Saate jälgida Lambda funktsioonide konfiguratsioonimuudatusi (sealhulgas nende kustutamist) ja käitamiskeskkonda, silte, töötluse nimesid, koodi suurust, mälu jaotust, ooteaega ning paralleelsuse seadeid, samuti Lambda IAM täitmisrolli, alamsidet ja turvagruppide sidumist.
Kokkuvõte
AWS Lambda pakub võimsat tööriistade komplekti turvaliste ja skaleeritavate rakenduste loomiseks. Enamik AWS Lambda turvalisuse ja regulatiivsete vastavuse meetodeid ei erine teiste AWS teenuste kasutatavatest, kuigi on erandeid. Alates märtsist 2019 vastab Lambda SOC 1, SOC 2, SOC 3, PCI DSS, USA tervisekindlustuse ühinemis- ja vastutust seaduse (HIPAA) ja teiste regulatsioonide nõuetele. Seetõttu, kui mõtlete uue rakenduse rakendamisele, kaaluge AWS Lambda teenust — see võib olla teie ülesande jaoks kõige sobivam lahendus.
Allikas: habr.com
