AWS Lambda-nın ətraflı təhlili

Məqalənin tərcüməsi kurs tələbələri üçün xüsusi hazırlanmışdır «Bulud Xidmətləri». Bu sahədə inkişaf etmək maraqlıdır? InBit şirkətinin TeamLead-i Yegor Zuev-in master-klassını izləyin. «AWS EC2 xidməti» və kursun yaxın qrupuna qoşulun: başlayır 26 sentyabrda.

AWS Lambda-nın ətraflı təhlili

Daha çox insan AWS Lambda-ya keçid edir, çünki bu, genişləndirilə bilənlik, performans, qənaət və ayda milyonlarla, hətta trilyonlarla sorğunu emal etmək imkanı təklif edir. Bunun üçün xidmətin işlədiyi infrastrukturun idarə edilməsi lazım deyil. Avtomatik ölçüləndirmə, eyni anda minlərlə sorğunu emal etməyə imkan yaradır. Düşünürəm ki, AWS Lambda-ni AWS-in ən tələb olunan xidmətlərindən biri adlandırmaq olar.

AWS Lambda

AWS Lambda, serverin ayrılması və idarə olunması olmadan kodu icra etməyə imkan verən hadisə yönümlü serversiz hesablama xidmətidir və müştəri məntiqi əsasında digər AWS xidmətlərini tamamlamağa imkan tanıyır. Lambda, Amazon API Gateway vasitəsilə HTTP sorğularına, Amazon S3 səbətlərindəki və ya Amazon DynamoDB cədvəllərindəki məlumatların dəyişməsinə, yaxud AWS SDK-nı istifadə edərək API çağırışları ilə kodunuzu işə salmağa reaksiya verir.

Lambda, yüksək mövcudluğa sahib hesablama infrastrukturunda kodu icra edir və altdakı platformanın idarə edilməsindən tamamilə məsuldur, o cümlədən serverlərin və əməliyyat sisteminin xidmətinin aparılması, resursların ayrılması, avtomatik ölçüləndirmə, kodun monitorinqi və logların aparılması. Yəni, sadəcə kodunuzu yükləyirsiniz və onun nə zaman və necə icra olunacağını tənzimləyirsiniz. Öz növbəsində, xidmət, onun işə salınmasını təmin edəcək və tətbiqinizin yüksək mövcudluğunu qoruyacaq.

Lambda-ya nə vaxt keçməliyik?

AWS Lambda, çoxsaylı tətbiq ssenariləri üçün uyğun, rahat bir hesablama platformasıdır, əlbəttə ki, kodunuzun dili və icra mühiti xidmət tərəfindən dəstəklənirsə. Serverlərin idarə olunması, resursların ayrılması və ölçüləndirməni uyğun bir qiymətə üçüncü tərəfin təminatına etibar edərək, kod və biznes məntiqinə diqqət yetirmək istəyirsinizsə, AWS Lambda-ya keçməyə dəyər.

Lambda, proqram interfeysləri yaratmaq üçün mükəmməldir, və əgər bu xidməti API Gateway ilə birgə istifadə etsəniz, xərcləri əhəmiyyətli dərəcədə azaltmaq və bazara daha sürətlə çıxmaq mümkündür. Lambda funksiyalarını istifadə etməyin müxtəlif yolları və serversiz memarlığı təşkil etmə variantları var — hər kəs müəyyən edilmiş məqsədə uyğun olan bir şey seçə bilər.

Lambda, müxtəlif vəzifələri yerinə yetirməyə imkan tanıyır. CloudWatch dəstəyi vasitəsilə vaxtlı vəzifələr yaradın və ayrı-ayrı prosesləri avtomatlaşdırın. Xidmətin istifadəsi ilə bağlı heç bir məhdudiyyət yoxdur (yaddaş xərclənməsi və zaman müşahidə olunur) və Lambda əsasında tam bir mikrosistem üzərində ardıcıl işləməyə sizi heç bir şey dayandırmır.

Burada, davamlı icra olunmayan xidmət-əsaslı fəaliyyətlər yarada bilərsiniz. Tipik nümunə — şəkilləri ölçüləndirməkdir. Hətta paylanmış sistemlərdə də Lambda funksiyaları aktuallığını itirmir.

Buna görə də, əgər hesablama resurslarının dəstəklənməsi və idarə edilməsi ilə məşğul olmaq istəmirsinizsə — AWS Lambda-nı sınayın; əgər ağır, resurs yüklü hesablamalar lazım deyilirsə — yenə də AWS Lambda-nı sınayın; əgər kodunuz mütəmadi icra olunursa — doğru, AWS Lambda-nı mütləq sınamalısınız.

Təhlükəsizlik

Hazırda təhlükəsizliklə bağlı narazılıq yoxdur. Digər tərəfdən, istifadəçinin idarə olunan AWS Lambda icra mühitinin bir çox daxili prosesləri və bu modelin tətbiqi xüsusiyyətləri gizlədildiyi üçün bəzi ümumi bulud təhlükəsizliyi qaydaları öz əhəmiyyətini itirir.

Bir çox AWS xidmətləri kimi, Lambda da təhlükəsizlik və tənzimləmə məsələlərində AWS və müştəri arasında ortaq məsuliyyət prinsipi üzrə təqdim olunur. Bu prinsip, müştərinin əməliyyat yükünü azaldır, çünki AWS xidmətin komponentlərinin, ev sahibi əməliyyat sistemindən virtualizasiya səviyyəsinə və infrastruktur obyektlərinin fiziki təhlükəsizliyinə qədər xidmətin idarə edilməsi, administrasiyası və nəzarətini öz üzərinə götürür.

AWS Lambda-nın xüsusilə, AWS, alt infraqurstruktur, əlaqəli əsas xidmətlər, əməliyyat sistemi və proqram platformasını idarə edir. Müştəri isə kodunun təhlükəsizliyi, gizli məlumatların saxlanması, onlara girişin nəzarət edilməsi və Lambda xidmətinə və resurslarına (Identity and Access Management, IAM) olan məsuliyyətini daşıyır, o cümlədən istifadə olunan funksiyalara daxil olmaqla.

Aşağıdakı sxem, AWS Lambda-ya tətbiq olunan ortaq məsuliyyət modelini göstərir. AWS-in məsuliyyətləri narıncı, müştərinin məsuliyyətləri isə mavi rəngdədir. Göründüyü kimi, AWS, xidmət üzərinə yerləşdirilmiş tətbiqlərdə daha çox məsuliyyət daşıyır.

AWS Lambda-nın ətraflı təhlili

AWS Lambda-ya tətbiq olunan ortaq məsuliyyət modeli

Lambda icra mühiti

Lambda-nın əsas üstünlüyü ondan ibarətdir ki, sizin adınıza funksiyanı yerinə yetirərkən xidmət, zəruri resursları avtomatik olaraq ayırır. Sistemlərin idarə olunmasına vaxt və enerji xərcləməyə ehtiyac yoxdur, iş məntiqinə və kod yazmağa diqqət yetirin.

Lambda xidməti iki müstəvidən ibarətdir. Birincisi, idarəetmə müstəvisi. Vikipediyaya görə, idarəetmə müstəvisi (control plane) - siqnal trafiki çatdırılmasına və marşrutlaşdırmasına cavabdeh olan şəbəkə hissəsidir. Bu, yük balanslaşdırması, xidmət vermə və dağıtım üzrə qlobal qərarlar qəbul edən əsas komponentdir. Bundan əlavə, idarəetmə müstəvisi, trafikin marşrutlaşdırılmasından və onun idarə edilməsindən məsul olan həll təminatçısının şəbəkə topologiyası rolunu oynayır.

İkinci müstəvi - məlumat müstəvisi. Onun, idarəetmə müstəvisində olduğu kimi, öz vəzifələri var. İdarəetmə müstəvisi, Lambda-nın digər AWS xidmətləri ilə qarşılıqlı əlaqəsini idarə edən funksiyalar üçün API təmin edir (CreateFunction, UpdateFunctionCode). Məlumat müstəvisi isə Lambda funksiyalarını başladan API çağırışlarını (Invoke API) idarə edir. Funksiya çağırıldıqdan sonra, idarəetmə müstəvisi ya yeni bir mühit ayırır, ya da artıq bu funksiya üçün hazırlanmış bir mühit seçir və sonra kodu orada icra edir.

AWS Lambda, Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 və s. daxil olmaqla, bir çox proqramlaşdırma dillərini dəstəkləyir, müvafiq icra mühitləri ilə. AWS müntəzəm olaraq onları yeniləyir, təhlükəsizlik yamalarını yayır və bu mühitlərdə digər xidmət əməliyyatlarını həyata keçirir. Lambda, müvafiq icra mühitini özünüz tətbiq etdiyiniz halda, digər dilləri də istifadə etməyə imkan tanıyır. Bu halda, onun xidmətini təmin etmək, o cümlədən təhlükəsizliyi izləmək sizin öhdənizdə olacaq.

Bütün bunlar necə işləyir və xidmət sizin funksiyalarınızı necə icra edəcək?

Hər bir funksiya yalnız bu funksiyanın yaşam dövrü boyunca mövcud olan bir və ya bir neçə ayrılmış mühitdə işləyir və sonra yox edilir. Hər mühitdə eyni vaxtda yalnız bir çağırış icra olunur, lakin seriyalı eyni funksiyadan çağırışlar yarandıqda, o, yenidən istifadə olunur. Bütün icra mühitləri, aparat virtualizasiyasına malik virtual maşınlarda - mikroVM-lərdə işləyir. Hər bir mikroVM konkret AWS hesabına təyin olunur və həmin hesabda müxtəlif funksiyaların icrası üçün mühitlər tərəfindən dəfələrlə istifadə oluna bilər. MikroVM-lər, AWS tərəfindən idarə olunan Lambda Worker aparat platformasının struktur bloklarında yığılır. Eyni icra mühiti müxtəlif funksiyalar tərəfindən istifadə oluna bilməz, çünki mikroVM-lər AWS hesabları üçün unikaldır.

AWS Lambda-nın ətraflı təhlili

AWS Lambda-da izolyasiya modeli

İcra mühitlərinin izolyasiyası bir neçə mexanizm vasitəsilə həyata keçirilmişdir. Hər mühitin yüksək səviyyəsində aşağıdakı komponentlərin ayrı-ayrı nüsxələri mövcuddur:

  • Funksiyanın kodu
  • Funksiya üçün seçilmiş hər hansı Lambda təbəqələri
  • Funksiyanın icra mühiti
  • Amazon Linux-a əsaslanan minimum istifadəçi məkanı

Fərqli icra mühitlərinin izolyasiyası üçün aşağıdakı mexanizmlər tətbiq edilir:

  • cgroups — hər bir icra mühiti üçün CPU, yaddaş, saxlama ötürmə qabiliyyəti və şəbəkə resurslarına girişin məhdudlaşdırılması;
  • namespaces — Linux nüvəsi tərəfindən idarə olunan proses ID-ləri, istifadəçi ID-ləri, şəbəkə interfeysləri və digər resursların qruplaşdırılması. Hər bir icra mühiti öz adlar məkanında fəaliyyət göstərir;
  • seccomp-bpf — icra mühitində istifadə oluna bilən sistem çağırışlarının məhdudlaşdırılması;
  • iptables və routing tables — icra mühitlərinin bir-birindən izolə edilməsi;
  • chroot — aşağıdakı fayl sisteminə məhdud girişin təmin edilməsi.

AWS-nin mülkiyyət texnologiyaları ilə birlikdə adları çəkilən mexanizmlər icra mühitlərinin etibarlı bölünməsini təmin edir. Bu cür izolə edilmiş mühitlər digər mühitlərin məlumatlarına daxil ola bilmir və onları dəyişdirə bilmir.

Bir AWS hesabında bir neçə icra mühiti eyni microVM-də işləsə də, heç bir halda microVM-lər müxtəlif AWS hesabları arasında birgə istifadə edilə bilmir. AWS Lambda-da microVM-lərin izolyasiyası üçün yalnız iki mexanizm istifadə edilir: EC2 instansiyaları və Firecracker. EC2 instansiyalarına əsaslanan Lambda-da qonaq izolyasiyası 2015-ci ildən tətbiq edilir. Firecracker — AWS tərəfindən serverless iş yükleri üçün xüsusi olaraq hazırlanmış açıq mənbə hipervizordur və 2018-ci ildə təqdim edilmişdir. MicroVM-lərin çalışdığı fiziki avadanlıq müxtəlif hesabların iş yükü tərəfindən birgə istifadə edilir.

İcra mühitləri və proseslərin vəziyyətinin saxlanması

Lambda icra mühitləri müxtəlif funksiyalar üçün unikaldır, lakin bir eyni funksiyanı bir neçə dəfə çağırmaq mümkündür, yəni icra mühiti bir neçə saat ərzində mövcud ola bilər ki, sonra məhv edilir.

Hər Lambda icra mühitində /tmp kataloqu vasitəsilə giriş icazəsi olan bir fayl sistemi də var. Onun məzmununa digər icra mühitlərindən daxil olmaq mümkün deyil. Proseslərin vəziyyətinin saxlanmasına gəldikdə, /tmp-də yazılan fayllar icra mühitinin bütün ömrü boyu mövcuddur. Bu, bir neçə çağırışın nəticələrinin toplanmasını mümkün edir ki, bu da maşın öyrənmə modellərinin yüklənməsi kimi həddindən artıq resurs tələb edən əməliyyatlar üçün xüsusilə faydalıdır.

Çağırışların məlumatların ötürülməsi

Invoke API interfeysini iki rejimdə istifadə etmək mümkündür: hadisə rejimində və "sorğu - cavab" rejimində. Hadisə rejimində çağırış növbəyə əlavə olunur və sonrakı icra üçün gözləyir. "Sorğu - cavab" rejimində funksiyanı dərhal təqdim olunan istifadə yükü ilə çağıraraq, cavab qaytarılır. Hər iki halda funksiyalar Lambda mühitində icra edilir, lakin istifadə yükünün müxtəlif yolları ilə.

«İstək - cavab» tipi çağırışlar zamanı yük, AWS API Gateway və ya AWS SDK kimi çağırışların emal API-sindən (API Caller) yük balansına, daha sonra Lambda çağırışlarını icra edən xidmətə (Invoke Service) daxil olur. Sonuncu, funksiyanı icra etmək üçün uyğun mühit müəyyən edir və yükü ora ötürür ki, çağırışı tamamlayabilsin. Yük balanslaşdırıcısı, internet vasitəsilə TLS qoruması ilə trafik alır. Lambda xidməti daxilində trafik — yük balanslaşdırıcısından sonra — müəyyən bir AWS bölgəsində daxili VPC vasitəsilə keçir.

AWS Lambda-nın ətraflı təhlili

AWS Lambda çağırış emal modeli: «istək - cavab» rejimi

Hadisə əsaslı çağırışlar dərhal icra oluna bilər və ya növbəyə qoya bilər. Bəzi hallarda növbə, Amazon SQS (Amazon Simple Queue Service) xidməti vasitəsilə həyata keçirilir ki, bu da çağırışları Lambda çağırışlarını icra edən xidmətə daxili sorğu prosesi (poller) vasitəsilə çatdırır. Kaçırılan trafik TLS ilə qorunur, əlavə məlumatların şifrələnməsi Amazon SQS-də nəzərdə tutulmaması qeyd olunub.

Hadisə əsaslı çağırışlar cavab qaytarmır — Lambda Worker tərəfindən hər hansı bir cavab məlumatı sadəcə olaraq nəzərə alınmır. Amazon S3, Amazon SNS, CloudWatch və digər mənbələrdən gələn hadisə əsaslı çağırışlar Lambda xidməti tərəfindən hadisə rejimində emal olunur. Amazon Kinesis və DynamoDB axınlarından, SQS növbələrindən, tətbiq yük balanslaşdırıcısından və API Gateway-dən gələn çağırışlar isə «istək - cavab» rejimində emal olunur.

Monitoring

Lambda funksiyalarını müxtəlif AWS mexanizmləri və xidmətləri vasitəsilə izləyir və yoxlayırsınız, aşağıdakılar da daxil olmaqla.

Amazon CloudWatch
Müxtəlif statistika məlumatlarını, məsələn, çağırış sayı, çağırışların icra müddəti və səhvlə bitən çağırışların sayını toplayır.

Amazon CloudTrail
Hesabınızdakı AWS infrastrukturuna bağlı fəaliyyətlərin qeydlərini, davamlı monitorinqini aparmağa və məlumatları saxlayır. AWS Management Console, AWS SDK, komanda xətti alətləri və digər AWS xidmətləri vasitəsilə həyata keçirilən bütün fəaliyyətlərin tam tarixinə sahib olacaqsınız.

AWS X-Ray
Tətbiqinizdə çağırışların işlənməsinin bütün mərhələlərini görmək üçün tam görünürlük təmin edir, daxili komponentlərinin xəritəsini təqdim edir. Tətbiqləri inkişaf mərhələsində və istehsal mühitində analiz etməyə imkan tanıyır.

AWS Config
Lambda funksiyalarının (silinmələrini daxil olmaqla) konfiqurasiyasında, icra mühitində, etiketlərdə, işləyici adlarında, kod ölçüsündə, yaddaş bölgüsündə, zaman dilimləri və paralellik parametrlərində, eləcə də Lambda IAM icra rolunda, alt şəbəkə və təhlükəsizlik qruplarının bağlanmasında baş verən dəyişiklikləri izləyə biləcəksiniz.

Nəticə

AWS Lambda, güclü bir təhlükəsizlik və miqyaslana bilən tətbiqlər hazırlamaq üçün geniş bir alətlər toplusu təqdim edir. AWS Lambda-da təhlükəsizlik və uyğunluq təmin etmə üsulları, digər AWS xidmətlərində istifadə olunanlarla bənzərdir, ancaq istisnalar mövcuddur. 2019-cu ilin mart ayına olan məlumata görə, Lambda SOC 1, SOC 2, SOC 3, PCI DSS, ABŞ Sağlamlıq Sığortası Yasa (HIPAA) və digər idarəçilik tələblərinə uyğundur. Buna görə yeni bir tətbiq qurmağı düşünərkən, AWS Lambda xidmətini nəzərdən keçirin — ola bilsin ki, bu, sizin missiyanız üçün ən uyğun seçimdir.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster