Analizë e detajuar e AWS Lambda

Përkthimi i artikullit u përgatit posaçërisht për studentët e kursit "Shërbimet në renë kompjuterike". Jeni të interesuar të zhvilloheni në këtë drejtim? Shikoni klasën master nga Egor Zuev (TeamLead në InBit) "Shërbimi AWS EC2" dhe bashkohu në grupin tjetër të kursit: fillon më 26 shtator.

Analizë e detajuar e AWS Lambda

Më shumë njerëz po migrojnë në AWS Lambda për shkallëzueshmëri, performancë, kursime dhe aftësi për të trajtuar miliona apo edhe triliona kërkesa në muaj. Për ta bërë këtë, nuk keni nevojë të menaxhoni infrastrukturën në të cilën funksionon shërbimi. Dhe shkallëzimi automatik ju lejon të shërbeni mijëra kërkesa të njëkohshme në sekondë. Unë mendoj se AWS Lambda me të drejtë mund të quhet një nga shërbimet më të njohura AWS.

AWS Lambda

AWS Lambda është një shërbim informatik i drejtuar nga ngjarjet pa server që ju lejon të ekzekutoni kodin pa siguruar ose menaxhuar serverë dhe të zgjeroni shërbime të tjera AWS duke përdorur logjikën e personalizuar. Lambda u përgjigjet automatikisht ngjarjeve të ndryshme (të quajtura nxitës), të tilla si kërkesat HTTP përmes Amazon API Gateway, ndryshimet në të dhënat në kovat e Amazon S3 ose tabelat e Amazon DynamoDB; ose mund ta ekzekutoni kodin tuaj përmes thirrjeve API duke përdorur AWS SDK dhe tranzicionet e gjendjes në AWS Step Functions.

Lambda ekzekuton kodin në një infrastrukturë kompjuterike shumë të disponueshme dhe është plotësisht përgjegjëse për administrimin e platformës themelore, duke përfshirë mirëmbajtjen e serverit dhe sistemit operativ, sigurimin e burimeve, shkallëzimin automatik, monitorimin e kodit dhe regjistrimin. Kjo do të thotë, ju vetëm duhet të ngarkoni kodin tuaj dhe të konfiguroni se si dhe kur duhet të ekzekutohet. Nga ana tjetër, shërbimi do të kujdeset për nisjen e tij dhe do të sigurojë disponueshmëri të lartë të aplikacionit tuaj.

Kur të kaloni në Lambda?

AWS Lambda është një platformë e përshtatshme kompjuterike që është e përshtatshme për një sërë rastesh përdorimi, për sa kohë që gjuha dhe koha e ekzekutimit të kodit tuaj mbështeten nga shërbimi. Nëse dëshironi të përqendroheni në kodin tuaj dhe logjikën e biznesit ndërsa kontraktoni mirëmbajtjen, sigurimin dhe shkallëzimin e serverit me një kosto të arsyeshme, AWS Lambda është padyshim mënyra për të shkuar.

Lambda është ideale për krijimin e ndërfaqeve programuese dhe kur përdoret së bashku me API Gateway, ju mund të ulni ndjeshëm kostot dhe të dilni më shpejt në treg. Ka mënyra të ndryshme për të përdorur funksionet dhe opsionet Lambda për organizimin e një arkitekture pa server - të gjithë mund të zgjedhin diçka të përshtatshme bazuar në qëllimin e tyre.

Lambda ju lejon të kryeni një gamë të gjerë detyrash. Kështu, falë mbështetjes së CloudWatch, mund të krijoni detyra të shtyra dhe të automatizoni proceset individuale. Nuk ka kufizime për natyrën dhe intensitetin e përdorimit të shërbimit (konsumi i kujtesës dhe koha merren parasysh) dhe asgjë nuk ju pengon të punoni sistematikisht në një mikroshërbim të plotë të bazuar në Lambda.

Këtu mund të krijoni veprime të orientuara nga shërbimi që nuk funksionojnë vazhdimisht. Një shembull tipik është shkallëzimi i imazhit. Edhe në rastin e sistemeve të shpërndara, funksionet Lambda mbeten të rëndësishme.

Pra, nëse nuk doni të merreni me shpërndarjen dhe menaxhimin e burimeve kompjuterike, provoni AWS Lambda; nëse nuk keni nevojë për llogaritje të rënda dhe me burime intensive, provoni gjithashtu AWS Lambda; nëse kodi juaj funksionon periodikisht, është e drejtë, duhet të provoni AWS Lambda.

siguri

Deri më tani nuk ka ankesa për sigurinë. Nga ana tjetër, duke qenë se shumë nga proceset e brendshme dhe veçoritë e zbatimit të këtij modeli janë të fshehura nga përdoruesi i mjedisit të ekzekutimit të menaxhuar AWS Lambda, disa rregulla përgjithësisht të pranuara të sigurisë së cloud bëhen të parëndësishme.

Ashtu si shumica e shërbimeve AWS, Lambda ofrohet mbi një bazë të përbashkët sigurie dhe pajtueshmërie midis AWS dhe klientit. Ky parim redukton barrën operacionale të klientit, pasi AWS merr përsipër detyrat e mirëmbajtjes, administrimit dhe monitorimit të komponentëve të shërbimit - nga sistemi operativ pritës dhe shtresa e virtualizimit deri te siguria fizike e aseteve të infrastrukturës.

Në mënyrë të veçantë duke folur për AWS Lambda, AWS është përgjegjëse për menaxhimin e infrastrukturës themelore, shërbimeve të lidhura themelore, sistemit operativ dhe platformës së aplikacionit. Ndërsa klienti është përgjegjës për sigurinë e kodit të tij, ruajtjen e të dhënave konfidenciale, kontrollin e aksesit në të, si dhe në shërbimin dhe burimet Lambda (Identity and Access Management, IAM), duke përfshirë brenda kufijve të funksioneve të përdorura.

Diagrami më poshtë tregon modelin e përgjegjësisë së përbashkët siç zbatohet për AWS Lambda. Përgjegjësia AWS është portokalli dhe Përgjegjësia e Klientit është blu. Siç mund ta shihni, AWS merr më shumë përgjegjësi për aplikacionet e vendosura në shërbim.

Analizë e detajuar e AWS Lambda

Modeli i Përgjegjësisë së Përbashkët i zbatueshëm për AWS Lambda

Koha e ekzekutimit të Lambda

Avantazhi kryesor i Lambda është se duke kryer një funksion në emrin tuaj, vetë shërbimi shpërndan burimet e nevojshme. Ju mund të shmangni humbjen e kohës dhe përpjekjes në administrimin e sistemit dhe të përqendroheni në logjikën dhe kodimin e biznesit.

Shërbimi Lambda është i ndarë në dy plane. E para është avioni i kontrollit. Sipas Wikipedia, avioni i kontrollit është pjesa e rrjetit përgjegjës për transportin e trafikut sinjalizues dhe itinerarit. Është komponenti kryesor që merr vendime globale në lidhje me sigurimin, servisimin dhe shpërndarjen e ngarkesave të punës. Për më tepër, rrafshi i kontrollit vepron si topologjia e rrjetit të ofruesit të zgjidhjeve, përgjegjëse për drejtimin dhe menaxhimin e trafikut.

Rrafshi i dytë është rrafshi i të dhënave. Ai, si avioni i kontrollit, ka detyrat e veta. Plani i kontrollit ofron API për menaxhimin e funksioneve (CreateFunction, UpdateFunctionCode) dhe kontrollon se si Lambda komunikon me shërbimet e tjera AWS. Plani i të dhënave kontrollon Invoke API, i cili ekzekuton funksionet Lambda. Pasi të thirret një funksion, rrafshi i kontrollit shpërndan ose zgjedh një mjedis ekzistues të kohës së funksionimit që është parapërgatitur për atë funksion dhe më pas ekzekuton kodin në të.

AWS Lambda mbështet një sërë gjuhësh programimi, duke përfshirë Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 dhe të tjera, përmes mjediseve të tyre përkatëse të kohës së ekzekutimit. AWS i përditëson rregullisht ato, shpërndan arna sigurie dhe kryen aktivitete të tjera mirëmbajtjeje në këto mjedise. Lambda ju lejon të përdorni edhe gjuhë të tjera, me kusht që të zbatoni vetë kohën e duhur të ekzekutimit. Dhe atëherë do të duhet të kujdeseni për mirëmbajtjen e tij, duke përfshirë monitorimin e sigurisë së tij.

Si funksionon e gjitha dhe si do të kryejë shërbimi funksionet tuaja?

Çdo funksion funksionon në një ose më shumë mjedise të dedikuara, të cilat ekzistojnë vetëm për jetëgjatësinë e atij funksioni dhe më pas shkatërrohen. Çdo mjedis bën vetëm një telefonatë në të njëjtën kohë, por ai ripërdoret nëse ka shumë thirrje serike për të njëjtin funksion. Të gjitha mjediset e ekzekutimit funksionojnë në makina virtuale me virtualizim harduerësh - të ashtuquajturat mikroVM. Çdo microVM i caktohet një llogarie specifike AWS dhe mund të ripërdoret nga mjediset për të kryer funksione të ndryshme brenda asaj llogarie. MicroVM-të janë të paketuara në blloqe ndërtimi të platformës harduerike Lambda Worker, e cila është në pronësi dhe operuar nga AWS. E njëjta kohë ekzekutimi nuk mund të përdoret nga funksione të ndryshme, as microVM-të nuk janë unike për llogari të ndryshme AWS.

Analizë e detajuar e AWS Lambda

Modeli i izolimit AWS Lambda

Izolimi i mjediseve të kohës së funksionimit zbatohet duke përdorur disa mekanizma. Në nivelin më të lartë të çdo mjedisi ka kopje të veçanta të komponentëve të mëposhtëm:

  • Kodi i funksionit
  • Çdo shtresë Lambda e zgjedhur për funksionin
  • Mjedisi i ekzekutimit të funksionit
  • Hapësira minimale e përdoruesit bazuar në Amazon Linux

Mekanizmat e mëposhtëm përdoren për të izoluar mjedise të ndryshme ekzekutimi:

  • cgroups - kufizoni aksesin në CPU, memorie, memorie dhe burimet e rrjetit për çdo mjedis të ekzekutimit;
  • hapësirat e emrave - grupimi i ID-ve të procesit, ID-të e përdoruesve, ndërfaqet e rrjetit dhe burime të tjera të menaxhuara nga kerneli Linux. Çdo ekzekutim funksionon në hapësirën e vet të emrave;
  • seccomp-bpf - kufizon thirrjet e sistemit që mund të përdoren në kohën e ekzekutimit;
  • iptables dhe tabelat e rrugëzimit - izolimi i mjediseve të ekzekutimit nga njëri-tjetri;
  • chroot - siguron qasje të kufizuar në sistemin themelor të skedarëve.

Kombinuar me teknologjitë e izolimit të pronarit AWS, këta mekanizma sigurojnë ndarje të besueshme të kohës së funksionimit. Mjediset e izoluara në këtë mënyrë nuk mund të aksesojnë ose modifikojnë të dhëna nga mjedise të tjera.

Megjithëse kohëzgjatjet e shumta të së njëjtës llogari AWS mund të ekzekutohen në një mikroVM të vetme, në asnjë rrethanë microVM-të nuk mund të ndahen midis llogarive të ndryshme AWS. AWS Lambda përdor vetëm dy mekanizma për të izoluar mikroVM-të: instancat EC2 dhe Firecracker. Izolimi i mysafirëve në Lambda bazuar në rastet EC2 ka ekzistuar që nga viti 2015. Firecracker është një hipervizor i ri me burim të hapur i krijuar posaçërisht nga AWS për ngarkesat e punës pa server dhe i prezantuar në 2018. Hardueri fizik që ekzekuton mikroVM ndahet midis ngarkesave të punës nëpër llogari të ndryshme.

Ruajtja e mjediseve dhe gjendjeve të procesit

Megjithëse kohëzgjatja e Lambda është unike për funksione të ndryshme, ato mund të thërrasin të njëjtin funksion në mënyrë të përsëritur, që do të thotë se koha e ekzekutimit mund të mbijetojë për disa orë përpara se të shkatërrohet.

Çdo ekzekutim i Lambda ka gjithashtu një sistem skedari të shkruajtshëm të aksesueshëm përmes drejtorisë /tmp. Përmbajtja e tij nuk mund të aksesohet nga periudha të tjera ekzekutimi. Për sa i përket qëndrueshmërisë së gjendjes së procesit, skedarët e shkruar në /tmp ekzistojnë për të gjithë ciklin jetësor të mjedisit të ekzekutimit. Kjo lejon që rezultatet e thirrjeve të shumta të grumbullohen, gjë që është veçanërisht e dobishme për operacione të shtrenjta, si p.sh. ngarkimi i modeleve të mësimit të makinerive.

Transferimi i të dhënave të thirrjes

Invoke API mund të përdoret në dy mënyra: modaliteti i ngjarjes dhe modaliteti kërkesë-përgjigje. Në modalitetin e ngjarjes, thirrja shtohet në një radhë për ekzekutim të mëvonshëm. Në modalitetin kërkesë-përgjigje, funksioni thirret menjëherë me ngarkesën e dhënë, pas së cilës përgjigja kthehet. Në të dyja rastet, funksioni funksionon në një mjedis Lambda, por me shtigje të ndryshme të ngarkesës.

Gjatë thirrjeve të përgjigjes së kërkesës, ngarkesa rrjedh nga një API për përpunimin e kërkesës (API Caller), si p.sh. AWS API Gateway ose AWS SDK, në balancuesin e ngarkesës dhe më pas në shërbimin e thirrjeve Lambda (Shërbimi i thirrjes). Ky i fundit përcakton mjedisin e duhur për ekzekutimin e funksionit dhe kalon ngarkesën atje për të përfunduar thirrjen. Balancuesi i ngarkesës merr trafik të mbrojtur me TLS në internet. Trafiku brenda shërbimit Lambda - pas balancuesit të ngarkesës - kalon përmes një VPC të brendshëm në një rajon specifik AWS.

Analizë e detajuar e AWS Lambda

Modeli i përpunimit të thirrjeve AWS Lambda: Modaliteti Kërkesë-Përgjigje

Thirrjet e ngjarjeve mund të bëhen menjëherë ose të shtohen në një radhë. Në disa raste, radha zbatohet duke përdorur Amazon SQS (Amazon Simple Queue Service), i cili i kalon thirrjet në shërbimin e përmbushjes së thirrjeve Lambda përmes një procesi të brendshëm poler. Trafiku i transmetuar mbrohet nga TLS dhe nuk ka enkriptim shtesë të të dhënave të ruajtura në Amazon SQS.

Thirrjet e ngjarjeve nuk kthejnë përgjigje - Punonjësi Lambda thjesht injoron çdo informacion përgjigjeje. Thirrjet e bazuara në ngjarje nga Amazon S3, Amazon SNS, CloudWatch dhe burime të tjera përpunohen nga Lambda në modalitetin e ngjarjes. Thirrjet nga rrymat e Amazon Kinesis dhe DynamoDB, radhët SQS, Application Load Balancer dhe thirrjet API Gateway përpunohen në mënyrën e përgjigjes së kërkesës.

Monitorimi

Ju mund të monitoroni dhe auditoni funksionet Lambda duke përdorur një sërë mekanizmash dhe shërbimesh AWS, duke përfshirë sa vijon.

amazoncloudwatch
Mbledh statistika të ndryshme si numri i kërkesave, kohëzgjatja e kërkesave dhe numri i kërkesave që dështuan.

Amazon CloudTrail
Ju lejon të regjistroheni, monitoroni dhe mbani vazhdimisht informacionin e aktivitetit të llogarisë të lidhur me infrastrukturën tuaj AWS. Do të keni një histori të plotë të veprimeve të kryera duke përdorur AWS Management Console, AWS SDK, mjetet e linjës së komandës dhe shërbime të tjera AWS.

AWS X-Ray
Ofron shikueshmëri të plotë në të gjitha fazat e përpunimit të kërkesës në aplikacionin tuaj bazuar në një hartë të komponentëve të tij të brendshëm. Ju lejon të analizoni aplikacionet gjatë zhvillimit dhe në mjediset e prodhimit.

Konfigurimi i AWS
Ju do të jeni në gjendje të gjurmoni ndryshimet në konfigurimin e funksionit Lambda (përfshirë fshirjen) dhe kohëzgjatjen, etiketat, emrat e mbajtësve, madhësinë e kodit, shpërndarjen e memories, cilësimet e skadimit dhe cilësimet e konkurencës, si dhe rolin e ekzekutimit të Lambda IAM, nënrrjetin dhe lidhjet e grupeve të sigurisë .

Përfundim

AWS Lambda ofron një grup të fuqishëm mjetesh për ndërtimin e aplikacioneve të sigurta dhe të shkallëzueshme. Shumë nga praktikat e sigurisë dhe pajtueshmërisë në AWS Lambda janë të njëjta si në shërbimet e tjera AWS, megjithëse ka përjashtime. Që nga marsi 2019, Lambda është në përputhje me SOC 1, SOC 2, SOC 3, PCI DSS, Akti i Transportueshmërisë dhe Përgjegjshmërisë së Sigurimeve Shëndetësore (HIPAA) dhe rregullore të tjera. Pra, kur jeni duke menduar për zbatimin e aplikacionit tuaj të ardhshëm, merrni parasysh shërbimin AWS Lambda - ai mund të jetë më i përshtatshmi për detyrën tuaj.

Burimi: www.habr.com

Shto një koment