AWS Lambda деталдуу талдоо

Макаланын котормосу курстун студенттери үчүн атайын даярдалган "Булут кызматтары". Бул багытта өнүгүүгө кызыкдарсызбы? Егор Зуевдин мастер-классын көрүңүз (TeamLead in InBit) "AWS EC2 кызматы" жана кийинки курстарга кошулуу: 26-сентябрда башталат.

AWS Lambda деталдуу талдоо

AWS Lambdaга көбүрөөк адамдар масштабдуулук, аткаруу, үнөмдөө жана айына миллиондогон, атүгүл триллиондогон суроо-талаптарды аткаруу мүмкүнчүлүгү үчүн көчүп жатышат. Бул үчүн, кызмат иштеген инфраструктураны башкаруунун кереги жок. Ал эми автоскалдаштыруу секундасына бир эле убакта миңдеген суроо-талаптарды тейлөөгө мүмкүндүк берет. Менимче, AWS Lambda эң популярдуу AWS кызматтарынын бири деп атоого болот.

AWS Lambda

AWS Lambda бул окуяга негизделген серверсиз эсептөө кызматы, ал сизге серверлерди камсыз кылбастан же башкарбастан кодду иштетүүгө жана ыңгайлаштырылган логиканы колдонуу менен башка AWS кызматтарын кеңейтүүгө мүмкүндүк берет. Lambda автоматтык түрдө ар кандай окуяларга жооп берет (триггерлер деп аталат), мисалы, Amazon API Gateway аркылуу HTTP сурамдары, Amazon S3 чакаларындагы же Amazon DynamoDB таблицаларындагы маалыматтарга өзгөртүүлөр; же сиз кодуңузду AWS SDK жана AWS Step Functions ичиндеги өткөөлдөрдү колдонуу менен API чалуулары аркылуу иштетсеңиз болот.

Lambda жогорку жеткиликтүү эсептөө инфраструктурасында кодду иштетет жана серверди жана операциялык системаны тейлөөнү, ресурсту камсыздоону, авто-масштабдоону, кодду көзөмөлдөөнү жана журналды каттоону камтыган негизги платформаны башкаруу үчүн толугу менен жооп берет. Башкача айтканда, сиз жөн гана кодуңузду жүктөп, аны кантип жана качан аткарууну конфигурациялашыңыз керек. Өз кезегинде, кызмат анын ишке киришине кам көрөт жана колдонмоңуздун жогорку жеткиликтүүлүгүн камсыз кылат.

Ламбдага качан өтүш керек?

AWS Lambda – кодуңуздун тили жана иштөө убактысы кызмат тарабынан колдоого алынса, ар кандай колдонуу учурлары үчүн ылайыктуу ыңгайлуу эсептөө платформасы. Эгерде сиз аутсорсингге серверди тейлөө, провизиялоо жана акылга сыярлык баада масштабдоо учурунда өзүңүздүн кодуңузга жана бизнес логикасына көңүл бургуңуз келсе, анда AWS Lambda сөзсүз бара турган жол.

Lambda программалоо интерфейстерин түзүү үчүн идеалдуу болуп саналат жана API Gateway менен бирге колдонулганда, сиз чыгымдарды кыйла азайтып, рынокко тезирээк чыга аласыз. 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 кызматы эки учакка бөлүнөт. Биринчи башкаруу учагы болуп саналат. Wikipedia ылайык, башкаруу учагы сигналдык трафикти жана маршруттук ташуу үчүн жооптуу тармак бөлүгү болуп саналат. Бул иш жүктөмдөрүн камсыздоо, тейлөө жана бөлүштүрүү боюнча глобалдык чечимдерди кабыл алган негизги компонент. Кошумчалай кетсек, башкаруу учагы трафикти багыттоо жана башкаруу үчүн жооптуу болгон чечим провайдеринин тармак топологиясы катары иштейт.

Экинчи тегиздик - маалымат учагы. Анын башкаруу учагы сыяктуу эле өзүнүн милдеттери бар. Башкаруу учагы функцияларды башкаруу үчүн API'лерди камсыз кылат (CreateFunction, UpdateFunctionCode) жана Lambda башка AWS кызматтары менен кантип байланышарын көзөмөлдөйт. Маалымат учагы Lambda функцияларын иштеткен Invoke API'ни башкарат. Функция чакырылгандан кийин башкаруу тегиздиги ошол функция үчүн алдын ала даярдалган учурдагы иштөө убактысынын чөйрөсүн бөлүштүрөт же тандайт, андан кийин андагы кодду аткарат.

AWS Lambda ар кандай программалоо тилдерин, анын ичинде Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 жана башкаларды, алардын иштөө убактысынын чөйрөлөрү аркылуу колдойт. AWS аларды үзгүлтүксүз жаңыртып турат, коопсуздук патчтарын таратат жана бул чөйрөлөрдө башка тейлөө иш-аракеттерин аткарат. Ламбда сизге башка тилдерди да колдонууга мүмкүндүк берет, эгерде сиз өзүңүз ылайыктуу иштөө убактысын киргизсеңиз. Анан анын сакталышы, анын ичинде анын коопсуздугуна мониторинг жүргүзүүгө туура келет.

Мунун баары кантип иштейт жана кызмат сиздин функцияңызды кандай аткарат?

Ар бир функция бир же бир нече атайын чөйрөдө иштейт, алар ошол функциянын иштөө мөөнөтү үчүн гана бар жана андан кийин жок кылынат. Ар бир чөйрө бир эле учурда бир гана чалуу жасайт, бирок бир эле функцияга бир нече сериялык чалуулар болсо, ал кайра колдонулат. Бардык иштөө чөйрөлөрү аппараттык виртуализациясы бар виртуалдык машиналарда иштейт - microVMs деп аталган. Ар бир microVM белгилүү бир AWS эсебине дайындалган жана ал эсептин ичинде ар кандай функцияларды аткаруу үчүн чөйрөлөр тарабынан кайра колдонулушу мүмкүн. MicroVMs AWS ээлик кылган жана башкарган Lambda Worker аппараттык платформасынын курулуш блокторуна топтолгон. Бир эле иштөө убактысын ар кандай функциялар колдонууга болбойт, ошондой эле microVM'лер ар кандай AWS эсептерине уникалдуу эмес.

AWS Lambda деталдуу талдоо

AWS Lambda изоляция модели

Иштөө чөйрөлөрүнүн изоляциясы бир нече механизмдердин жардамы менен ишке ашырылат. Ар бир чөйрөнүн жогорку деңгээлинде төмөнкү компоненттердин өзүнчө көчүрмөлөрү бар:

  • Функция коду
  • Функция үчүн тандалган каалаган Lambda катмарлары
  • Функцияны аткаруу чөйрөсү
  • Amazon Linux негизинде минималдуу колдонуучу мейкиндиги

Ар кандай аткаруу чөйрөлөрүн изоляциялоо үчүн төмөнкү механизмдер колдонулат:

  • cgroups - ар бир иштөө чөйрөсү үчүн CPU, эстутум, сактоо жана тармак ресурстарына жетүүнү чектөө;
  • аттар мейкиндиктери - топтоо процессинин идентификаторлору, колдонуучу идентификаторлору, тармак интерфейстери жана 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 Gateway же AWS SDK сыяктуу суроо-талаптарды иштетүүчү API'ден (API Caller) жүк баланстоочуга, андан кийин 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 Gateway чалуулары суроо-жооп режиминде иштетилет.

Мониторинг

Сиз ар кандай AWS механизмдерин жана кызматтарын, анын ичинде төмөнкүлөрдү колдонуу менен Lambda функцияларын көзөмөлдөп жана текшере аласыз.

amazoncloudwatch
Сурамдардын саны, сурамдардын узактыгы жана ишке ашпай калган суроо-талаптардын саны сыяктуу ар кандай статистиканы чогултат.

Amazon CloudTrail
AWS инфраструктураңыз менен байланышкан каттоо эсебинин аракеттери тууралуу маалыматты журналга, үзгүлтүксүз көзөмөлдөөгө жана сактоого мүмкүндүк берет. Сизде AWS Management Console, AWS SDK, буйрук сабынын куралдары жана башка AWS кызматтары аркылуу аткарылган аракеттердин толук тарыхы болот.

AWS X-Ray
Анын ички компоненттеринин картасынын негизинде сиздин тиркемеңиздеги суроо-талаптарды иштетүүнүн бардык этаптарына толук көрүнүүнү камсыздайт. Иштеп чыгуу учурунда жана өндүрүш чөйрөлөрүндө тиркемелерди талдоо мүмкүнчүлүгүн берет.

AWS Config
Сиз Lambda функциясынын конфигурациясына (анын ичинде жок кылуу) жана иштөө убакыттарына, тегдерге, иштеткичтердин аттарына, коддун өлчөмүнө, эстутумга бөлүштүрүүгө, тайм-аут жөндөөлөрүнө жана параллелдүүлүк жөндөөлөрүнө, ошондой эле Lambda IAM аткаруу ролуна, субнеттингге жана коопсуздук топторунун байланыштарына көз сала аласыз. .

жыйынтыктоо

AWS Lambda коопсуз жана масштабдуу тиркемелерди куруу үчүн күчтүү куралдар топтомун сунуштайт. AWS Lambdaдагы коопсуздук жана шайкештик практикаларынын көбү башка AWS кызматтарындагыдай эле, бирок өзгөчөлүктөр бар. 2019-жылдын март айына карата Ламбда SOC 1, SOC 2, SOC 3, PCI DSS, Медициналык камсыздандыруунун көчмө жөндөмдүүлүгү жана жоопкерчилиги актынын (HIPAA) шайкештигине жана башка ченемдерге ылайык келет. Андыктан, кийинки колдонмоңузду ишке ашыруу жөнүндө ойлонуп жатканыңызда, AWS Lambda кызматын карап көрүңүз - бул сиздин тапшырмаңызга эң ылайыктуу болушу мүмкүн.

Source: www.habr.com

Комментарий кошуу