Детална анализа на AWS Lambda

Преводот на статијата е подготвен специјално за студентите на курсот „Cloud услуги“. Дали сте заинтересирани да се развивате во оваа насока? Гледајте го мастер-класот на Егор Зуев (TeamLead на InBit) „Услуга AWS EC2“ и придружете се на следната група на курсеви: започнува на 26 септември.

Детална анализа на AWS Lambda

Повеќе луѓе се префрлаат на AWS Lambda за приспособливост, перформанси, заштеди и способност да се справат со милиони, па дури и трилиони барања месечно. За да го направите ова, не треба да управувате со инфраструктурата на која работи услугата. А автоматското скалирање ви овозможува да опслужувате илјадници истовремени барања во секунда. Мислам дека AWS Lambda со право може да се нарече една од најпопуларните AWS услуги.

AWS Ламбда

AWS Lambda е компјутерска услуга без сервер управувана од настани која ви овозможува да извршувате код без обезбедување или управување со сервери и да ги проширите другите AWS услуги користејќи прилагодена логика. Lambda автоматски реагира на различни настани (наречени предизвикувачи), како што се барањата за HTTP преку Amazon API Gateway, промени на податоците во кофите на Amazon S3 или табелите на Amazon DynamoDB; или можете да го извршите вашиот код преку повици на API користејќи AWS SDK и транзиции на состојби во AWS Чекор функции.

Lambda работи код на високо достапна компјутерска инфраструктура и е целосно одговорна за администрирање на основната платформа, вклучувајќи одржување на серверот и оперативниот систем, обезбедување ресурси, автоматско скалирање, следење на кодот и евиденција. Тоа е, само треба да го поставите вашиот код и да конфигурирате како и кога треба да се изврши. За возврат, услугата ќе се погрижи за нејзиното лансирање и ќе обезбеди висока достапност на вашата апликација.

Кога да се префрлите на Ламбда?

AWS Lambda е удобна компјутерска платформа која е погодна за различни случаи на употреба, се додека јазикот и времето на траење на вашиот код се поддржани од услугата. Ако сакате да се фокусирате на вашиот код и деловна логика додека го аутсорсирате одржувањето, обезбедувањето и скалирањето на серверот по разумна цена, AWS Lambda е дефинитивно најдобриот начин.

Lambda е идеален за креирање програмски интерфејси и кога се користи заедно со API Gateway, може значително да ги намалите трошоците и побрзо да стигнете до пазарот. Постојат различни начини за користење на функциите и опциите на Lambda за организирање архитектура без сервер - секој може да избере нешто соодветно врз основа на неговата цел.

Ламбда ви овозможува да извршувате широк спектар на задачи. Така, благодарение на поддршката на CloudWatch, можете да креирате одложени задачи и да ги автоматизирате поединечните процеси. Нема ограничувања за природата и интензитетот на користење на услугата (се земаат предвид потрошувачката на меморија и времето), и ништо не ве спречува систематски да работите на полноправна микросервис базирана на Ламбда.

Овде можете да креирате дејства ориентирани кон услуги кои не се извршуваат постојано. Типичен пример е скалирањето на сликата. Дури и во случај на дистрибуирани системи, функциите на Lambda остануваат релевантни.

Значи, ако не сакате да се занимавате со распределба и управување со компјутерски ресурси, обидете се со AWS Lambda; ако не ви требаат тешки пресметки со интензивни ресурси, обидете се и со AWS Lambda; ако вашиот код работи периодично, тоа е точно, треба да пробате AWS Lambda.

безбедност

Засега нема поплаки за безбедноста. Од друга страна, бидејќи многу од внатрешните процеси и карактеристиките на имплементацијата на овој модел се скриени од корисникот на AWS Lambda управуваната околина за извршување, некои општо прифатени правила за безбедност на облакот стануваат ирелевантни.

Како и повеќето AWS услуги, Lambda се обезбедува на заедничка основа за безбедност и усогласеност помеѓу AWS и клиентот. Овој принцип го намалува оперативниот товар на клиентот, бидејќи AWS ги презема задачите за одржување, администрирање и следење на компонентите на услугата - од оперативниот систем домаќин и слојот за виртуелизација до физичката безбедност на инфраструктурните средства.

Поточно зборувајќи за AWS Lambda, AWS е одговорен за управување со основната инфраструктура, поврзаните основни услуги, оперативниот систем и платформата за апликации. Додека клиентот е одговорен за безбедноста на неговиот код, складирање на доверливи податоци, контрола на пристапот до него, како и до услугата и ресурсите на Lambda (Управување со идентитет и пристап, IAM), вклучително и во границите на користените функции.

Дијаграмот подолу го прикажува моделот за споделена одговорност како што се однесува на AWS Lambda. Одговорноста на AWS е портокалова, а Одговорноста на клиентите е сина. Како што можете да видите, AWS презема поголема одговорност за апликациите распоредени на услугата.

Детална анализа на AWS Lambda

Модел на споделена одговорност применлив за AWS Lambda

Ламбда траење

Главната предност на Lambda е што со извршување на функција во ваше име, самата услуга ги доделува потребните ресурси. Можете да избегнете губење време и напор за системска администрација и да се фокусирате на деловната логика и кодирање.

Услугата Ламбда е поделена на две рамнини. Првиот е контролниот авион. Според Википедија, контролната рамнина е дел од мрежата одговорна за транспортирање на сигналниот сообраќај и рутирање. Тоа е примарна компонента која носи глобални одлуки за обезбедување, сервисирање и дистрибуција на обемот на работа. Дополнително, контролната рамнина делува како мрежна топологија на давателот на решенија, одговорна за рутирање и управување со сообраќајот.

Втората рамнина е податочната рамнина. Таа, како и контролната рамнина, има свои задачи. Контролната рамнина обезбедува API за управување со функции (CreateFunction, UpdateFunctionCode) и контролира како Lambda комуницира со други услуги AWS. Рамнината на податоци го контролира Invoke API, кој ги извршува функциите Lambda. Откако ќе се повика функцијата, контролната рамнина распределува или избира постоечка средина за извршување што е претходно подготвена за таа функција, а потоа го извршува кодот во неа.

AWS Lambda поддржува различни програмски јазици, вклучувајќи Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 и други, преку нивните соодветни околини за траење. AWS редовно ги ажурира, дистрибуира безбедносни закрпи и врши други активности за одржување на овие средини. Ламбда ви овозможува да користите и други јазици, под услов сами да го имплементирате соодветното време на траење. И тогаш ќе мора да се грижите за неговото одржување, вклучително и следење на неговата безбедност.

Како функционира сето тоа и како услугата ќе ги извршува вашите функции?

Секоја функција работи во една или повеќе посветени околини, кои постојат само за време на траењето на таа функција и потоа се уништуваат. Секоја околина прави само еден повик истовремено, но таа повторно се користи доколку има повеќе сериски повици до истата функција. Сите опкружувања за траење работат на виртуелни машини со хардверска виртуелизација - таканаречени microVMs. Секој microVM е доделен на одредена AWS сметка и може повторно да се користи од околини за извршување на различни функции во таа сметка. MicroVM се спакувани во градежни блокови на хардверската платформа Lambda Worker, која е во сопственост и управувана од AWS. Истото време на работа не може да се користи од различни функции, ниту пак microVM се единствени за различни AWS сметки.

Детална анализа на AWS Lambda

Модел за изолација на AWS Lambda

Изолацијата на опкружувањата за време на траење се спроведува со користење на неколку механизми. На највисокото ниво на секоја средина има посебни копии од следните компоненти:

  • Код на функција
  • Сите Lambda слоеви избрани за функцијата
  • Околина за извршување на функцијата
  • Минимален кориснички простор базиран на Amazon Linux

Следниве механизми се користат за изолирање на различни средини за извршување:

  • cgroups - ограничување на пристапот до процесорот, меморијата, складирањето и мрежните ресурси за секоја околина за извршување;
  • именски простори - групирање процесни ID, кориснички идентификатори, мрежни интерфејси и други ресурси управувани од кернелот на Linux. Секое време на траење работи во свој именски простор;
  • seccomp-bpf - ги ограничува системските повици што можат да се користат за време на траење;
  • iptables и табели за рутирање - изолација на средини за извршување едни од други;
  • chroot - обезбедува ограничен пристап до основниот датотечен систем.

Во комбинација со AWS комерцијални технологии за изолација, овие механизми обезбедуваат сигурно раздвојување на времето на работа. Околините изолирани на овој начин не можат да пристапат или да менуваат податоци од други средини.

Иако повеќекратни времиња на работа на иста сметка AWS може да работат на еден microVM, под никакви околности не може да се делат microVM помеѓу различни AWS сметки. AWS Lambda користи само два механизми за изолирање на microVM: примероци на EC2 и Firecracker. Изолацијата на гостите во Ламбда врз основа на примероците на EC2 постои од 2015 година. Firecracker е нов хипервизор со отворен код специјално дизајниран од AWS за оптоварувања без сервери и воведен во 2018 година. Физичкиот хардвер кој работи на microVM се дели помеѓу оптоварувањата на различни сметки.

Зачувување на средини и состојби на процесот

Иако траењето на Lambda е единствено за различни функции, тие можат постојано да ја повикуваат истата функција, што значи дека траењето може да опстане неколку часа пред да биде уништено.

Секое траење на Lambda, исто така, има датотечен систем што може да се запише, достапен преку директориумот /tmp. Не може да се пристапи до неговата содржина од други работни времиња. Што се однесува до упорноста на состојбата на процесот, датотеките напишани на /tmp постојат за целиот животен циклус на околината за извршување. Ова овозможува да се акумулираат резултатите од повеќе повици, што е особено корисно за скапи операции како што се вчитување модели за машинско учење.

Повик пренос на податоци

Invoke API може да се користи во два режима: режим на настан и режим на барање-одговор. Во режим на настан, повикот се додава во редица за подоцна да се изврши. Во режимот барање-одговор, функцијата се повикува веднаш со обезбеденото носивост, по што одговорот се враќа. Во двата случаи, функцијата работи во Lambda околина, но со различни патеки за носивост.

За време на повиците за одговор на барање, товарот тече од API за обработка на барања (API Caller), како што е AWS API Gateway или AWS SDK, до балансерот на оптоварување, а потоа до услугата за повици Lambda (Invoke Service). Вториот одредува соодветна средина за извршување на функцијата и го пренесува товарот таму за да го заврши повикот. Балансерот на оптоварување добива сообраќај заштитен со TLS преку Интернет. Сообраќајот во рамките на услугата Lambda - по балансерот на оптоварување - поминува низ внатрешен VPC во одреден регион AWS.

Детална анализа на AWS Lambda

Модел за обработка на повици AWS Lambda: Режим на барање-одговор

Повиците за настани може да се направат веднаш или да се додадат во редот. Во некои случаи, редицата се имплементира со помош на Amazon SQS (Amazon Simple Queue Service), која ги пренесува повиците до услугата за исполнување повици Lambda преку процес на внатрешен анкетар. Пренесениот сообраќај е заштитен со TLS и нема дополнително шифрирање на податоците зачувани во Amazon SQS.

Повиците на настани не враќаат одговори - Lambda Worker едноставно игнорира каква било информација за одговор. Повиците засновани на настани од Amazon S3, Amazon SNS, CloudWatch и други извори се обработуваат од Lambda во режим на настани. Повиците од стримовите на Amazon Kinesis и DynamoDB, редиците SQS, Application Load Balancer и API Gateway повиците се обработуваат на начин на барање-одговор.

Мониторинг

Можете да ги следите и ревидирате функциите на Lambda користејќи различни механизми и услуги AWS, вклучувајќи го и следново.

Amazon CloudWatch
Собира различни статистички податоци како што се бројот на барања, времетраењето на барањата и бројот на барања кои не успеале.

Amazon CloudTrail
Ви овозможува да се најавувате, постојано да следите и да одржувате информации за активноста на сметката поврзани со вашата инфраструктура AWS. Ќе имате комплетна историја на дејства извршени со помош на AWS Management Console, AWS SDK, алатки за командна линија и други услуги AWS.

AWS X-Ray
Обезбедува целосна видливост во сите фази на обработка на барањата во вашата апликација врз основа на мапа на нејзините внатрешни компоненти. Ви овозможува да ги анализирате апликациите за време на развојот и во производните средини.

Конфигурација на AWS
Ќе можете да ги следите промените на конфигурацијата на функцијата Lambda (вклучувајќи бришење) и времетраењето, ознаките, имињата на управувачот, големината на кодот, распределбата на меморијата, поставките за истекување на времето и поставките за истовременост, како и улогата на извршување на Lambda IAM, подмрежата и врзувањето на безбедносните групи .

Заклучок

AWS Lambda нуди моќен сет на алатки за градење безбедни и скалабилни апликации. Многу од практиките за безбедност и усогласеност во AWS Lambda се исти како и кај другите AWS услуги, иако има исклучоци. Од март 2019 година, Lambda е усогласен со SOC 1, SOC 2, SOC 3, PCI DSS, Законот за преносливост и одговорност за здравствено осигурување (HIPAA) и други прописи. Значи, кога размислувате да ја имплементирате вашата следна апликација, размислете за услугата AWS Lambda - можеби таа е најдобро одговара за вашата задача.

Извор: www.habr.com

Додадете коментар