Дэталёвы разбор AWS Lambda

Пераклад артыкула падрыхтаваны спецыяльна для студэнтаў курса «Хмарныя сэрвісы». Цікава развівацца ў гэтым напрамку? Глядзіце майстар-клас Ягора Зуева (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 Step Functions.

Lambda выконвае код на высокадаступнай вылічальнай інфраструктуры і цалкам адказвае за адміністраванне ніжэйлеглай платформы, у тым ліку абслугоўванне сервераў і аперацыйнай сістэмы, вылучэнне рэсурсаў, аўтаматычнае маштабаванне, маніторынг кода і вядзенне часопісаў. Гэта значыць вам дастаткова загрузіць свой код і наладзіць, як і калі ён павінен выконвацца. У сваю чаргу, сэрвіс паклапоціцца аб яго запуску і забяспечыць высокую даступнасць вашага дадатку.

Калі пераходзіць на Lambda?

AWS Lambda – гэта зручная вылічальная платформа, прыдатная для мноства сцэнарыяў ужывання, зразумела, калі мова і асяроддзе выканання вашага кода падтрымліваюцца сэрвісам. Калі вы жадаеце засяродзіцца на кодзе і бізнэс-логіцы, даручыўшы абслугоўванне сервераў, вылучэнне рэсурсаў і маштабаванне іншаму пастаўшчыку за разумныя грошы, вам сапраўды варта перайсці на AWS Lambda.

Lambda ідэальна падыходзіць для стварэння праграмных інтэрфейсаў, а калі выкарыстоўваць сэрвіс разам з API Gateway, можна значна скараціць выдаткі і хутчэй выйсці на рынак. Ёсць розныя спосабы выкарыстання функцый Lambda і варыянты арганізацыі бессервернай архітэктуры – кожны зможа абраць нешта падыходнае з улікам пастаўленай мэты.

Lambda дазваляе выконваць шырокі спектр задач. Так, дзякуючы падтрымцы CloudWatch можна ствараць адкладзеныя заданні і аўтаматызаваць асобныя працэсы. Няма ніякіх абмежаванняў па характары і інтэнсіўнасці выкарыстання сэрвісу (улічваюцца выдатак памяці і час), і вам нішто не мяшае планамерна працаваць над паўнавартасным мікрасэрвісам на аснове Lambda.

Тут можна ствараць сэрвіс-арыентаваныя дзеянні, якія не выконваюцца ўвесь час. Тыповы прыклад - маштабаванне малюнкаў. Нават у выпадку размеркаваных сістэм функцыі Lambda не губляюць сваёй актуальнасці.

Такім чынам, калі вы не жадаеце займацца вылучэннем і адміністраваннем вылічальных рэсурсаў - паспрабуйце AWS Lambda; калі вам не патрэбныя цяжкія, рэсурсаёмістыя вылічэнні - таксама паспрабуйце AWS Lambda; калі ваш код выконваецца перыядычна - усё правільна, вам варта паспрабаваць AWS Lambda.

бяспеку

Пакуль што да бяспекі няма нараканняў. З іншага боку, паколькі ад карыстача кіраванага асяроддзя выканання AWS Lambda утоены шматлікія ўнутраныя працэсы і асаблівасці рэалізацыі гэтай мадэлі, некаторыя агульнапрынятыя правілы хмарнай бяспекі губляюць актуальнасць.

Як і большасць сэрвісаў AWS, Lambda падаецца па прынцыпе агульнай адказнасці AWS і кліента па частцы бяспекі і выкананні нарматыўных патрабаванняў. Гэты прынцып зніжае аперацыйную нагрузку на кліента, паколькі AWS бярэ на сябе задачы абслугоўвання, адміністравання і кантролю кампанентаў сэрвісу - ад аперацыйнай сістэмы хаста і ўзроўню віртуалізацыі да фізічнай бяспекі аб'ектаў інфраструктуры.

Калі казаць менавіта аб AWS Lambda, то AWS адказвае за кіраванне ніжэйлеглай інфраструктурай, злучанымі базавымі сэрвісамі, аперацыйнай сістэмай і платформай прыкладанняў. У той час як кліент нясе адказнасць за бяспеку свайго кода, захоўванне канфідэнцыйных дадзеных, кантроль доступу да іх, а таксама да сэрвісу і рэсурсаў Lambda (Identity and Access Management, IAM), у тым ліку ў межах функцый, якія выкарыстоўваюцца.

На схеме ніжэй прадстаўлена мадэль агульнай адказнасці, якая прымяняецца да AWS Lambda. Сфера адказнасці AWS афарбаваная ў аранжавы колер, а адказнасць кліента – у блакітны. Як бачыце, AWS бярэ на сябе больш адказнасці за прыкладанні, якія разгортваюцца на сэрвісе.

Дэталёвы разбор AWS Lambda

Мадэль агульнай адказнасці, якая прымяняецца да AWS Lambda

Серада выканання Lambda

Асноўная перавага Lambda заключаецца ў тым, што, выконваючы функцыю ад вашага імя, сэрвіс сам выдзяляе неабходныя рэсурсы. Вы можаце не марнаваць час і сілы на адміністраванне сістэм і засяродзіцца на бізнес-логіцы і напісанні кода.

Сэрвіс Lambda падзелены на дзве плоскасці. Першая - плоскасць кіравання. Паводле Вікіпедыі, плоскасць кіравання (control plane) - гэта частка сеткі, якая адказвае за транспарціроўку сігнальнага трафіку і маршрутызацыю. Яна з'яўляецца галоўным кампанентам, які прымае глабальныя рашэнні аб выдзяленні, абслугоўванні і размеркаванні працоўных нагрузак. Акрамя таго, плоскасць кіравання выступае ў ролі сеткавай тапалогіі пастаўшчыка рашэння, якая адказвае за маршрутызацыю трафіку і кіраванне ім.

Другая плоскасць - плоскасць дадзеных. У яе, як і ў плоскасці кіравання, свае задачы. Плоскасць кіравання падае API для кіравання функцыямі (CreateFunction, UpdateFunctionCode) і кантралюе ўзаемадзеянне Lambda з іншымі сэрвісамі AWS. Плоскасць дадзеных кіруе API выклікаў (Invoke API), які запускае функцыі Lambda. Пасля выкліку функцыі плоскасць кіравання вылучае або выбірае існуючае, загадзя падрыхтаванае для гэтай функцыі асяроддзе выканання, а затым выконвае ў ёй код.

AWS Lambda падтрымлівае мноства моў праграмавання, уключаючы Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 і іншыя, праз адпаведныя асяроддзі выканання. AWS рэгулярна іх абнаўляе, распаўсюджвае выпраўленні бяспекі і выконвае іншыя аперацыі па абслугоўванні гэтых асяроддзяў. Lambda дазваляе выкарыстоўваць і іншыя мовы пры ўмове, што вы самі ўкараніце адпаведнае асяроддзе выканання. І тады ўжо вам давядзецца займацца яе абслугоўваннем, у тым ліку сачыць за бяспекай.

Як усё гэта працуе і як сэрвіс будзе выконваць вашыя функцыі?

Кожная функцыя працуе ў адной або некалькіх выдзеленых асяроддзях, якія існуюць толькі на працягу жыццёвага цыкла гэтай функцыі, а затым знішчаюцца. У кожным асяроддзі адначасова выконваецца толькі адзін выклік, але яно выкарыстоўваецца паўторна, калі ўзнікае мноства серыйных выклікаў адной і той жа функцыі. Усе асяроддзі выканання працуюць на віртуальных машынах з апаратнай віртуалізацыяй – на так званых microVM. Кожная microVM прызначаецца канкрэтнага ўліковага запісу AWS і можа шматкроць выкарыстоўвацца асяроддзямі для выканання розных функцый у гэтым уліковым запісе. MicroVM пакуюцца ў структурныя блокі апаратнай платформы Lambda Worker, якой валодае і кіруе AWS. Адно і тое ж асяроддзе выканання не можа выкарыстоўвацца рознымі функцыямі, роўна як microVM унікальныя для розных уліковых запісаў AWS.

Дэталёвы разбор AWS Lambda

Мадэль ізаляцыі ў AWS Lambda

Ізаляцыя асяроддзяў выканання рэалізавана з дапамогай некалькіх механізмаў. На вышэйшым узроўні кожнага асяроддзя прысутнічаюць асобныя копіі наступных кампанентаў:

  • Код функцыі
  • Любыя пласты Lambda, абраныя для функцыі
  • Серада выканання функцыі
  • Мінімальная карыстацкая прастора на базе Amazon Linux

Для ізаляцыі розных асяроддзяў выканання прымяняюцца наступныя механізмы:

  • cgroups - абмежаванне доступу да рэсурсаў ЦП, памяці, прапускной здольнасці назапашвальнікаў і сеткі для кожнага асяроддзя выканання;
  • namespaces - аб'яднанне ў групы ID працэсаў, ID карыстальнікаў, сеткавых інтэрфейсаў і іншых рэсурсаў, якімі кіруе ядро ​​Linux. Кожнае асяроддзе выканання працуе ў сваёй прасторы імёнаў;
  • seccomp-bpf - абмежаванне сістэмных выклікаў, якія можна выкарыстоўваць у асяроддзі выканання;
  • iptables і routing tables - ізаляцыя асяроддзяў выканання паміж сабой;
  • chroot - прадастаўленне абмежаванага доступу да ніжэйлеглай файлавай сістэмы.

У спалучэнні з прапрыетарнымі тэхналогіямі ізаляцыі AWS пералічаныя механізмы гарантуюць надзейнае размежаванне асяроддзяў выканання. Ізаляваныя такім чынам асяроддзі не могуць звяртацца да дадзеных іншых асяроддзяў і змяняць іх.

Хоць некалькі асяроддзяў выканання аднаго ўліковага запісу AWS могуць выконвацца на адной microVM, ні пры якіх абставінах microVM не могуць сумесна выкарыстоўвацца рознымі ўліковымі запісамі AWS. Для ізаляцыі microVM у AWS Lambda выкарыстоўваецца ўсяго два механізму: асобнікі EC2 і Firecracker. Ізаляцыя гасцей (guest isolation) у Lambda на аснове экзэмпляраў 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 пасродкам унутранага апытвальнага працэсу (poller). Перадаваны трафік абаронены TLS, пры гэтым якое-небудзь дадатковае шыфраванне дадзеных, якія захоўваюцца ў Amazon SQS, не прадугледжана.

Выклікі па падзеях не вяртаюць адказы - любую інфармацыю ў адказ Lambda Worker папросту ігнаруе. Выклікі на аснове падзей Amazon S3, Amazon SNS, CloudWatch і іншых крыніц апрацоўваюцца сэрвісам Lambda у рэжыме падзей. Выклікі з патокаў Amazon Kinesis і DynamoDB, выклікі чэргаў SQS, балансавальніка нагрузкі прыкладанняў і API Gateway апрацоўваюцца ў рэжыме "запыт – адказ".

Маніторынг

Вы можаце вырабляць маніторынг і аўдыт функцый Lambda з дапамогай розных механізмаў і сэрвісаў AWS, у тым ліку наступныя.

Amazon CloudWatch
Збірае розныя статыстычныя дадзеныя, такія як колькасць запытаў, працягласць выканання запытаў і колькасць запытаў, якія завяршыліся памылкай.

Amazon CloudTrail
Дазваляе весці часопісы, бесперапынны маніторынг і захоўваць звесткі аб актыўнасці ва ўліковым запісе, звязаныя з вашай інфраструктурай AWS. У вас будзе поўная храналогія дзеянняў, выкананых з дапамогай кансолі AWS Management Console, AWS SDK, прылад каманднага радка і іншых сэрвісаў AWS.

AWS X-Ray
Забяспечвае поўную бачнасць усіх этапаў апрацоўкі запытаў у вашым дадатку на аснове карты яго ўнутраных кампанентаў. Дазваляе аналізаваць прыкладанні ў ходзе распрацоўкі і ў вытворчай асяроддзі.

AWS Config
Вы зможаце адсочваць змены канфігурацыі функцый Lambda (уключаючы іх выдаленне) і асяроддзяў выканання, тэгаў, імёнаў апрацоўшчыкаў, памеру кода, размеркаванні памяці, налад часу чакання і параметраў паралелізму, а таксама ролі выканання Lambda IAM, падсеткі і прывязкі груп бяспекі.

Заключэнне

AWS Lambda прапануе магутны набор інструментаў для стварэння бяспечных і якія маштабуюцца прыкладанняў. Многія метады забеспячэння бяспекі і адпаведнасці нарматыўным патрабаванням у AWS Lambda не адрозніваюцца ад выкарыстоўваных у астатніх сэрвісах AWS, хоць ёсць выключэнні. Па стане на сакавік 2019 года Lambda адпавядае патрабаванням SOC 1, SOC 2, SOC 3, PCI DSS, закону ЗША аб пераемнасці і падсправаздачнасці медыцынскага страхавання (HIPAA) і іншым нарматывам. Таму, калі задумаецеся аб рэалізацыі чарговага прыкладання, разгледзьце сэрвіс AWS Lambda - магчыма, ён як нельга лепш падыходзіць для вашай задачы.

Крыніца: habr.com

Дадаць каментар