AWS lambda üksikasjalik analüüs

Artikli tõlge koostati spetsiaalselt kursuse üliõpilastele "Pilveteenused". Kas olete huvitatud selles suunas arenemisest? Vaadake Egor Zujevi (TeamLead InBitis) meistriklassi "AWS EC2 teenus" ja liitu järgmise kursusegrupiga: alustab 26. septembril.

AWS lambda üksikasjalik analüüs

Üha enam inimesi läheb üle AWS Lambdale skaleeritavuse, jõudluse, säästmise ja miljoneid või isegi triljoneid taotlusi kuus käsitlemise eesmärgil. Selleks ei pea te haldama infrastruktuuri, millel teenus töötab. Ja automaatne skaleerimine võimaldab teil esitada tuhandeid samaaegseid taotlusi sekundis. Ma arvan, et AWS Lambdat võib õigustatult nimetada üheks populaarsemaks AWS-teenuseks.

AWS Lambda

AWS Lambda on sündmustepõhine serverita andmetöötlusteenus, mis võimaldab teil koodi käitada ilma servereid varustamise või haldamiseta ning kohandatud loogikat kasutades laiendada muid AWS-teenuseid. Lambda reageerib automaatselt erinevatele sündmustele (nn trigeriteks), nagu HTTP-päringud Amazon API Gateway kaudu, muudatused andmetes Amazon S3 ämbrites või Amazon DynamoDB tabelites; või saate oma koodi käitada API-kutsete kaudu, kasutades AWS SDK-d ja olekuüleminekuid AWS-i sammufunktsioonides.

Lambda käitab koodi väga kättesaadaval andmetöötluse infrastruktuuril ja vastutab täielikult selle aluseks oleva platvormi haldamise, sealhulgas serveri ja operatsioonisüsteemi hoolduse, ressursside varustamise, automaatse skaleerimise, koodi jälgimise ja logimise eest. See tähendab, et peate lihtsalt oma koodi üles laadima ja konfigureerima, kuidas ja millal seda käivitada. Teenus omakorda hoolitseb selle käivitamise eest ja tagab teie rakenduse kõrge kättesaadavuse.

Millal lambdale üle minna?

AWS Lambda on mugav arvutusplatvorm, mis sobib erinevateks kasutusjuhtudeks, kui teenus toetab teie koodi keelt ja käitusaega. Kui soovite keskenduda oma koodile ja äriloogikale, tellides samal ajal mõistliku kuluga serveri hoolduse, varustamise ja skaleerimise, on AWS Lambda kindlasti õige tee.

Lambda sobib ideaalselt programmeerimisliideste loomiseks ning kui seda kasutada koos API Gatewayga, saate oluliselt vähendada kulusid ja jõuda kiiremini turule. Lambda funktsioonide ja võimaluste kasutamiseks serverivaba arhitektuuri korraldamiseks on erinevaid võimalusi – igaüks saab oma eesmärgist lähtuvalt midagi sobivat valida.

Lambda võimaldab teil täita mitmesuguseid ülesandeid. Seega saate tänu CloudWatchi toele luua edasilükatud ülesandeid ja automatiseerida üksikuid protsesse. Teenuse kasutamise olemusele ja intensiivsusele piiranguid pole (arvestatakse mälukulu ja aega) ning miski ei takista süstemaatiliselt töötamast Lambdal põhineva täisväärtusliku mikroteenuse kallal.

Siin saate luua teenusele orienteeritud toiminguid, mis ei tööta pidevalt. Tüüpiline näide on pildi skaleerimine. Isegi hajutatud süsteemide puhul jäävad Lambda funktsioonid oluliseks.

Seega, kui te ei soovi arvutusressursside eraldamise ja haldamisega tegeleda, proovige AWS Lambdat; kui te ei vaja raskeid ja ressursimahukaid arvutusi, proovige ka AWS Lambdat; Kui teie kood jookseb perioodiliselt, see on õige, peaksite proovima AWS Lambdat.

turvalisus

Seni pole ohutuse osas kaebusi. Teisest küljest, kuna paljud selle mudeli sisemised protsessid ja juurutusfunktsioonid on AWS Lambda hallatava käituskeskkonna kasutaja eest varjatud, muutuvad mõned pilveturbe üldtunnustatud reeglid ebaoluliseks.

Nagu enamik AWS-i teenuseid, pakutakse ka Lambdat AWS-i ja kliendi vahel jagatud turvalisuse ja vastavuse alusel. See põhimõte vähendab kliendi töökoormust, kuna AWS võtab enda peale teenusekomponentide hooldamise, haldamise ja jälgimise ülesanded – alates hosti operatsioonisüsteemist ja virtualiseerimiskihist kuni infrastruktuuri varade füüsilise turvalisuseni.

Täpsemalt AWS Lambdast rääkides vastutab AWS aluseks oleva infrastruktuuri, sellega seotud alusteenuste, operatsioonisüsteemi ja rakendusplatvormi haldamise eest. Samas kui klient vastutab oma koodi turvalisuse eest, siis konfidentsiaalsete andmete säilitamise, neile juurdepääsu, samuti Lambda teenusele ja ressurssidele (Identity and Access Management, IAM) juurdepääsu kontrollimise eest, sealhulgas kasutatavate funktsioonide piires.

Allolev diagramm näitab jagatud vastutuse mudelit, nagu see kehtib AWS Lambda puhul. AWS Responsibility on oranž ja kliendi vastutus on sinine. Nagu näete, võtab AWS rohkem vastutust teenuses juurutatud rakenduste eest.

AWS lambda üksikasjalik analüüs

Jagatud vastutuse mudel Kohaldatav AWS Lambda puhul

Lambda tööaeg

Lambda peamiseks eeliseks on see, et teie nimel funktsiooni täites eraldab teenus ise vajalikud ressursid. Saate vältida aja ja vaeva raiskamist süsteemi administreerimisele ning keskenduda äriloogikale ja kodeerimisele.

Lambda teenus on jagatud kaheks tasapinnaks. Esimene on juhtimistasand. Wikipedia andmetel on juhtimistasand võrgu osa, mis vastutab signalisatsiooniliikluse ja marsruutimise eest. See on peamine komponent, mis teeb globaalseid otsuseid töökoormuse varustamise, teenindamise ja jaotamise kohta. Lisaks toimib juhtimistasand lahenduse pakkuja võrgutopoloogiana, vastutades liikluse marsruutimise ja haldamise eest.

Teine tasand on andmetasand. Sellel, nagu ka juhtimistasandil, on oma ülesanded. Juhttasand pakub API-sid funktsioonide haldamiseks (CreateFunction, UpdateFunctionCode) ja juhib seda, kuidas Lambda suhtleb teiste AWS-teenustega. Andmetasand juhib Invoke API-d, mis käitab Lambda funktsioone. Pärast funktsiooni kutsumist eraldab või valib juhttasand olemasoleva käituskeskkonna, mis on selle funktsiooni jaoks eelnevalt ette valmistatud, ja seejärel käivitab selles oleva koodi.

AWS Lambda toetab nende vastavate käituskeskkondade kaudu mitmesuguseid programmeerimiskeeli, sealhulgas Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 ja teisi. AWS värskendab neid regulaarselt, levitab turvapaiku ja teostab nendes keskkondades muid hooldustoiminguid. Lambda võimaldab teil kasutada ka teisi keeli, eeldusel, et rakendate ise sobiva käitusaja. Ja siis peate hoolitsema selle hooldamise eest, sealhulgas jälgima selle ohutust.

Kuidas see kõik töötab ja kuidas teenus teie funktsioone täidab?

Iga funktsioon töötab ühes või mitmes spetsiaalses keskkonnas, mis eksisteerivad ainult selle funktsiooni kasutusaja jooksul ja seejärel hävitatakse. Iga keskkond teeb korraga ainult ühe kõne, kuid seda kasutatakse uuesti, kui samale funktsioonile on mitu jadakõnet. Kõik käituskeskkonnad töötavad riistvaralise virtualiseerimisega virtuaalmasinatel – nn microVM-idel. Iga microVM on määratud konkreetsele AWS-i kontole ja keskkonnad saavad seda kontol erinevate funktsioonide täitmiseks uuesti kasutada. MicroVM-id on pakitud Lambda Workeri riistvaraplatvormi ehitusplokkidesse, mis kuulub AWS-ile ja mida haldab. Sama käitusaega ei saa kasutada erinevad funktsioonid, samuti ei ole mikro-VM-id erinevate AWS-i kontode jaoks ainulaadsed.

AWS lambda üksikasjalik analüüs

AWS lambda isolatsioonimudel

Käituskeskkondade isoleerimine toimub mitme mehhanismi abil. Iga keskkonna ülemisel tasemel on järgmiste komponentide eraldi koopiad:

  • Funktsiooni kood
  • Kõik funktsiooni jaoks valitud lambda kihid
  • Funktsioonide täitmise keskkond
  • Amazon Linuxil põhinev minimaalne kasutajaruum

Erinevate täitmiskeskkondade eraldamiseks kasutatakse järgmisi mehhanisme.

  • cgroups – piirab iga käituskeskkonna juurdepääsu protsessorile, mälule, salvestusruumile ja võrguressurssidele;
  • nimeruumid – protsessi ID-de, kasutajatunnuste, võrguliideste ja muude Linuxi kerneli hallatavate ressursside rühmitamine. Iga käitusaeg töötab oma nimeruumis;
  • seccomp-bpf - piirab süsteemikõnesid, mida saab käitusajal kasutada;
  • iptables ja marsruutimistabelid – täitmiskeskkondade üksteisest eraldamine;
  • chroot – pakub piiratud juurdepääsu aluseks olevale failisüsteemile.

Koos AWS-i patenteeritud isolatsioonitehnoloogiatega tagavad need mehhanismid tööaja usaldusväärse eraldamise. Sel viisil isoleeritud keskkonnad ei pääse teiste keskkondade andmetele juurde ega saa neid muuta.

Kuigi ühes microVM-is saab töötada sama AWS-i konto mitu käitusaega, ei saa mingil juhul microVM-e erinevate AWS-i kontode vahel jagada. AWS Lambda kasutab mikro-VM-ide isoleerimiseks ainult kahte mehhanismi: EC2 eksemplare ja Firecrackerit. Külaliste isoleerimine Lambdas EC2 juhtumite põhjal on olnud kasutusel alates 2015. aastast. Firecracker on uus avatud lähtekoodiga hüperviisor, mille AWS on spetsiaalselt välja töötanud serverita töökoormuse jaoks ja mis võeti kasutusele 2018. aastal. MicroVM-e kasutav füüsiline riistvara jagatakse erinevate kontode töökoormuse vahel.

Keskkondade ja protsessi olekute salvestamine

Kuigi Lambda käitusajad on erinevate funktsioonide jaoks ainulaadsed, võivad nad sama funktsiooni korduvalt kutsuda, mis tähendab, et käitusaeg võib enne hävitamist mitu tundi püsida.

Igal Lambda käituskeskkonnal on ka kirjutatav failisüsteem, millele pääseb juurde kataloogi /tmp kaudu. Selle sisule ei pääse juurde teistest käitusaegadest. Mis puudutab protsessi oleku püsivust, siis /tmp-sse kirjutatud failid eksisteerivad kogu käituskeskkonna elutsükli jooksul. See võimaldab koguda mitme kõne tulemusi, mis on eriti kasulik kallite toimingute puhul, nagu masinõppemudelite laadimine.

Kõne andmeedastus

Invoke API-t saab kasutada kahes režiimis: sündmuserežiim ja päringu-vastuse režiim. Sündmusrežiimis lisatakse kõne hilisemaks täitmiseks järjekorda. Päringu-vastuse režiimis kutsutakse funktsioon välja koheselt koos antud kasuliku koormusega, misjärel vastus tagastatakse. Mõlemal juhul töötab funktsioon Lambda keskkonnas, kuid erinevate kasulike koormuse radadega.

Päringu-vastuse kõnede ajal liigub kasulik koormus päringu töötlemise API-lt (API helistaja), nagu AWS API Gateway või AWS SDK, koormuse tasakaalustajasse ja seejärel Lambda kõneteenusesse (invoke Service). Viimane määrab funktsiooni täitmiseks sobiva keskkonna ja edastab kasuliku koormuse sinna, et kõne lõpule viia. Koormuse tasakaalustaja võtab Interneti kaudu vastu TLS-kaitsega liiklust. Lambda teenuses toimuv liiklus – pärast koormuse tasakaalustajat – läbib konkreetses AWS-i piirkonnas sisemise VPC.

AWS lambda üksikasjalik analüüs

AWS Lambda kõnetöötlusmudel: päringu-vastuse režiim

Sündmuskõnesid saab teha kohe või lisada järjekorda. Mõnel juhul rakendatakse järjekorda Amazon SQS-i (Amazon Simple Queue Service) abil, mis edastab kõned Lambda kõnede täitmise teenusele läbi sisemise polleri protsessi. Edastatud liiklus on kaitstud TLS-iga ja Amazon SQS-is salvestatud andmete täiendavat krüptimist ei toimu.

Sündmuskutsed ei tagasta vastuseid – Lambda töötaja lihtsalt ignoreerib mis tahes vastuseteavet. Lambda töötleb sündmustepõhiseid kõnesid Amazon S3-st, Amazon SNS-ist, CloudWatchist ja muudest allikatest sündmuste režiimis. Kõned Amazon Kinesise ja DynamoDB voogudest, SQS-i järjekordadest, rakenduse koormuse tasakaalustajast ja API lüüsi kõnedest töödeldakse päringu-vastuse viisil.

Jälgimine

Saate jälgida ja auditeerida Lambda funktsioone, kasutades erinevaid AWS-i mehhanisme ja teenuseid, sealhulgas järgmist.

Amazon CloudWatch
Kogub erinevat statistikat, nagu taotluste arv, päringute kestus ja nurjunud päringute arv.

Amazon CloudTrail
Võimaldab teil logida, pidevalt jälgida ja hallata teie AWS-i infrastruktuuriga seotud kontotegevuse teavet. Teil on täielik ajalugu AWS-i halduskonsooli, AWS SDK, käsureatööriistade ja muude AWS-teenuste abil tehtud toimingute kohta.

AWS röntgen
Annab rakenduse sisemiste komponentide kaardi põhjal täieliku ülevaate teie rakenduse taotluste töötlemise kõigist etappidest. Võimaldab analüüsida rakendusi arenduse ajal ja tootmiskeskkondades.

AWS-i konfiguratsioon
Saate jälgida muudatusi Lambda funktsiooni konfiguratsioonis (sealhulgas kustutamine) ja käitusaegades, siltides, töötlejate nimedes, koodi suuruses, mälu eraldamises, ajalõpu sätetes ja samaaegsuse seadetes, samuti Lambda IAM-i täitmisrolli, alamvõrgu ja turberühmade sidumises. .

Järeldus

AWS Lambda pakub võimsat tööriistakomplekti turvaliste ja skaleeritavate rakenduste loomiseks. Paljud AWS Lambda turbe- ja vastavustavad on samad, mis teistes AWS-i teenustes, kuigi on ka erandeid. Alates 2019. aasta märtsist vastab Lambda standarditele SOC 1, SOC 2, SOC 3, PCI DSS, Health Insurance Portability and Accountability Act (HIPAA) ja muudele määrustele. Seega, kui mõtlete oma järgmise rakenduse juurutamisele, kaaluge AWS Lambda teenust – see võib teie ülesande jaoks kõige paremini sobida.

Allikas: www.habr.com

Lisa kommentaar