AWS Lambda-ийн нарийвчилсан шинжилгээ

Өгүүллийн орчуулгыг тус курсын оюутнуудад зориулж тусгайлан бэлтгэсэн "Үүлэн үйлчилгээ". Энэ чиглэлээр хөгжих сонирхолтой байна уу? Егор Зуевын мастер анги үзэх (InBit-ийн багийн ахлагч) "AWS EC2 үйлчилгээ" Дараагийн курсын бүлэгт элсэх: 26-р сарын XNUMX-нд эхэлнэ.

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 функцийг ашиглах янз бүрийн арга замууд ба сервергүй архитектурыг зохион байгуулах сонголтууд байдаг - хүн бүр зорилгодоо үндэслэн тохирох зүйлийг сонгох боломжтой.

Lambda нь олон төрлийн ажлыг гүйцэтгэх боломжийг олгодог. Тиймээс CloudWatch-ийн дэмжлэгийн ачаар та хойшлогдсон ажлуудыг үүсгэж, бие даасан үйл явцыг автоматжуулах боломжтой. Үйлчилгээний ашиглалтын шинж чанар, эрчмд ямар ч хязгаарлалт байхгүй (санах ойн зарцуулалт, цаг хугацааг харгалзан үздэг) бөгөөд Lambda дээр суурилсан бүрэн хэмжээний бичил үйлчилгээ дээр системтэйгээр ажиллахад юу ч саад болохгүй.

Энд та тасралтгүй ажилладаггүй үйлчилгээнд чиглэсэн үйлдлүүдийг үүсгэж болно. Ердийн жишээ бол зургийн масштабыг өөрчлөх явдал юм. Түгээмэл системүүдийн хувьд ч гэсэн Lambda функцууд хамааралтай хэвээр байна.

Тиймээс, хэрэв та тооцоолох нөөцийг хуваарилах, удирдах асуудлыг шийдэхийг хүсэхгүй байгаа бол AWS Lambda-г туршиж үзээрэй; Хэрэв танд маш их нөөц шаардсан тооцоо шаардлагагүй бол AWS Lambda-г бас туршиж үзээрэй; Хэрэв таны код үе үе ажилладаг бол энэ нь зөв, та AWS Lambda-г туршиж үзэх хэрэгтэй.

Аюулгүй байдал

Одоогоор аюулгүй байдлын талаар гомдол гараагүй байна. Нөгөөтэйгүүр, энэ загварын олон дотоод процессууд болон хэрэгжүүлэх боломжууд нь AWS Lambda удирддаг ажиллах цагийн орчны хэрэглэгчээс нуугдмал байдаг тул үүлэн аюулгүй байдлын зарим нийтлэг хүлээн зөвшөөрөгдсөн дүрмүүд хамааралгүй болдог.

Ихэнх AWS үйлчилгээнүүдийн нэгэн адил Lambda нь AWS болон үйлчлүүлэгчийн хооронд хамтын аюулгүй байдал, нийцлийн үндсэн дээр хангагдсан байдаг. AWS нь үндсэн үйлдлийн систем, виртуалчлалын давхаргаас эхлээд дэд бүтцийн хөрөнгийн бодит аюулгүй байдал хүртэлх үйлчилгээний бүрэлдэхүүн хэсгүүдийг хадгалах, удирдах, хянах ажлыг хариуцдаг тул энэ зарчим нь үйлчлүүлэгчийн үйл ажиллагааны ачааллыг бууруулдаг.

AWS Lambda-ийн тухай ярихад AWS нь үндсэн дэд бүтэц, холбогдох үндсэн үйлчилгээ, үйлдлийн систем, хэрэглээний платформыг удирдах үүрэгтэй. Үйлчлүүлэгч нь өөрийн кодын аюулгүй байдлыг хангах, нууц мэдээлэл хадгалах, түүнд хандах хандалтыг хянах, түүнчлэн Ламбда үйлчилгээ, нөөцөд (Identity and Access Management, IAM), үүнд ашигласан функцүүдийн хүрээнд хариуцлага хүлээнэ.

Доорх диаграмм нь AWS Lambda-д хамаарах хамтын хариуцлагын загварыг харуулж байна. AWS Хариуцлага улбар шар, Хэрэглэгчийн Хариуцлага цэнхэр өнгөтэй байна. Таны харж байгаагаар AWS нь үйлчилгээнд байрлуулсан програмуудад илүү хариуцлага хүлээдэг.

AWS Lambda-ийн нарийвчилсан шинжилгээ

AWS 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 нь тэдгээрийг тогтмол шинэчилж, хамгаалалтын засваруудыг тарааж, эдгээр орчинд засвар үйлчилгээний бусад үйл ажиллагааг гүйцэтгэдэг. Lambda нь өөр хэлийг ашиглах боломжийг олгодог, хэрэв та тохирох ажиллах цагийг өөрөө хэрэгжүүлбэл. Дараа нь та түүний засвар үйлчилгээ, түүний дотор аюулгүй байдлыг хянах хэрэгтэй болно.

Энэ бүхэн хэрхэн ажилладаг вэ, үйлчилгээ таны үүргийг хэрхэн гүйцэтгэх вэ?

Функц бүр нь нэг буюу хэд хэдэн зориулалтын орчинд ажилладаг бөгөөд тэдгээр нь зөвхөн тухайн функцийн ашиглалтын хугацаанд байдаг бөгөөд дараа нь устгагдах болно. Хүрээлэн буй орчин бүр нэг удаад зөвхөн нэг дуудлага хийдэг боловч нэг функцэд хэд хэдэн цуваа дуудлага байгаа тохиолдолд дахин ашиглагддаг. Бүх ажлын орчин нь microVM гэж нэрлэгддэг техник хангамжийн виртуалчлал бүхий виртуал машинууд дээр ажилладаг. MicroVM бүр нь тодорхой AWS бүртгэлд хуваарилагдсан бөгөөд тухайн дансны өөр өөр функцийг гүйцэтгэхийн тулд орчин үүнийг дахин ашиглах боломжтой. MicroVMs нь AWS-ийн эзэмшиж, ажиллуулдаг Lambda Worker техник хангамжийн платформын барилгын блокуудад багцлагдсан. Ижил ажиллах цагийг өөр өөр функцэд ашиглах боломжгүй, мөн microVM нь өөр өөр AWS бүртгэлд хамаарахгүй.

AWS Lambda-ийн нарийвчилсан шинжилгээ

AWS Lambda тусгаарлах загвар

Ажиллах орчныг тусгаарлах ажлыг хэд хэдэн механизм ашиглан гүйцэтгэдэг. Орчны дээд түвшинд дараах бүрэлдэхүүн хэсгүүдийн тусдаа хуулбарууд байдаг.

  • Функцийн код
  • Функцэд сонгосон Ламбда давхаргууд
  • Функцийг гүйцэтгэх орчин
  • Amazon Linux дээр суурилсан хэрэглэгчийн хамгийн бага зай

Гүйцэтгэлийн янз бүрийн орчныг тусгаарлахын тулд дараах механизмуудыг ашигладаг.

  • cgroups - ажиллах үеийн орчин бүрийн хувьд CPU, санах ой, хадгалалт, сүлжээний нөөцөд хандах хандалтыг хязгаарлах;
  • namespaces - бүлэглэх үйл явцын ID, хэрэглэгчийн ID, сүлжээний интерфейс болон Линукс цөмөөр удирддаг бусад нөөцүүд. Ажиллах цаг бүр өөрийн нэрийн зайд ажилладаг;
  • seccomp-bpf - ажиллах үед ашиглаж болох системийн дуудлагыг хязгаарладаг;
  • iptables болон чиглүүлэлтийн хүснэгтүүд - гүйцэтгэлийн орчныг бие биенээсээ тусгаарлах;
  • chroot - үндсэн файлын системд хязгаарлагдмал хандалтыг олгодог.

Эдгээр механизмууд нь AWS-ийн өмчийн тусгаарлах технологитой хослуулан ажиллах хугацааг найдвартай тусгаарладаг. Ийм байдлаар тусгаарлагдсан орчин нь бусад орчноос өгөгдөлд хандах эсвэл өөрчлөх боломжгүй.

Хэдийгээр нэг AWS дансны олон ажиллах хугацаа нь нэг microVM дээр ажиллах боломжтой ч ямар ч тохиолдолд microVM-г өөр AWS данс хооронд хуваалцах боломжгүй. AWS Lambda нь microVM-уудыг тусгаарлахын тулд зөвхөн хоёр механизм ашигладаг: EC2 instances болон 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-д хадгалагдсан өгөгдлийн нэмэлт шифрлэлт байхгүй.

Үйл явдлын дуудлага нь хариу өгөхгүй—Ламбда Ажилч нь хариу өгөх аливаа мэдээллийг үл тоомсорлодог. Amazon S3, Amazon SNS, CloudWatch болон бусад эх сурвалжаас үйл явдалд суурилсан дуудлагыг Lambda үйл явдлын горимд боловсруулдаг. Amazon Kinesis болон DynamoDB урсгал, SQS дараалал, Хэрэглээний ачааллыг тэнцвэржүүлэгч, API гарцын дуудлагуудыг хүсэлтийн хариу аргачлалын дагуу боловсруулдаг.

Хяналт шинжилгээ

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

amazoncloudwatch
Хүсэлтийн тоо, хүсэлтийн үргэлжлэх хугацаа, амжилтгүй болсон хүсэлтийн тоо зэрэг янз бүрийн статистик мэдээллийг цуглуулдаг.

Amazon CloudTrail
Таны AWS дэд бүтэцтэй холбоотой бүртгэлийн үйл ажиллагааны мэдээллийг бүртгэх, тасралтгүй хянах, хадгалах боломжийг танд олгоно. Та AWS Management Console, AWS SDK, командын мөрийн хэрэгслүүд болон бусад AWS үйлчилгээг ашиглан гүйцэтгэсэн үйлдлийн бүрэн түүхтэй байх болно.

AWS рентген туяа
Дотоод бүрэлдэхүүн хэсгүүдийн газрын зураг дээр үндэслэн таны програмын хүсэлтийг боловсруулах бүх үе шатыг бүрэн харагдуулна. Програмыг боловсруулах явцад болон үйлдвэрлэлийн орчинд дүн шинжилгээ хийх боломжийг танд олгоно.

AWS тохиргоо
Та Lambda функцийн тохиргоо (устгах гэх мэт) болон ажиллах хугацаа, шошго, зохицуулагчийн нэр, кодын хэмжээ, санах ойн хуваарилалт, завсарлагааны тохиргоо болон давхцах тохиргоо, түүнчлэн Lambda IAM гүйцэтгэх үүрэг, дэд сүлжээ, аюулгүй байдлын бүлгийн холболтын өөрчлөлтийг хянах боломжтой болно. .

дүгнэлт

AWS Lambda нь аюулгүй, өргөтгөх боломжтой програмуудыг бүтээх хүчирхэг хэрэгслүүдийг санал болгодог. Хэдийгээр үл хамаарах зүйлүүд байдаг ч AWS Lambda дахь аюулгүй байдал, дагаж мөрдөх журмын ихэнх нь бусад AWS үйлчилгээнүүдийнхтэй адил байдаг. 2019 оны 1-р сарын байдлаар Ламбда нь SOC 2, SOC 3, SOC XNUMX, PCI DSS, Эрүүл мэндийн даатгалын зөөвөрлөх чадвар, хариуцлагын тухай хууль (HIPAA) болон бусад дүрэм журамд нийцэж байна. Тиймээс, та дараагийн програмаа хэрэгжүүлэх талаар бодож байгаа бол AWS Lambda үйлчилгээг анхаарч үзээрэй - энэ нь таны даалгаварт хамгийн тохиромжтой байж магадгүй юм.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх