Përkthimi i artikullit është përgatitur veçanërisht për studentët e kursit . Interesoheni për t'u zhvilluar në këtë drejtim? Shikoni masterclass-in e Egor Zuev (TeamLead në kompaninë InBit) dhe bashkohuni me grupin më të afërt të kursit: fillimi më 26 Shtator.

Një numër në rritje njerëzish po kalojnë në AWS Lambda për shkak të shkallëzueshmërisë, performancës, kursimeve dhe mundësisë për të përpunuar miliona dhe madje triliona kërkesa në muaj. Për këtë nuk është e nevojshme të menaxhoni infrastrukturën mbi të cilën funksionon shërbimi. Ndërsa automatikisht shkallëzimi lejon që të shërbehen mijëra kërkesa në sekond. Mendoj se AWS Lambda mund të quhet me të drejtë një nga shërbimet më të kërkuara të AWS.
AWS Lambda
AWS Lambda është një shërbim i orientuar nga ngjarjet pa server që lejon ekzekutimin e kodit pa ndarje dhe administrim serverësh dhe plotëson shërbime të tjera AWS në bazë të logjikës së përdoruesit. Lambda reagon automatikisht ndaj ngjarjeve të ndryshme (të quajtura ngacmime), për shembull, ndaj kërkesave HTTP përmes Amazon API Gateway, ndryshimit të të dhënave në kovë të Amazon S3 ose tabela të Amazon DynamoDB; gjithashtu mund të provoni kodin tuaj ndërmjet thirrjeve API duke përdorur AWS SDK dhe kalime midis gjendjeve në AWS Step Functions.
Lambda ekzekuton kodin në një infrastrukturë llogaritëse me disponueshmëri të lartë dhe merr përsipër administrimin e platformës poshtë, duke përfshirë mirëmbajtjen e serverëve dhe sistemit operativ, ndarjen e burimeve, automatizmin e shkallëzimit, monitorimin e kodit dhe regjistrimin. Kështu që ju mjafton të ngarkoni kodin tuaj dhe të konfiguroni se si dhe kur duhet të ekzekutohet. Kurse shërbimi do të kujdeset për ekzekutimin e tij dhe do të sigurojë të Disponueshmërinë e lartë të aplikacionit tuaj.
Kur të kaloni në Lambda?
AWS Lambda është një platformë llogaritëse e përshtatshme për shumë skenarë aplikimi, sigurisht, nëse gjuha dhe ambienti i ekzekutimit të kodit tuaj mbështeten nga shërbimi. Nëse dëshironi të përqendroheni në kod dhe logjikën e biznesit, duke i besuar mirëmbajtjen e serverëve, ndarjen e burimeve dhe shkallëzimin një ofruesi të jashtëm për para të arsyeshme, ju me të vërtetë duhet të kaloni në AWS Lambda.
Lambda është ideale për krijimin e ndërfaqeve programore, dhe nëse përdoret së bashku me API Gateway, mund të zvogëlohen ndjeshëm shpenzimet dhe të dalë më shpejt në treg. Ka disa mënyra për të përdorur funksionet Lambda dhe variante për të organizuar arkitekturën pa server — çdo kush mund të zgjedhë diçka që i përshtatet, duke marrë parasysh qëllimin e caktuar.
Lambda lejon kryerjen e një gamë të gjerë detyrash. Në këtë mënyrë, falë mbështetjes së CloudWatch, mund të krijoni detyra të vonuara dhe të automatizoni procese të veçanta. Nuk ka asnjë kufizim në natyrën dhe intensitetin e përdorimit të shërbimit (merren parasysh konsumet e memories dhe kohën), dhe asgjë nuk ju pengon të punoni vazhdimisht mbi një mikroshërbim të plotë duke përdorur Lambda.
Këtu mund të krijoni veprime të orientuara nga shërbimi, të cilat nuk ekzekutohen vazhdimisht. Një shembull tipik është ndryshimi i përmasave të imazheve. Edhe në rastin e sistemeve të shpërndara, funksionet Lambda vazhdojnë të mbeten të rëndësishme.
Pra, nëse nuk dëshironi të merret me ndarjen dhe administrimin e burimeve kompjuterike — provoni AWS Lambda; nëse nuk keni nevojë për llogaritje të rënda, që përfshijnë shumë burime — gjithashtu provoni AWS Lambda; nëse kodi juaj ekzekutohet periodikisht — është e saktë, duhet të provoni AWS Lambda.
Siguria
Derisa deri më tani nuk ka ankesash për sigurinë. Nga ana tjetër, duke qenë se shumë procese të brendshme dhe karakteristika të realizimit të këtij modeli janë të fshehura nga përdoruesi i mjedisit të menaxhuar të AWS Lambda, disa rregulla të pranuara zakonisht për sigurinë e reve humbasin relevancën e tyre.
Sikurse shumica e shërbimeve AWS, Lambda ofrohet sipas parimit të përgjegjësisë së përbashkët midis AWS dhe klientit në lidhje me sigurinë dhe përputhshmërinë me rregulloret. Ky parim ul ngarkesën operuese mbi klientin, pasi AWS merr përsipër detyrat e mirëmbajtjes, administrimit dhe kontrollit të komponentëve të shërbimit — nga sistemi operativ i hostit dhe niveli i virtualizimit deri te siguria fizike e infrastrukturës.
Kur jemi konkretisht për AWS Lambda, AWS është përgjegjës për menaxhimin e infrastrukturës nënkuptuar, shërbimeve të bazës përkatëse, sistemit operativ dhe platformës së aplikacioneve. Ndërsa klienti mban përgjegjësinë për sigurinë e kodit të tij, ruajtjen e të dhënave të ndjeshme, kontrollin e qasjes në to, si dhe në shërbimin dhe burimet Lambda (Identity and Access Management, IAM), përfshirë brenda funksioneve të përdorura.
Në skemën më poshtë është paraqitur modeli i përgjegjësisë së përgjithshme, i zbatueshëm për AWS Lambda. Sfera e përgjegjësisë së AWS është e ngjyrosur në portokalli, ndërsa përgjegjësia e klientit është në blu. Siç e shihni, AWS merr mbi vete më shumë përgjegjësi për aplikacionet e implementuara në shërbim.

Modeli i përgjegjësisë së përgjithshme, i zbatueshëm për AWS Lambda
Mjedisi i ekzekutimit të Lambda
Avantazhi kryesor i Lambda është se, duke ekzekutuar funksionin në emër tuaj, shërbimi vetë ndan burimet e nevojshme. Ju nuk nevojitet të humbni kohë dhe përpjekje në administrimin e sistemeve dhe mund të përqendroheni në logjikën e biznesit dhe në shkrimin e kodit.
Shërbimi Lambda ndahet në dy plane. E para është plani i menaxhimit. Sipas Wikipedia-s, plani i menaxhimit (control plane) është pjesa e rrjetit që merret me transportimin e trafikëve sinjalizues dhe ruterizimin. Ai është komponenti kryesor që merr vendime globale për ndarjen, shërbimin dhe shpërndarjen e ngarkesave të punës. Për më tepër, plani i menaxhimit vepron si topologji rrjetore e ofruesit të zgjidhjes, përgjegjës për ruterizimin dhe menaxhimin e trafikëve.
Plani i dytë është plani i të dhënave. Ai, ashtu si plani i menaxhimit, ka detyrat e tij. Plani i menaxhimit ofron API për menaxhimin e funksioneve (CreateFunction, UpdateFunctionCode) dhe kontrollon nd interactionin e Lambda me shërbimet e tjera AWS. Plani i të dhënave menaxhon API-të e thirrjeve (Invoke API), që aktivizon funksionet Lambda. Pas thirrjes së funksionit, plani i menaxhimit ndan ose zgjidh një ambient ekzekutimi ekzistues, i përgatitur më parë për këtë funksion, dhe pastaj ekzekuton kodin në të.
AWS Lambda mbështet shumë gjuhë programimi, duke përfshirë Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 dhe të tjera përmes ambienteve të duhura të ekzekutimit. AWS i përditëson ato rregullisht, shpërndan patch-e për sigurinë dhe kryen operacione të tjera për mirëmbajtjen e këtyre ambienteve. Lambda lejon përdorimin e gjuhëve të tjera me kushtin që ju të implementoni vetë ambientin përkatës të ekzekutimit. Në atë rast do t'ju duhet të merakoseni për mirëmbajtjen e saj, duke përfshirë edhe mbikëqyrjen e sigurisë.
Si funksionon e gjithë kjo dhe si do ta ekzekutojë shërbimi funksionet tuaja?
Çdo funksion punon në një ose më shumë ambiente të dedikuara, të cilat ekzistojnë vetëm gjatë ciklit të jetës së këtij funksioni dhe më pas shkatërrohen. Në çdo ambient ekzekutohet vetëm një thirrje në të njëjtën kohë, por ai ripërdoret nëse ka shumë thirrje serike të të njëjtit funksion. Të gjitha ambientet e ekzekutimit funksionojnë në makineri virtuale me virtualizim harduerik — të ashtuquajturat microVM. Çdo microVM i caktohet një llogari të caktuar AWS dhe mund të përdoret shumë herë nga ambiente të ndryshme për të ekzekutuar funksione të ndryshme në atë llogari. MicroVM mblidhen në blloqe strukturore të platformës harduerike Lambda Worker, e cila është në pronësi dhe menaxhohet nga AWS. E njëjta ambient ekzekutimi nuk mund të përdoret nga funksione të ndryshme, ashtu siç microVM janë unikë për llogari të ndryshme AWS.

Modeli i izolimit në AWS Lambda
Izolimi i ambienteve të ekzekutimit është realizuar me ndihmën e disa mekanizmave. Në nivele të larta, çdo ambient ka kopje të veçanta të komponentëve të mëposhtëm:
- Kodi i funksionit
- Çdo shtresë Lambda e zgjedhur për funksionin
- Ambienti i ekzekutimit të funksionit
- Hapësira minimale e përdoruesit mbi Amazon Linux
Për izolimin e ambienteve të ndryshme të ekzekutimit, përdoren mekanizmat si më poshtë:
- cgroups — kufizimi i aksesit në burimet e CPU, memories, kapaciteteve të ruajtjes dhe rrjetit për çdo ambient ekzekutimi;
- namespaces — grumbullimi i identifikuesve të proceseve, identifikuesve të përdoruesve, ndërfaqeve rrjetësore dhe burimeve të tjera që menaxhohen nga bërthama Linux. Çdo ambient ekzekutimi punon në hapësirën e vet të emrave;
- seccomp-bpf — kufizimi i thirrjeve sistemore që mund të përdoren në ambientin e ekzekutimit;
- iptables dhe tabelat e routing-ut — izolimi i ambienteve të ekzekutimit nga njëra-tjetra;
- chroot — ofrimi qasje të kufizuar në sistemin e dosjeve nëntokësor.
Në kombinim me teknologjitë proprietare të izolimit të AWS, mekanizmat e përmendur garantojnë ndarje të besueshme të mjediseve ekzekutuese. Mjediset e izoluara në këtë mënyrë nuk mund të aksesojnë të dhënat e mjediseve të tjera dhe t'i ndryshojnë ato.
Megjithëse disa mjedise ekzekutuese të një llogarie AWS mund të funksionojnë në një microVM, nën asnjë rrethanë microVM nuk mund të ndahen nga llogari të ndryshme AWS. Për izolimin e microVM-ve, AWS Lambda përdor vetëm dy mekanizma: instancat EC2 dhe Firecracker. Izolimi i mysafirëve në Lambda bazuar në instancat EC2 është në përdorim që nga viti 2015. Firecracker është një hipervizor i ri me burim të hapur, i dizajnuar posaçërisht nga AWS për ngarkesat e punës pa server dhe u prezantua në vitin 2018. Pajisjet fizike mbi të cilat ekzekutohen microVM-të ndahen nga ngarkesat e punës të llogarive të ndryshme.
Ruajtja e mjediseve dhe gjendjeve të proceseve
Megjithëse mjediset ekzekutuese të Lambda janë unike për funksione të ndryshme, një funksion i njëjtë mund të thirret përsëri brenda tyre, që do të thotë se mjedisi ekzekutues mund të ekzistojë për disa orë para se të shkatërrohet.
Çdo mjedis ekzekutues të Lambda gjithashtu ka një sistem dosjesh me leje për të shkruar, i aksesueshëm përmes katalogut /tmp. Përmbajtja e tij nuk mund të aksesojë nga mjedise të tjera ekzekutuese. Sa i përket ruajtjes së gjendjeve të proceseve, skedarët e shkruar në /tmp ekzistojnë gjatë gjithë ciklit të jetës së mjedisit ekzekutues. Kjo mundëson akumulimin e rezultateve të disa thirrjeve, që është veçanërisht e dobishme për operacione të kushtueshme, si ngarkimi i modeleve të mësimit të makinerive.
Kalada e të dhënave të thirrjeve
Interfejsi Invoke API mund të aktivizohet në dy mënyra: në mënyrë ngjarjeje dhe në mënyrën "kërkesë - përgjigje". Në mënyrën ngjarje, thirrja shtohet në radhë për ekzekutim të mëvonshëm. Në mënyrën "kërkesë - përgjigje", funksioni thirret menjëherë me ngarkesën e dhënë, pas së cilës kthehet një përgjigje. Në të dyja rastet, funksioni ekzekutohet në mjedisin Lambda, por me rrugë të ndryshme për ngarkesën e informacionit.
Gjatë thirrjeve të tipit "kërkesë - përgjigje", ngarkesa do të vijë nga API i përpunimit të kërkesave (API Caller), siç është AWS API Gateway ose AWS SDK, në balancuesin e ngarkesës dhe pastaj në shërbimin e thirrjeve Lambda (Invoke Service). Ky i fundit përcakton mjedisin e duhur për të ekzekutuar funksionin dhe e dërgon ngarkesën atje për të përfunduar thirrjen. Balancuesi i ngarkesës merr trafik me mbrojtje TLS përmes Internetit. Trafiku brenda shërbimit Lambda - pas balancuesit të ngarkesës - kalon përmes VPC-it të brendshëm në një rajon të caktuar AWS.

Modeli i përpunimit të thirrjeve AWS Lambda: mënyra "kërkesë - përgjigje"
Thirrjet nga ngjarjet mund të ekzekutohen menjëherë ose të shtohen në radhë. Në disa raste, radhën e realizon shërbimi Amazon SQS (Shërbimi i Thirrjeve të Thjeshta Amazon), i cili dërgon thirrjet në shërbimin e thirrjeve Lambda përmes një procesi të brendshëm të sondazhit (poller). Trafiku i dërguar është i mbrojtur me TLS, ndërsa ndonjë enkriptim të mëtejshëm për të dhënat që ruhet në Amazon SQS nuk parashikohet.
Thirrjet nga ngjarjet nuk kthejnë përgjigje - çdo informacion përgjigjeje Lambda Worker e injoron thjesht. Thirrjet bazuar në ngjarje nga Amazon S3, Amazon SNS, CloudWatch dhe burime të tjera përpunohen nga shërbimi Lambda në mënyrën e ngjarjeve. Thirrjet nga rrjedhat Amazon Kinesis dhe DynamoDB, thirrjet nga radhat SQS, balancuesi i ngarkesës së aplikacioneve dhe API Gateway përpunohen në mënyrën "kërkesë - përgjigje".
Monitorimi
Mund të kryeni monitorimin dhe auditimin e funksioneve Lambda përmes mekanizmave dhe shërbimeve të ndryshme AWS, duke përfshirë ato që vijojnë.
Amazon CloudWatch
Mbledh statistikë të ndryshme, si numri i kërkesave, koha e ekzekutimit të kërkesave dhe numri i kërkesave që përfunduan me të meta.
Amazon CloudTrail
Lejon krijimin e regjistrave, monitorimin e vazhdueshëm dhe ruajtjen e informacionit mbi aktivitetin në llogarinë tuaj, të lidhur me infrastrukturën tuaj AWS. Do të keni një histori të plotë të veprimeve të kryera përmes konsolës AWS Management Console, AWS SDK, mjeteve të linjës së komandës dhe shërbimeve të tjera AWS.
AWS X-Ray
Ofron pamje të plotë të të gjitha proceseve të përpunimit të kërkesave në aplikacionin tuaj në bazë të hartës së komponenteve të saj të brendshme. Lejon analizimin e aplikacioneve gjatë zhvillimit dhe në ambientin e prodhimit.
AWS Config
Do të jeni në gjendje të gjurmoni ndryshimet në konfigurimin e funksioneve Lambda (përfshirë fshirjen e tyre) dhe mjedisit të ekzekutimit, etiketave, emrave të trajtuesve, madhësisë së kodit, shpërndarjes së kujtesës, cilësimeve të kohës së pritjes dhe parametrave të paralelizmit, si dhe rolin e ekzekutimit të IAM për Lambda, nënrrjetin dhe lidhjet e grupeve të sigurisë.
Përfundim
AWS Lambda ofron një set të fuqishëm mjetesh për të ndërtuar aplikacione të sigurta dhe të shkallëzueshme. Shumë metoda për sigurimin e sigurisë dhe përputhshmërisë me rregullat në AWS Lambda nuk ndryshojnë nga ato që përdoren në shërbimet e tjera të AWS, megjithatë ka përjashtime. Që nga marsi 2019, Lambda përputhet me kërkesat për SOC 1, SOC 2, SOC 3, PCI DSS, ligjin amerikan mbi vazhdimësinë dhe përgjegjësinë e sigurimeve shëndetësore (HIPAA) dhe rregullore të tjera. Prandaj, kur të mendoni për zbatimin e një aplikacioni të ri, shqyrtoni shërbimin AWS Lambda - ndoshta është pikërisht ajo që ju nevojitet për detyrën tuaj.
Burimi: habr.com
