Analiză detaliată a AWS Lambda

Traducerea articolului a fost pregătită special pentru studenții cursului "Servicii cloud". Te interesează să te dezvolți în această direcție? Urmărește cursul de master susținut de Egor Zuev (TeamLead la InBit) „Serviciul AWS EC2” și alăturați-vă următoarei grupe de curs: începe pe 26 septembrie.

Analiză detaliată a AWS Lambda

Mai mulți oameni migrează la AWS Lambda pentru scalabilitate, performanță, economii și capacitatea de a gestiona milioane sau chiar trilioane de solicitări pe lună. Pentru a face acest lucru, nu trebuie să gestionați infrastructura pe care rulează serviciul. Iar scalarea automată vă permite să serviți mii de solicitări simultane pe secundă. Cred că AWS Lambda poate fi numit pe bună dreptate unul dintre cele mai populare servicii AWS.

AWS Lambdas

AWS Lambda este un serviciu de calcul fără server bazat pe evenimente care vă permite să rulați cod fără a furniza sau gestiona servere și să extindeți alte servicii AWS utilizând o logică personalizată. Lambda răspunde automat la diverse evenimente (numite declanșatoare), cum ar fi solicitările HTTP prin Amazon API Gateway, modificările datelor din compartimentele Amazon S3 sau tabelele Amazon DynamoDB; sau vă puteți rula codul prin apeluri API folosind SDK-ul AWS și tranzițiile de stare în AWS Step Functions.

Lambda rulează cod pe o infrastructură de calcul foarte disponibilă și este pe deplin responsabil pentru administrarea platformei de bază, inclusiv întreținerea serverului și a sistemului de operare, furnizarea resurselor, scalarea automată, monitorizarea codului și înregistrarea în jurnal. Adică, trebuie doar să încărcați codul și să configurați cum și când ar trebui să fie executat. La rândul său, serviciul se va ocupa de lansarea acestuia și va asigura o disponibilitate ridicată a aplicației dumneavoastră.

Când să treci la Lambda?

AWS Lambda este o platformă de calcul convenabilă, potrivită pentru o varietate de cazuri de utilizare, atâta timp cât limba și timpul de rulare a codului dvs. sunt acceptate de serviciu. Dacă doriți să vă concentrați pe codul și logica dvs. de afaceri în timp ce externalizați întreținerea, furnizarea și scalarea serverului la un cost rezonabil, AWS Lambda este cu siguranță calea de urmat.

Lambda este ideal pentru crearea de interfețe de programare, iar atunci când este utilizat împreună cu API Gateway, puteți reduce semnificativ costurile și puteți ajunge pe piață mai rapid. Există diferite moduri de a utiliza funcțiile și opțiunile Lambda pentru organizarea unei arhitecturi fără server - fiecare poate alege ceva potrivit în funcție de obiectivul său.

Lambda vă permite să efectuați o gamă largă de sarcini. Astfel, datorită suportului CloudWatch, puteți crea sarcini amânate și automatiza procesele individuale. Nu există restricții privind natura și intensitatea utilizării serviciului (se iau în considerare consumul de memorie și timpul) și nimic nu vă împiedică să lucrați sistematic la un microserviciu cu drepturi depline bazat pe Lambda.

Aici puteți crea acțiuni orientate spre servicii care nu rulează continuu. Un exemplu tipic este scalarea imaginii. Chiar și în cazul sistemelor distribuite, funcțiile Lambda rămân relevante.

Deci, dacă nu doriți să vă ocupați de alocarea și gestionarea resurselor de calcul, încercați AWS Lambda; dacă nu aveți nevoie de calcule grele, consumatoare de resurse, încercați și AWS Lambda; dacă codul dvs. rulează periodic, așa este, ar trebui să încercați AWS Lambda.

Безопасность

Până acum nu există plângeri cu privire la siguranță. Pe de altă parte, deoarece multe dintre procesele interne și caracteristicile de implementare ale acestui model sunt ascunse de utilizatorul mediului de rulare gestionat AWS Lambda, unele reguli general acceptate de securitate în cloud devin irelevante.

La fel ca majoritatea serviciilor AWS, Lambda este furnizată pe o bază de securitate și conformitate partajată între AWS și client. Acest principiu reduce sarcina operațională a clientului, deoarece AWS își asumă sarcinile de întreținere, administrare și monitorizare a componentelor serviciului - de la sistemul de operare gazdă și nivelul de virtualizare până la securitatea fizică a activelor de infrastructură.

Vorbind în mod specific despre AWS Lambda, AWS este responsabil pentru gestionarea infrastructurii de bază, a serviciilor asociate, a sistemului de operare și a platformei de aplicații. În timp ce clientul este responsabil pentru securitatea codului său, stocarea datelor confidențiale, controlul accesului la acesta, precum și la serviciul și resursele Lambda (Identity and Access Management, IAM), inclusiv în limitele funcțiilor utilizate.

Diagrama de mai jos arată modelul de responsabilitate partajată așa cum se aplică AWS Lambda. Responsabilitatea AWS este portocalie, iar Responsabilitatea clientului este albastră. După cum puteți vedea, AWS își asumă mai multă responsabilitate pentru aplicațiile implementate pe serviciu.

Analiză detaliată a AWS Lambda

Model de responsabilitate partajată aplicabil AWS Lambda

Timp de rulare Lambda

Principalul avantaj al Lambda este că, efectuând o funcție în numele dvs., serviciul însuși alocă resursele necesare. Puteți evita pierderea timpului și a efortului în administrarea sistemului și vă puteți concentra pe logica și codificarea afacerii.

Serviciul Lambda este împărțit în două planuri. Primul este planul de control. Potrivit Wikipedia, planul de control este partea rețelei responsabilă pentru transportul traficului de semnalizare și rutare. Este componenta principală care ia decizii globale cu privire la furnizarea, întreținerea și distribuirea sarcinilor de lucru. În plus, planul de control acționează ca topologia de rețea a furnizorului de soluții, responsabilă pentru rutarea și gestionarea traficului.

Al doilea plan este planul de date. El, ca și avionul de control, are propriile sarcini. Planul de control oferă API-uri pentru gestionarea funcțiilor (CreateFunction, UpdateFunctionCode) și controlează modul în care Lambda comunică cu alte servicii AWS. Planul de date controlează API-ul Invoke, care rulează funcții Lambda. După ce o funcție este apelată, planul de control alocă sau selectează un mediu de rulare existent care este pregătit în prealabil pentru acea funcție și apoi execută codul din acesta.

AWS Lambda acceptă o varietate de limbaje de programare, inclusiv Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 și altele, prin mediile de rulare respective. AWS le actualizează în mod regulat, distribuie corecții de securitate și efectuează alte activități de întreținere în aceste medii. Lambda vă permite să utilizați și alte limbi, cu condiția să implementați singur timpul de execuție corespunzător. Și atunci va trebui să aveți grijă de întreținerea acestuia, inclusiv de monitorizarea siguranței sale.

Cum funcționează totul și cum vă va îndeplini serviciul funcțiile?

Fiecare funcție rulează în unul sau mai multe medii dedicate, care există doar pe durata de viață a acelei funcții și apoi sunt distruse. Fiecare mediu efectuează un singur apel la un moment dat, dar este reutilizat dacă există mai multe apeluri seriale către aceeași funcție. Toate mediile de rulare rulează pe mașini virtuale cu virtualizare hardware - așa-numitele microVM-uri. Fiecare microVM este alocat unui anumit cont AWS și poate fi reutilizat de medii pentru a îndeplini diferite funcții în acel cont. MicroVM-urile sunt împachetate în blocuri ale platformei hardware Lambda Worker, care este deținută și operată de AWS. Același timp de rulare nu poate fi utilizat de diferite funcții și nici microVM-urile nu sunt unice pentru diferite conturi AWS.

Analiză detaliată a AWS Lambda

Model de izolare AWS Lambda

Izolarea mediilor de rulare este implementată folosind mai multe mecanisme. La nivelul superior al fiecărui mediu există copii separate ale următoarelor componente:

  • Codul funcției
  • Orice straturi Lambda selectate pentru funcție
  • Mediul de execuție a funcției
  • Spațiu minim de utilizator bazat pe Amazon Linux

Următoarele mecanisme sunt utilizate pentru a izola diferite medii de execuție:

  • cgroups - limitează accesul la CPU, memorie, stocare și resurse de rețea pentru fiecare mediu de rulare;
  • spații de nume - ID-uri de proces de grupare, ID-uri de utilizator, interfețe de rețea și alte resurse gestionate de kernel-ul Linux. Fiecare runtime rulează în propriul spațiu de nume;
  • seccomp-bpf - restricționează apelurile de sistem care pot fi utilizate în timpul de execuție;
  • iptables și tabelele de rutare - izolarea mediilor de execuție unele de altele;
  • chroot - oferă acces limitat la sistemul de fișiere de bază.

Combinate cu tehnologiile de izolare proprietare AWS, aceste mecanisme asigură o separare fiabilă a timpului de rulare. Mediile izolate în acest fel nu pot accesa sau modifica datele din alte medii.

Deși mai multe runtime ale aceluiași cont AWS pot rula pe un singur microVM, în niciun caz microVM-urile nu pot fi partajate între diferite conturi AWS. AWS Lambda folosește doar două mecanisme pentru a izola microVM-urile: instanțe EC2 și Firecracker. Izolarea oaspeților în Lambda pe baza instanțelor EC2 există din 2015. Firecracker este un nou hypervisor open source conceput special de AWS pentru încărcături de lucru fără server și introdus în 2018. Hardware-ul fizic care rulează microVM-uri este partajat între sarcinile de lucru din diferite conturi.

Salvarea mediilor și a stărilor de proces

Deși timpii de execuție Lambda sunt unici pentru diferite funcții, pot apela aceeași funcție în mod repetat, ceea ce înseamnă că timpul de execuție poate supraviețui câteva ore înainte de a fi distrus.

Fiecare runtime Lambda are, de asemenea, un sistem de fișiere care poate fi scris, accesibil prin directorul /tmp. Conținutul său nu poate fi accesat din alte runtime. În ceea ce privește persistența stării procesului, fișierele scrise în /tmp există pentru întregul ciclu de viață al mediului de rulare. Acest lucru permite acumularea rezultatelor apelurilor multiple, ceea ce este util în special pentru operațiuni costisitoare, cum ar fi încărcarea modelelor de învățare automată.

Transfer de date apel

API-ul Invoke poate fi utilizat în două moduri: modul eveniment și modul cerere-răspuns. În modul eveniment, apelul este adăugat la o coadă pentru execuție ulterioară. În modul cerere-răspuns, funcția este apelată instantaneu cu sarcina utilă furnizată, după care răspunsul este returnat. În ambele cazuri, funcția rulează într-un mediu Lambda, dar cu căi de încărcare utilă diferite.

În timpul apelurilor cerere-răspuns, sarcina utilă trece de la un API de procesare a solicitărilor (API Caller), cum ar fi AWS API Gateway sau AWS SDK, către echilibrantul de încărcare și apoi către serviciul de apel Lambda (Serviciul Invoke). Acesta din urmă determină mediul potrivit pentru executarea funcției și transmite sarcina utilă acolo pentru a finaliza apelul. Echilibratorul de încărcare primește trafic protejat prin TLS prin Internet. Traficul din cadrul serviciului Lambda — după echilibrarea încărcăturii — trece printr-un VPC intern într-o anumită regiune AWS.

Analiză detaliată a AWS Lambda

Model de procesare a apelurilor AWS Lambda: modul cerere-răspuns

Apelurile pentru evenimente pot fi efectuate imediat sau adăugate la o coadă. În unele cazuri, coada este implementată utilizând Amazon SQS (Amazon Simple Queue Service), care transmite apeluri către serviciul de onorare a apelurilor Lambda printr-un proces de interogare intern. Traficul transmis este protejat de TLS și nu există nicio criptare suplimentară a datelor stocate în Amazon SQS.

Apelurile de evenimente nu returnează răspunsuri — Lambda Worker pur și simplu ignoră orice informații despre răspuns. Apelurile bazate pe evenimente de la Amazon S3, Amazon SNS, CloudWatch și alte surse sunt procesate de Lambda în modul eveniment. Apelurile din fluxurile Amazon Kinesis și DynamoDB, cozile SQS, Application Load Balancer și apelurile API Gateway sunt procesate într-o manieră cerere-răspuns.

monitorizarea

Puteți monitoriza și audita funcțiile Lambda folosind o varietate de mecanisme și servicii AWS, inclusiv următoarele.

Amazon CloudWatch
Colectează diverse statistici, cum ar fi numărul de solicitări, durata solicitărilor și numărul de solicitări care au eșuat.

Amazon CloudTrail
Vă permite să vă conectați, să monitorizați continuu și să mențineți informațiile despre activitatea contului asociate infrastructurii dvs. AWS. Veți avea un istoric complet al acțiunilor efectuate folosind AWS Management Console, AWS SDK, instrumente de linie de comandă și alte servicii AWS.

AWS X-Ray
Oferă vizibilitate completă asupra tuturor etapelor procesării cererii în aplicația dvs. pe baza unei hărți a componentelor sale interne. Vă permite să analizați aplicațiile în timpul dezvoltării și în mediile de producție.

Configurare AWS
Veți putea urmări modificările configurației funcției Lambda (inclusiv ștergerea) și timpii de execuție, etichete, nume de handler, dimensiunea codului, alocarea memoriei, setările de timeout și setările de concurență, precum și rolul de execuție Lambda IAM, subrețea și legăturile grupurilor de securitate .

Concluzie

AWS Lambda oferă un set puternic de instrumente pentru construirea de aplicații sigure și scalabile. Multe dintre practicile de securitate și conformitate din AWS Lambda sunt aceleași ca și în alte servicii AWS, deși există excepții. Din martie 2019, Lambda respectă SOC 1, SOC 2, SOC 3, PCI DSS, Health Insurance Portability and Accountability Act (HIPAA) și alte reglementări. Deci, atunci când vă gândiți să implementați următoarea aplicație, luați în considerare serviciul AWS Lambda - poate fi cel mai potrivit pentru sarcina dvs.

Sursa: www.habr.com

Adauga un comentariu