Детальний аналіз 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 — поєднання груп ID процесів, ID користувачів, мережевих інтерфейсів та інших ресурсів, якими управляє ядро ​​Linux. Кожне середовище виконання працює у своєму просторі імен;
  • seccomp-bpf — обмеження системних викликів, які можна використовувати серед виконання;
  • iptables та routing tables — ізоляція середовищ виконання між собою;
  • 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
Ви зможете відстежувати зміни конфігурації функцій Lambda (включаючи їх видалення) та середовищ виконання, тегів, імен обробників, розміру коду, розподілу пам'яті, налаштувань часу очікування та параметрів паралелізму, а також ролі виконання Lambda IAM, підмережі та прив'язки груп безпеки.

Висновок

AWS Lambda пропонує потужний набір інструментів для створення безпечних та масштабованих програм. Багато методів безпеки та відповідності нормативним вимогам в AWS Lambda не відрізняються від тих, що використовуються в інших сервісах AWS, хоча є винятки. Станом на березень 2019 року Lambda відповідає вимогам SOC 1, SOC 2, SOC 3, PCI DSS, закону США про спадкоємність та підзвітність медичного страхування (HIPAA) та іншим нормативам. Тому, коли подумаєте про реалізацію чергової програми, розгляньте сервіс AWS Lambda — можливо, він якнайкраще підходить для вашого завдання.

Джерело: habr.com

Додати коментар або відгук