Artikli tõlge on ette valmistatud spetsiaalselt kursuse üliõpilastele . Kas on huvitav arendada end selles suunas? Vaadake Egor Zuevi meistrikursust (TeamLead ettevõttes InBit) ja liituge lähima kursuse grupiga: algus 26. septembril.

Üha rohkem inimesi liigub AWS Lambda poole selle mastaapsuse, jõudluse, säästlikkuse ja võimaluse tõttu töödelda miljoneid ja isegi triljoneid päringuid kuus. Selleks ei pea haldama infrastruktuuri, millel teenus töötab. Automaatne skaleerimine võimaldab teenindada tuhandeid samaaegseid päringuid sekundis. Usun, et AWS Lambda on kahtlemata üks nõutumaid AWS teenuseid.
AWS Lambda
AWS Lambda on sündmustele orienteeritud serverivaba arvutusteenus, mis võimaldab käivitada koodi ilma serverite eraldamise ja haldamiseta ning täiendab teisi AWS teenuseid kasutaja loogika põhjal. Lambda reageerib automaatselt erinevatele sündmustele (nn käivituspunktidele), näiteks HTTP-päringutele Amazon API Gateway kaudu, andmete muutustele Amazon S3 ämbrites või Amazon DynamoDB tabelites; või saab käivitada oma koodi API-kutsungite kaudu, kasutades AWS SDK-d ja olekute vahelisi üleminekuid AWS Step Functions-is.
Lambda käivitab koodi kõrge kergelt kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti kergesti вызывается серверами и операционной системой, выделением ресурсов, автоматическим масштабированием, кодовым мониторингом и ведением журналов. Вам нужно просто загрузить свой код и настроить, как и когда его запускать. Сервис заботится о его исполнении и высокой доступности вашего приложения.
Millal minna Lambda-le?
AWS Lambda on mugav arvutusplatvorm, mis sobib paljude rakenduste jaoks, eeldusel, et teie koodi keel ja täiendav keskkond on teenusega toetatud. Kui soovite keskenduda koodile ja äriloogikale, jättes serverite haldamise, ressursi jaotus ning skaleerimise mõistliku tasu eest kolmandale osapoolele, siis tasub teil kindlasti üle minna AWS Lambda-le.
Lambda sobib ideaalselt tarkvaraliideste loomiseks ning koos API Gateway kasutamisega on võimalik kulusid oluliselt vähendada ja kiiremini turule jõuda. On erinevaid viise, kuidas Lambda funktsioone kasutada, ning valikute seadmise osas serveritu arhitektuuri korraldamisel leiab igaüks midagi sobivat, võttes arvesse seatud eesmärke.
Lambda võimaldab täita laia valikut ülesandeid. Tänu CloudWatch toetusele on võimalik luua edasilükatud ülesandeid ja automatiseerida üksikprotsesse. Teenuse kasutamise iseloomu ja intensiivsuse osas pole piiranguid (arvesse võetakse mälukasutust ja aega), ning miski ei takista teil pidevalt töötamast täieõigusliku mikroteenuse kallal, mis põhineb Lambda'l.
Siin on võimalik luua teenusele orienteeritud tegevusi, mida ei tehta pidevalt. Tüüpiline näide on piltide skaleerimine. Isegi jaotatud süsteemide korral ei kaota Lambda funktsioonid oma aktuaalsust.
Seega, kui te ei soovi tegeleda arvutusressursside eraldamise ja haldamisega — proovige AWS Lambda; kui teil ei ole vaja raskete ja ressursimahukate arvutuste jaoks — proovige samuti AWS Lambda; kui teie kood töötab perioodiliselt — just nii, tasub proovida AWS Lambda.
Ohutus
Praegu pole turvalisuse osas kaebusi. Teisalt, kuna kasutaja hallatav AWS Lambda käitus keskkond varjab palju sisemisi protsesse ja selle mudeli rakenduse üksikasju, siis kaotavad mõned tavapärased pilveturbe reeglid oma olulise tähtsuse.
Nagu enamik AWS teenuseid, pakutakse Lambda teenust AWS ja kliendi ühise vastutuse printsiibi alusel, mis puudutab turvalisust ja regulatiivsete nõuete järgimist. See põhimõte vähendab kliendi operatiivset koormust, kuna AWS võtab enda kanda teenuse komponentide hooldamise, haldamise ja kontrollimise ülesanded — alates hosti operatsioonisüsteemist ja virtualiseerimise tasemest kuni füüsilise infrastruktuuri turvalisuseni.
Kui rääkida konkreetselt AWS Lambda'st, siis AWS haldab alusstruktuuri, seotud põhi teenuseid, operatsioonisüsteemi ja rakenduste platvormi. Samal ajal vastutab klient oma koodi turvalisuse, konfidentsiaalsete andmete salvestamise, juurdepääsu kontrolle ning Lambda teenusele ja ressurssidele (Identity and Access Management, IAM) juurdepääsu kontrollimise eest, sealhulgas kasutatavate funktsioonide piires.
Alloleval skeemil on kujutatud jagatud vastutuse mudelit, mis kehtib AWS Lambda jaoks. AWS vastutuse ala on tähistatud oranžiga ja kliendi vastutus on tähistatud sinisega. Nagu näete, võtab AWS rohkem vastutust teenusele juurutatud rakenduste eest.

Jagatud vastutuse mudel, mis kehtib AWS Lambda jaoks
Lambda käituskeskkond
Lambda peamine eelis on see, et teenus eraldab vajalikud ressursid, täites funktsiooni teie nimel. Te ei pea kulutama aega ja vaeva süsteemide haldamisele, vaid saate keskenduda äriloogikale ja koodi kirjutamisele.
Lambda teenus on jagatud kaheks tasandiks. Esimene on juhtimistase. Vastavalt Vikipeediale on juhtimistase (control plane) see võrguosa, mis vastutab signaalide edastamise ja marsruutimise eest. See on peamine komponent, mis teeb globaalsetest otsustest koormuste jaotamise, haldamise ja jaotamise osas. Lisaks tegutseb juhtimistase lahenduse pakkuja võrgu topoloogiana, mis vastutab liikluse marsruutimise ja haldamise eest.
Teine tasand on andmetase. Nagu juhtimistase, on ka andmel oma spetsiifilised ülesanded. Juhtimistase pakub API-d funktsioonide haldamiseks (CreateFunction, UpdateFunctionCode) ja kontrollib Lambda suhtlemist teiste AWS teenustega. Andmetase haldab API kutsungite (Invoke API), mis käivitab Lambda funktsioone. Pärast funktsiooni kutsumist määrab juhtimistase kas uue või eelnevalt selle funktsiooniga määratud jooksukeskkonna ning seejärel käivitab koodis.
AWS Lambda toetab mitmeid programmeerimiskeeli, sealhulgas Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 ja teisi, vastavate jooksukeskkondade kaudu. AWS uuendab neid regulaarselt, levitab turvaparandusi ja teostab muid hooldustöid. Lambda võimaldab kasutada ka teisi keeli, kui te ise rakendate vastava jooksukeskkonna. Siis peate juba ise hoolitsema selle eest, 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 eksisteerivad vaid selle funktsiooni elutsükli jooksul ja seejärel hävitatakse. Igas keskkonnas täidetakse korraga ainult üks kõne, kuid see kasutatakse uuesti, kui tekib mitmeid järjestikke kõnesid sama funktsiooni kohta. Kõik täitmiskeskkonnad töötavad virtuaalmasinates riistvara virtualiseerimisega — nn microVM-id. Iga microVM määratakse kindlale AWS kontole ja seda saab kasutada korduvalt erinevate funktsioonide täitmiseks sellel kontol. MicroVM-id pakitakse Lambda Worker-i riistvaraplatvormi struktuuridesse, mille omab ja haldab AWS. Ühte ja sama täitmiskeskkonda ei saa kasutada erinevad funktsioonid, samuti on microVM-id ainulaadsed erinevatele AWS kontodele.

AWS Lambda isoleerimismudel
Täitevkeskkondade isoleerimine on rakendatud mitmete mehhanismide kaudu. Kõrgeimal tasemel on igas keskkonnas eraldi koopia järgmiste komponentide kohta:
- Funktsiooni kood
- Kõik Lambda tasandid, mis on funktsioonile valitud
- Funktsiooni täitmis keskkond
- Minimaalne kasutajaruumi Amazon Linuxi põhjal
Erinevate käituskeskkondade isoleerimiseks kasutatakse järgmisi mehhanisme:
- cgroups – juurdepääsu piiramine CPU, mälu, salvestusseadmest ja võrgustikuressurssidest iga käituskeskkonna jaoks;
- namespaces – protsesside ID, kasutajate ID, võrgu liideste ja muude ressursside rühmitamine, mida haldab Linuxi kernel. Iga käituskeskkond töötab oma nimede ruumis;
- seccomp-bpf – süsteemikõnede piiramine, mida saab kasutada käituskeskkonnas;
- iptables ja marsruuditabelid – käituskeskkondade isoleerimine üksteisest;
- chroot – piiritletud juurdepääs allolevale failisüsteemile.
Koos AWS-i patenteeritud isolatsioonitehnoloogiatega tagavad loetletud mehhanismid usaldusväärse käituskeskkondade eristamise. Nii isoleeritud keskkonnad ei saa suhelda teiste keskkondade andmetega ning neid muuta.
Kuigi mitu AWS-i konto täitmisringi võivad ühes microVM-is töötada, ei saa erinevad AWS-i kontod mingil juhul microVM-e jagada. AWS Lambda-s kasutatakse microVM-isoleerimiseks kahte mehhanismi: EC2 instansid ja Firecracker. EC2 instanside põhine külaliste isoleerimine (guest isolation) Lambda-s on kasutusel alates 2015. aastast. Firecracker on uus avatud lähtekoodiga hüperviisor, mille on AWS spetsiaalselt välja töötanud serverivabal töökoormusel ja tutvustatud 2018. aastal. Füüsiline riistvara, millel microVM-id töötavad, jagavad erinevate kontode töökoormusi.
Keskkondade ja protsesside seisundite salvestamine
Kuigi Lambda täitmisringid on erinevatele funktsioonidele unikaalsed, saab sama funktsiooni uuesti kutsuda, st täitmisring võib eksisteerida mitu tundi enne selle hävitamist.
Igas Lambda täitmisenvironmentis on ka kirjutamisõigust omav failisüsteem, millele pääseb ligi katalooge kaudu /tmp. Selle sisu ei ole võimalik teistele täitmisenvironmentidele juurdepääsu anda. Protsesside olekute salvestamise osas eksisteerivad /tmp-sse salvestatud failid kogu täitmisenvironmenti elu jooksul. See võimaldab koguda mitmete kutsungite tulemusi, mis on eriti kasulik kulukate toimingute, näiteks masinõppe mudelite laadimise puhul.
Kutsungite andmete edastamine
Invoke API liidest saab kasutada kahes režiimis: sündmuserežiimis ja „päring - vastus” režiimis. Sündmuserežiimis lisatakse kutsung järjekorda edasiseks täitmiseks. Päring - vastus režiimis kutsutakse funktsioon kohe välja antud koormusega, pärast mida tagastatakse vastus. Mõlemal juhul täidetakse funktsioon Lambda keskkonnas, kuid erinevate koormuste teedega.
Kutses, mis põhinevad „päring - vastus” mudelil, saab koormuse API-kutsest (API Caller), nagu AWS API Gateway või AWS SDK, koormuse tasakaalustajasse ja seejärel Lambda kutsete teenusesse (Invoke Service). Viimane määrab sobiva keskkonna funktsiooni täitmiseks ja edastab sinna koormuse kutse lõpetamiseks. Koormuse tasakaalustaja saab TLS-kaitsega liiklust üle Interneti. Lambda teenuse piires – pärast koormuse tasakaalustajat – liigub liiklus läbi sisemise VPC teatud AWS piirkonnas.

AWS Lambda kutsete töötlemise mudel: „päring - vastus” režiim
Sündmuste põhised kutseid saab täita koheselt või need võib järjekorda panna. Mõnel juhul rakendatakse järjekorda Amazon SQS (Amazon Simple Queue Service) teenuse abil, mis edastab kutseid Lambda kutsete teenusele sisemise küsijaga (poller). Edastatav liiklus on kaitstud TLS-iga, samas ei ole andmete täiendav krüpteerimine, mis on salvestatud Amazon SQS, ettenähtud.
Sündmuste kutsed ei tagasta vastuseid - mistahes vastusinformatsioon on Lambda Worker'i poolt lihtsalt ignoreeritud. Amazon S3, Amazon SNS, CloudWatch ja teiste allikate sündmustel põhinevad kutsed töödeldakse Lambda teenuse poolt sündmuspõhiselt. Amazon Kinesis'i ja DynamoDB voogude kutsed, SQS järjekordade kutsed, rakendusbalansseerija ja API Gateway kutsed töödeldakse 'kutsed - vastus' režiimis.
Jälgimine
Saate jälgida ja auditeerida Lambda funktsioone, kasutades erinevaid AWS mehhanisme ja teenuseid, sealhulgas järgmisi.
Amazon CloudWatch
Kogub mitmesuguseid statistilisi andmeid, nagu kutsude arv, kutsude täitmise kestus ja vigadega lõppenud kutsude arv.
Amazon CloudTrail
Lubab pidada logisid, pidevat jälgimist ja säilitada teavet konto tegevuse kohta, mis on seotud teie AWS infrastruktuuriga. Teil on täielik ajaloo ülevaade tegevustest, mis on teostatud AWS Management Console, AWS SDK, käsurea tööriistade ja teiste AWS teenuste kaudu.
AWS X-Ray
Tagab täielikku nähtavust kõigist päringute töötlemise etappidest teie rakenduses, tuginedes selle sisekomponentide kaardile. See võimaldab analüüsida rakendusi arendus- ja tootmisümbrites.
AWS Config
Saate jälgida Lambda funktsioonide konfiguratsiooni muutusi (sealhulgas nende kustutamist) ja käituskeskkonda, silte, töötlemisnimesid, koodi suurust, mälu jaotust, ajavahemiku seadeid ning paralleelsuse parameetreid, samuti Lambda IAM rolli, alamvõrku ja turvagruppide sidumist.
Kokkuvõte
AWS Lambda pakub võimsat tööriistade komplekti turvaliste ja skaleeritavate rakenduste loomiseks. Paljud AWS Lambda turvalisuse ja vastavuse tagamise meetodid ei erine teistes AWS teenustes kasutatavatest, kuigi on erandeid. Alates märtsist 2019 vastab Lambda SOC 1, SOC 2, SOC 3, PCI DSS, USA meditsiiniliste kindlustuslepingute järjepidevuse ja vastutuse seadusele (HIPAA) ning muudele regulatsioonidele. Seega, kui kaalute uue rakenduse juurutamist, kaaluge teenust AWS Lambda — see võib olla just see, mida vajate.
Allikas: habr.com
