AWS Lambda-ի մանրամասն վերլուծություն

Հոդվածի թարգմանությունը պատրաստվել է հատուկ դասընթացի ուսանողների համար «Ամպային ծառայություններ». Հետաքրքրվա՞ծ եք այս ուղղությամբ զարգանալ: Դիտեք Էգոր Զուևի վարպետության դասը (TeamLead InBit-ում) «AWS EC2 ծառայություն» և միացեք հաջորդ դասընթացի խմբին՝ մեկնարկը սեպտեմբերի 26-ին։

AWS Lambda-ի մանրամասն վերլուծություն

Ավելի շատ մարդիկ գաղթում են AWS Lambda՝ մասշտաբայնության, կատարողականի, խնայողությունների և ամսական միլիոնավոր կամ նույնիսկ տրիլիոնավոր հարցումներ կարգավորելու ունակության համար: Դա անելու համար ձեզ հարկավոր չէ կառավարել ենթակառուցվածքը, որի վրա աշխատում է ծառայությունը: Իսկ autoscaling-ը թույլ է տալիս վայրկյանում սպասարկել հազարավոր միաժամանակյա հարցումներ: Կարծում եմ, AWS Lambda-ն իրավամբ կարելի է անվանել ամենահայտնի AWS ծառայություններից մեկը:

AWS Lambda

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 ծառայությունը բաժանված է երկու հարթության. Առաջինը կառավարման ինքնաթիռն է։ Ըստ Wikipedia-ի՝ կառավարման ինքնաթիռը ցանցի այն մասն է, որը պատասխանատու է ազդանշանային երթևեկության և երթուղու տեղափոխման համար։ Այն հիմնական բաղադրիչն է, որը գլոբալ որոշումներ է կայացնում աշխատանքային բեռների տրամադրման, սպասարկման և բաշխման վերաբերյալ: Բացի այդ, կառավարման հարթությունը գործում է որպես լուծում մատակարարի ցանցի տոպոլոգիա, որը պատասխանատու է երթուղիների երթուղման և կառավարման համար:

Երկրորդ հարթությունը տվյալների հարթությունն է: Այն, ինչպես կառավարման ինքնաթիռը, ունի իր առաջադրանքները։ Կառավարման հարթությունը տրամադրում է API-ներ՝ գործառույթների կառավարման համար (CreateFunction, UpdateFunctionCode) և վերահսկում է, թե ինչպես է Lambda-ն հաղորդակցվում AWS այլ ծառայությունների հետ: Տվյալների հարթությունը վերահսկում է 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 - սահմանափակել մուտքը դեպի պրոցեսոր, հիշողություն, պահեստ և ցանցային ռեսուրսներ յուրաքանչյուր գործարկման միջավայրի համար;
  • Անվանատարածքներ - գործընթացի ID-ների, օգտատերերի 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 Call Processing Model. Request-Response Mode

Իրադարձությունների զանգերը կարող են կատարվել անմիջապես կամ ավելացնել հերթում: Որոշ դեպքերում հերթը իրականացվում է 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 ռենտգեն
Ապահովում է ամբողջական տեսանելիություն ձեր դիմումի հարցումների մշակման բոլոր փուլերի վրա՝ հիմնվելով դրա ներքին բաղադրիչների քարտեզի վրա: Թույլ է տալիս վերլուծել հավելվածները մշակման ընթացքում և արտադրական միջավայրերում:

AWS Config
Դուք կկարողանաք հետևել Lambda ֆունկցիայի կազմաձևման փոփոխություններին (ներառյալ ջնջումը) և գործարկման ժամանակները, պիտակները, մշակողի անունները, կոդի չափը, հիշողության բաշխումը, ժամանակի վերջնաժամկետը և համաժամանակյա կարգավորումները, ինչպես նաև Lambda IAM-ի կատարման դերը, ենթացանցը և անվտանգության խմբերի կապակցումները: .

Ամփոփում

AWS Lambda-ն առաջարկում է գործիքների հզոր հավաքածու՝ անվտանգ և մասշտաբային հավելվածներ ստեղծելու համար: AWS Lambda-ում անվտանգության և համապատասխանության պրակտիկաներից շատերը նույնն են, ինչ մյուս AWS ծառայություններում, թեև կան բացառություններ: 2019 թվականի մարտի դրությամբ Lambda-ն համապատասխանում է SOC 1, SOC 2, SOC 3, PCI DSS, Առողջապահական ապահովագրության տեղափոխելիության և հաշվետվողականության ակտի (HIPAA) համապատասխանությանը և այլ կանոնակարգերին: Այսպիսով, երբ մտածում եք ձեր հաջորդ հավելվածն իրականացնելու մասին, հաշվի առեք AWS Lambda ծառայությունը. այն կարող է լավագույնս համապատասխանում ձեր առաջադրանքին:

Source: www.habr.com

Добавить комментарий