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

Հոդվածի թարգմանությունը պատրաստվել է հատուկ դասընթացի ուսանողների համար «Աղբյուրային ծառայություններ». Ձեզ հետաքրքրում է այս ուղղությամբ զարգանալ? Տեսեք Եгор Զուևի (InBit ընկերության TeamLead) մանկավարժական նիստը «AWS EC2 ծառայություն» և միացեք առաջիկայում սկսվող դասին: Շուրջ 26 սեպտեմբերի:

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

越来越多的人转向AWS Lambda,因为其可扩展性、性能、节省成本以及每月处理数百万甚至数万亿个请求的能力。 为此,您无需管理服务所运行的基础设施。 而自动扩展可支持每秒数千个并发请求。 我认为AWS Lambda可以真正称得上是AWS最受欢迎的服务之一。

AWS Lambda

AWS Lambda是一种事件驱动的无服务器计算服务,允许在不分配和管理服务器的情况下执行代码,并根据用户逻辑补充其他AWS服务。 Lambda自动响应各种事件(即触发器),例如通过Amazon API Gateway的HTTP请求、在Amazon S3存储桶或Amazon DynamoDB表中的数据改变; 或者可以通过API调用运行您的代码,使用AWS SDK和在AWS Step Functions中进行状态转换。

Lambda在高可用的计算基础设施上执行代码,并完全负责底层平台的管理,包括服务器和操作系统的维护、资源的分配、自动扩展、代码监控和日志记录。 也就是说,您只需上传您的代码并设置它应该如何以及何时执行。 反过来,服务会负责启动它并确保您的应用程序的高可用性。

什么时候转到Lambda?

AWS Lambda是一种方便的计算平台,适合多种应用场景,当然,前提是您的代码的语言和运行时环境得到该服务的支持。 如果您希望专注于代码和业务逻辑,将服务器维护、资源分配和扩展交给合理成本的第三方提供商,那么您绝对应该转向AWS Lambda。

Lambda非常适合构建应用程序接口,如果将该服务与API Gateway一起使用,可以显著降低成本并更快地进入市场。 使用Lambda函数的方式有多种,以及无服务器架构的组织选项——每个人都能根据设定目标选择合适的方案。

Lambda-ն հնարավորություն է տալիս իրականացնել լայն շրջանակի առաջադրանքներ: Այսպես, CloudWatch-ի աջակցությամբ հնարավոր է ստեղծել սպասվող առաջադրանքներ և ավտոմատացնել առանձին գործընթացներ: Ծառայության օգտագործման բնույթի եւ ինտենսիվության վրա ոչ մի սահմանափակում չկա (հաշվի են առնվում հիշողության ծախսն ու ժամանակը), և ձեզ ոչինչ չի խանգարում պլանավորել լիարժեք միկրոսերվիս աշխատանքի վրա հիմք ընդունելով Lambda-ն:

Այստեղ կարելի է ստեղծել ծառայության ուղղված գործողություններ, որոնք չեն իրականացվում մշտապես: tipical օրինակն է՝ պատկերների մասշտաբավորում: Ա حتی` վերաձևաերիթ համակարգերի դեպքում Lambda-ի գործառույթները չեն կորցնում իրենց գործունեությունը:

Եթ եթե ուզում եք հրաժարվել հաշվեկշիռների ցուցաբերությունից և կառավարման հաշվարկային ռեսուրսներից — փորձեք AWS Lambda; եթե ձեզ պետք չեն ծանր, ռեսուրսով օգտվող հաշվարկներ — նույնպես փորձեք AWS Lambda; եթե ձեր կոդը իրականացվում է ժամանակ առ ժամանակ — ամեն ինչ ճիշտ է, դուք պետք է փորձեք AWS Lambda:

Ապահովություն

Ընդհանուր առմամբ, անվտանգության վերաբերյալ բողոքներ առկա չեն: Վաղեմ բան, քանի որ AWS Lambda-ի կառավարվող իրականացման միջավայրից շատ ներքին գործընթացներ և այս մոդելի իրականացման առանձնահատկություններ քողարկված են օգտագործողի կողմից, որոշ ընդունված ամպային անվտանգության կանոնները կորցնում են արդիականությունը:

Դեռ վանդ հատուկ AWS Lambda-ի անունով, AWS-ը պատասխանատու է ստորև գտնվող ենթակառուցվածքի, առնչվող հիմնական ծառայությունների, օպերացիոն համակարգի և հավելվածների պլատֆորմի կառավարման համար: Ու while the client is responsible for the security of its code, the storage of confidential data, access control to them, as well as to the Lambda service and resources (Identity and Access Management, IAM), including within the functions used.

Եթե խոսքը հատուկ AWS Lambda-ի մասին է, ապա AWS-ը պատասխանատու է ստորև գտնվող ենթակառուցվածքի, առնչվող հիմնական ծառայությունների, օպերացիոն համակարգի և հավելվածների պլատֆորմի կառավարման համար: Իսկ հաճախորդը պատասխանատու է իր կոդի անվտանգության, գաղտնի տվյալների պահպանման, նրանց մուտքի վերահսկման, ինչպես նաև Lambda ծառայության և ռեսուրսների համար (Identity and Access Management, IAM) ` ներառյալ օգտագործվող ֆունկցիաների շրջանակներում:

Ներքևի սխեմայում ներկայացված է ընդհանուր պատասխանատվության մոդելը, որը կիրառելի է AWS Lambda-ի համար: AWS-ի պատասխանատվության շրջանակը ներկա է օղակներ, իսկ հաճախորդի պատասխանատվությունը — կապույտ: Ինչպես տեսնում եք, AWS-ն իր վրա վերցնում է ավելի մեծ պատասխանատվություն ծառայությունում տեղադրված հավելվածների համար:

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

Ընդհանուր պատասխանատվության մոդել, որը կիրառելի է AWS Lambda-ի համար

Lambda-ի իրականացման միջավայր

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

Lambda ծառայությունը բաժանված է երկու մակարդակի: Առաջինը` կառավարման մակարդակը: Википեդիայի համաձայն, կառավարման մակարդակը (control plane) ցանցի այն մասն է, որը պատասխանատու է ազդանշանի տրաֆիկի տեղափոխման և ուղղորդման համար: Այն գլխավոր բաղադրիչն է, որը ընդունում է համաշխարհային որոշումներ միջավայրերի ներկայացման, սպասարկման և բեռնաբաշխման վերաբերյալ: Բացի այդ, կառավարման մակարդակը հանդես է գալիս որպես լուծման մատակարարի ցանցային topology, որը պատասխանատու է տրաֆիկի ուղղորդման և կառավարման համար.

Երկրորդ մակարդակը` տվյալների մակարդակն է: Այն, ինչպես կառավարման մակարդակը, ունի իր սեփական նպատակները: Կառավարման մակարդակը предоставляет 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 հաշիվների համար.

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

AWS Lambda- ում մեկուսացման մոդելը

Execution environment isolation is achieved by various mechanisms. At the highest level, each environment contains separate copies of the following components:

  • Ֆունկցիայի կոդը
  • Յուրաքանչյուր Lambda շերտ, որը ընտրված է ֆունկցիայի համար
  • Ֆունկցիայի գործառնական միջավայրը
  • Amazon Linux պլատֆորմի հիման վրա նվազագույն օգտագործողի տարածքը

Տարբեր իրականացման միջավայրերի մեկուսացման համար օգտագործվում են հետևյալ մեխանիզմները:

  • cgroups — յուրաքանչյուր իրականացման միջավայրի համար CPU, հիշողության, պահեստավորման և ցանցի ռեսուրսների օգտագործման սահմանափակում;
  • namespaces — գործընթացների ID, օգտվողի ID, ցանցային միջերևույթների և այլ ռեսուրսների խմբավորում, որոնցով կառավարվում է Linux-ի պատմությունը: Յուրաքանչյուր իրականացման միջավայր աշխատում է իր անունների տարածքում;
  • seccomp-bpf — սահմանափակում այն համակարգային զանգվածները, որ որոնք կարելի է օգտագործել իրականացման միջավայրում;
  • iptables և մուտքի աղյուսակները — միջավայրերի մեկուսացում մեկը մյուսից;
  • chroot — սահմանափակ մուտք դեպի ստորակետային ֆայլային համակարգ:

AWS-ի ծրագիրների սեփական տեխնոլոգիաների հետ համատեղ, նշված մեխանիզմները ապահովում են վստահելի միջավայրերի մեկուսացում: Այսպես մեկուսացված միջավայրերը չեն կարող մուտք գործել այլ միջավայրերի տվյալներ և փոփոխել դրանք.

Ցանկացած AWS հաշվի մի քանի իրականացման միջավայրեր կարող են գործել մեկ microVM-ում, սակայն microVM-ները չպետք է կիսվեն տարբեր AWS հաշիվների միջև: AWS Lambda-ում microVM-ների մեկուսացման համար օգտագործվում են ընդամենը երկու մեխանիզմներ՝ EC2 օրինակներ և Firecracker: EC2 մոդելների վրա հիմնված հյուրերի մեկուսացումը Lambda-ում կիրառվում է 2015 թվականից: Firecracker-ը նոր բաց աղբյուրի hypervisor է, որը հատուկ մշակվել է AWS-ի կողմից առանց սերվերային գործառույթների համար և ներկայացվել է 2018 թվականին: Այն ֆիզիկական սարքը, որի վրա աշխատում են microVM-ները, համատեղ օգտագործվում է տարբեր հաշիվների աշխատանքով:

Միջավայրերի և գործընթացների վիճակի պահպանություն

Չնայած Lambda-ի իրականացման միջավայրերըunikալ են տարբեր ֆունկցիաների համար, կարելի է կրկին կանչել նույն ֆունկցիան, այսինքն, իրականացման միջավայրը կարող է գոյություն ունենալ մի քանի ժամ, նախքան ոչնչացումը:

Յուրաքանչյուր Lambda իրականացման միջավայրում նաև ունի գրանցելու թույլատրող ֆայլային համակարգ, որը հասանելի է \/tmp կատալոգի միջոցով: Այդ բովանդակությանը չի կարելի մուտք գործել այլ իրականացման միջավայրերից: Ինչ վերաբերում է գործընթացների վիճակի պահպանմանը, \/tmp-ում գրանցված ֆայլերը գոյություն ունեն իրականացման միջավայրի ողջ կյանքի ընթացքում: Սա հնարավորություն է տալիս կուտակել մի քանի կանչերի արդյունքները, ինչը հատկապես օգտակար է ինտենսիվ գործողությունների համար, ինչպիսիք են մեքենայական ուսուցման մոդելների ներբեռնման ժամանակ:

Տվյալների փոխանցում կանչերի ընթացքում

Invoke API-ին կարելի է կիրառել երկու ռեժիմներում՝ իրադարձային ռեժիմում և «շտապ — պատասխան» ռեժիմում: Իրադարձային ռեժիմում կանչը հերթի մեջ է ավելացվում հետագա կատարման համար: «շտապ — պատասխան» ռեժիմում ֆունկցիան անմիջապես կանչվում է տրամադրված օգտակար բեռով, և ապա վերադարձվում է պատասխան: Երկու դեպքում էլ ֆունկցիան գործարկվում է Lambda միջավայրում, սակայն տարբեր ճանապարհներով օգտակար բեռի համար.

Մեջ հրավիրում `պատասխան - հարց` ձևաչափի, բեռը ստացվում է API-ներից, ինչպիսիք են AWS API Gateway կամ AWS SDK, բեռնաթափիչից, ապա `Lambda Invocation Service`-ից: Վերջինը որոշում է ֆունկցիայի կատարումների համապատասխան միջավայրը և փոխանցում այնտեղ բեռը՝ հայտը ավարտելու համար: Բեռնաթափիչը ստանում է TLS-պաշտպանություն ունեցող երթևեկությունը ինտերնետում: Lambda ծառայության ներսում երթևեկությունը, բեռնաթափիչից հետ, անցնում է AWS-ի որոշակի տարածաշրջանի ներքին VPC-ի միջով։

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

AWS Lambda-ով հրավիրումների վերամոդելումը: «Պատասխան - հարց» ռեժիմը

Առ Ereignisներին հիմնված հրամանները կարող են կատարվել անմիջապես կամ ավելացվել հերթի: Որոշ դեպքերում հերթը իրականացվում է Amazon SQS (Amazon Simple Queue Service) ծառայության միջոցով, որը փոխանցում է հրամանները Lambda Invocation Service-ին ներսի Որպես հերթակատարող գործընթացի (poller) միջոցով: Խմբագրվող երթևեկությունը TLS-ով պաշտպանված է, սակայն տվյալների լրացուցիչ ծածկագրումը, որոնք պահվում են Amazon SQS-ում, նախատեսված չէ։

Ereignisներին հիմնված հրամանները չեն վերադարձնում պատասխաններ՝ ցանկացած պատասխանող տեղեկատվություն Lambda Worker-ը պարզապես անտեսում է: Amazon S3, Amazon SNS, CloudWatch և այլ աղբյուրներից հրամանները կառավարման ծրագրում անցնում են իրադարձության ռեժիմով: 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

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster