Подробен анализ на AWS Lambda

Преводът на статията е подготвен специално за студентите от курса «Облачни услуги». Интересно ли е да се развивате в това направление? Гледайте майсторския клас на Егор Зуев (TeamLead в компанията InBit) «AWS EC2 услуга» и се присъединете към най-близката група от курса: стартиране на 26 септември.

Подробен анализ на AWS Lambda

Все повече хора преминават на AWS Lambda заради мащабируемостта, производителността, икономията и възможността да обработват милиони и дори трилиони заявки на месец. За целта не е нужно да управлявате инфраструктурата, на която работи услугата. Автоматичното мащабиране позволява обслужването на хиляди едновременни заявки в секунда. Мисля, че 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 е разделена на две плоскости. Първата — плоскост на управление. Според Уикипедия, плоскостта на управление (control plane) е част от мрежата, отговаряща за транспортирането на сигнален трафик и маршрутизация. Тя е основен компонент, който взема глобални решения за предоставяне, поддръжка и разпределение на работни натоварвания. Освен това, плоскостта на управление играе роля в мрежовата топология на доставчика на решението, отговаряща за маршрутизацията и управлението на трафика.

Втората плоскост — плоскост на данни. Както плоскостта на управление, тя има свои задачи. Плоскостта на управление предоставя 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 акаунти.

Подробен анализ на AWS Lambda

Модел за изолация в AWS Lambda

Изолацията на средите за изпълнение се реализира чрез няколко механизма. На високо ниво всяка среда притежава отделни копия на следните компоненти:

  • Код на функцията
  • Всички слоеве на Lambda, избрани за функцията
  • Среда за изпълнение на функцията
  • Минимално потребителско пространство на база Amazon Linux

За изолацията на различните среди за изпълнение се прилагат следните механизми:

  • cgroups — ограничение на достъпа до ресурси на ЦП, памет, пропускна способност на дисковете и мрежата за всяка среда за изпълнение;
  • namespaces — групиране на идентификатори на процеси, идентификатори на потребителите, мрежови интерфейси и други ресурси, управлявани от ядрото на Linux. Всяка среда за изпълнение работи в собственото си пространство на имената;
  • seccomp-bpf — ограничение на системните повиквания, които могат да се използват в средата за изпълнение;
  • iptables и маршрутизиращи таблици — изолация между средите за изпълнение;
  • chroot — предоставяне на ограничен достъп до подлежащата файлова система.

В комбинация с собствените технологии за изолация на AWS, посочените механизми гарантират надежно разделение на изпълнителните среди. Изолираните по този начин среди не могат да получават достъп до данни от други среди или да ги променят.

Въпреки че няколко изпълнителни среди в една AWS сметка могат да работят на една microVM, при никакви обстоятелства microVM не могат да се споделят между различни AWS сметки. За изолацията на microVM в AWS Lambda се използват само два механизма: инстанции EC2 и Firecracker. Изолацията на гости (guest isolation) в Lambda на базата на инстанции 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: режим «запрос — ответ»

Вызовы по событиям могут выполняться незамедлительно или добавляться в очередь. В некоторых случаях очередь реализуется с помощью Amazon SQS (Amazon Simple Queue Service), который передает вызовы в службу выполнения вызовов Lambda через внутренний процесс опроса (poller). Передаваемый трафик защищен TLS, однако дополнительное шифрование данных, хранящихся в Amazon SQS, не предусмотрено.

Вызовы по событиям не возвращают ответы — любое ответное сообщение от Lambda Worker просто игнорируется. Вызовы, основанные на событиях от Amazon S3, Amazon SNS, CloudWatch и других источников, обрабатываются сервисом Lambda в режиме событий. Вызовы из потоков 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