AWS Lambda егжей-тегжейлі талдау

Мақаланың аудармасы курс студенттері үшін арнайы дайындалған «Бұлттық қызметтер». Осы бағытта дамуға мүдделі ме? Егор Зуевтің шеберлік сабағын көріңіз (InBit-тегі топ жетекшісі) «AWS EC2 қызметі» және келесі курс тобына қосылыңыз: 26 қыркүйекте басталады.

AWS Lambda егжей-тегжейлі талдау

Көбірек адамдар ауқымдылық, өнімділік, үнемдеу және айына миллиондаған, тіпті триллиондаған сұрауларды өңдеу мүмкіндігі үшін AWS Lambda жүйесіне көшуде. Бұл әрекетті орындау үшін қызмет жұмыс істейтін инфрақұрылымды басқарудың қажеті жоқ. Ал автомасштабтау секундына бір уақытта мыңдаған сұрауларға қызмет көрсетуге мүмкіндік береді. Менің ойымша, AWS Lambda ең танымал AWS қызметтерінің бірі деп атауға болады.

AWS Lambda

AWS Lambda — серверлерді дайындаусыз немесе басқарусыз кодты іске қосуға және реттелетін логиканы пайдаланып басқа AWS қызметтерін кеңейтуге мүмкіндік беретін оқиғаға негізделген серверсіз есептеу қызметі. Lambda әртүрлі оқиғаларға (триггерлер деп аталады) автоматты түрде жауап береді, мысалы, Amazon API шлюзі арқылы HTTP сұраулары, Amazon S3 шелектеріндегі деректерге өзгерістер немесе Amazon DynamoDB кестелері; немесе кодты AWS SDK және AWS қадам функцияларындағы ауысуларды пайдаланып API қоңыраулары арқылы іске қосуға болады.

Lambda жоғары қол жетімді есептеу инфрақұрылымында кодты іске қосады және сервер мен операциялық жүйеге қызмет көрсетуді, ресурстарды қамтамасыз етуді, автоматты масштабтауды, кодты бақылауды және журналды тіркеуді қоса алғанда, негізгі платформаны басқаруға толық жауап береді. Яғни, сізге тек кодты жүктеп салып, оның қалай және қашан орындалатынын конфигурациялау қажет. Өз кезегінде, қызмет оның іске қосылуы туралы қамқорлық жасайды және сіздің қосымшаңыздың жоғары қолжетімділігін қамтамасыз етеді.

Ламбдаға қашан ауысу керек?

AWS Lambda — кодыңыздың тілі мен орындалу уақытына қызмет қолдау көрсететін болса, әртүрлі пайдалану жағдайларына қолайлы ыңғайлы есептеу платформасы. Серверге техникалық қызмет көрсету, қамтамасыз ету және қолайлы бағамен масштабтау кезінде код пен бизнес логикасына назар аударғыңыз келсе, AWS Lambda бұл міндетті түрде баратын жол.

Lambda бағдарламалау интерфейстерін жасау үшін өте қолайлы және API шлюзімен бірге пайдаланылғанда, сіз шығындарды айтарлықтай азайтып, нарыққа тезірек шыға аласыз. 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 қызметі екі жазықтыққа бөлінген. Біріншісі - басқару ұшағы. Википедияға сәйкес, басқару ұшағы сигналдық трафикті және маршруттауды тасымалдауға жауапты желінің бөлігі болып табылады. Бұл жұмыс жүктемелерін қамтамасыз ету, қызмет көрсету және тарату туралы жаһандық шешімдерді қабылдайтын негізгі құрамдас бөлік. Сонымен қатар, басқару жазықтығы трафикті бағыттауға және басқаруға жауап беретін шешім провайдерінің желі топологиясы ретінде әрекет етеді.

Екінші жазықтық – деректер жазықтығы. Оның басқару ұшағы сияқты өз міндеттері бар. Басқару жазықтығы функцияларды басқаруға арналған API интерфейстерін береді (CreateFunction, UpdateFunctionCode) және Lambda басқа AWS қызметтерімен қалай байланысатынын басқарады. Деректер жазықтығы Lambda функцияларын іске қосатын Invoke API басқарады. Функция шақырылғаннан кейін басқару жазықтығы сол функция үшін алдын ала дайындалған бар орындалу ортасын бөледі немесе таңдайды, содан кейін ондағы кодты орындайды.

AWS Lambda әр түрлі бағдарламалау тілдерін, соның ішінде Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 және басқаларын, олардың тиісті орындалу орталары арқылы қолдайды. AWS оларды үнемі жаңартып отырады, қауіпсіздік патчтарын таратады және осы орталарда басқа техникалық қызмет көрсету әрекеттерін орындайды. Ламбда сізге сәйкес жұмыс уақытын өзіңіз енгізген жағдайда басқа тілдерді де пайдалануға мүмкіндік береді. Содан кейін сіз оның қауіпсіздігін бақылауды қоса алғанда, оны күтіп ұстау туралы қамқорлық жасауыңыз керек.

Мұның бәрі қалай жұмыс істейді және қызмет сіздің функцияларыңызды қалай орындайды?

Әрбір функция бір немесе бірнеше арнайы орталарда жұмыс істейді, олар тек осы функцияның қызмет ету мерзімінде бар және содан кейін жойылады. Әрбір орта бір уақытта тек бір қоңырауды жасайды, бірақ бір функцияға бірнеше сериялық қоңыраулар болса, ол қайта пайдаланылады. Барлық жұмыс орталары аппараттық виртуализациясы бар виртуалды машиналарда жұмыс істейді - microVM деп аталады. Әрбір microVM белгілі бір AWS тіркелгісіне тағайындалған және оны орталар сол тіркелгіде әртүрлі функцияларды орындау үшін қайта пайдалана алады. MicroVM құрылғылары AWS иелігіндегі және басқаратын Lambda Worker аппараттық платформасының құрылыс блоктарына жинақталған. Бірдей орындалу уақытын әртүрлі функциялар пайдалана алмайды, сондай-ақ microVM құрылғылары әртүрлі AWS тіркелгілері үшін бірегей емес.

AWS Lambda егжей-тегжейлі талдау

AWS Lambda оқшаулау үлгісі

Орындау орталарының оқшаулануы бірнеше механизмдердің көмегімен жүзеге асырылады. Әрбір ортаның жоғарғы деңгейінде келесі компоненттердің жеке көшірмелері бар:

  • Функция коды
  • Функция үшін таңдалған кез келген Lambda қабаттары
  • Функцияның орындалу ортасы
  • Amazon Linux негізіндегі минималды пайдаланушы кеңістігі

Әр түрлі орындау орталарын оқшаулау үшін келесі механизмдер қолданылады:

  • cgroups - әрбір орындалу ортасы үшін орталық процессорға, жадқа, жадқа және желі ресурстарына рұқсатты шектеу;
  • аттар кеңістігі – процесс идентификаторларын, пайдаланушы идентификаторларын, желілік интерфейстерді және Linux ядросы басқаратын басқа ресурстарды топтастыру. Әрбір орындалу уақыты өз аттар кеңістігінде іске қосылады;
  • seccomp-bpf - орындау уақытында пайдалануға болатын жүйелік қоңырауларды шектейді;
  • iptables және маршруттау кестелері – орындау орталарын бір-бірінен оқшаулау;
  • chroot - негізгі файлдық жүйеге шектеулі қол жеткізуді қамтамасыз етеді.

AWS меншікті оқшаулау технологияларымен біріктірілген бұл механизмдер жұмыс уақытын сенімді бөлуді қамтамасыз етеді. Осылайша оқшауланған орталар басқа орталардағы деректерге қол жеткізе алмайды немесе өзгерте алмайды.

Бір AWS тіркелгісінің бірнеше жұмыс уақыты бір microVM құрылғысында жұмыс істей алатынына қарамастан, ешбір жағдайда microVM құрылғыларын әртүрлі AWS тіркелгілері арасында бөлісуге болмайды. AWS Lambda microVM құрылғыларын оқшаулау үшін тек екі механизмді пайдаланады: EC2 даналары және Firecracker. EC2 даналарына негізделген Lambda-да қонақтарды оқшаулау 2015 жылдан бері бар. Firecracker - серверсіз жұмыс жүктемелері үшін AWS арнайы әзірлеген және 2018 жылы енгізілген жаңа ашық бастапқы гипервизор. MicroVM іске қосатын физикалық аппараттық құрал әртүрлі тіркелгілердегі жұмыс жүктемелері арасында ортақ пайдаланылады.

Орталарды және процесс күйлерін сақтау

Lambda орындалу уақыттары әртүрлі функциялар үшін бірегей болғанымен, олар бір функцияны қайта-қайта шақыра алады, яғни орындалу уақыты жойылғанға дейін бірнеше сағат бойы сақталады.

Әрбір Lambda жұмыс уақытында /tmp каталогы арқылы қол жеткізуге болатын жазылатын файлдық жүйе бар. Оның мазмұнына басқа орындалу уақыттарынан қол жеткізу мүмкін емес. Процесс күйінің тұрақтылығына қатысты /tmp файлына жазылған файлдар орындау ортасының бүкіл өмірлік циклі үшін бар. Бұл бірнеше қоңыраулардың нәтижелерін жинақтауға мүмкіндік береді, бұл әсіресе машиналық оқыту үлгілерін жүктеу сияқты қымбат операциялар үшін пайдалы.

Қоңырау деректерін тасымалдау

Invoke API екі режимде пайдаланылуы мүмкін: оқиға режимі және сұрау-жауап режимі. Оқиға режимінде қоңырау кейінірек орындау үшін кезекке қосылады. Сұраныс-жауап режимінде функция берілген пайдалы жүктемемен бірден шақырылады, содан кейін жауап қайтарылады. Екі жағдайда да функция Lambda ортасында, бірақ әртүрлі пайдалы жүктеме жолдарымен жұмыс істейді.

Сұраныс-жауап қоңыраулары кезінде пайдалы жүктеме AWS API шлюзі немесе AWS SDK сияқты сұрауды өңдеу API (API қоңырау шалушы) арқылы жүктеме теңестірушіге, содан кейін Lambda қоңырау қызметіне (Invoke Service) ағып кетеді. Соңғысы функцияны орындау үшін сәйкес ортаны анықтайды және қоңырауды аяқтау үшін пайдалы жүктемені сол жерге жібереді. Жүктеме теңестіруші Интернет арқылы TLS арқылы қорғалған трафикті алады. Lambda қызметіндегі трафик (жүктеме теңестірушіден кейін) белгілі бір AWS аймағындағы ішкі VPC арқылы өтеді.

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 кезектерінен, қолданба жүктемесін теңестірушіден және API шлюзінен қоңыраулар сұрау-жауап әдісімен өңделеді.

Бақылау

Әртүрлі AWS механизмдері мен қызметтерін, соның ішінде төмендегілерді пайдалана отырып, Lambda функцияларын бақылауға және тексеруге болады.

Amazon CloudWatch
Сұраулар саны, сұраулардың ұзақтығы және орындалмаған сұраулар саны сияқты әртүрлі статистиканы жинайды.

Amazon CloudTrail
AWS инфрақұрылымымен байланысты тіркелгі әрекеті ақпаратын тіркеуге, үздіксіз бақылауға және қолдауға мүмкіндік береді. Сізде AWS Management Console, AWS SDK, пәрмен жолы құралдары және басқа AWS қызметтері арқылы орындалған әрекеттердің толық тарихы болады.

AWS рентгені
Оның ішкі құрамдастарының картасы негізінде қолданбаңыздағы сұрауды өңдеудің барлық кезеңдеріне толық көрінуді қамтамасыз етеді. Әзірлеу кезінде және өндірістік ортада қолданбаларды талдауға мүмкіндік береді.

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

пікір қалдыру