Что такое lambda и как она работает
Lambda-функции в Python с их синтаксисом и примерами
1. Lambda-функции
В этом уроке мы изучим, что из себя представляют lambda-функции в Python с их синтаксисом и примерами. Кроме того, мы рассмотрим, как и когда следует объявлять lambda-функции, а также как их можно использовать вместе со встроенными функциями Python такими как reduce(), map() и filter().
Когда мы создаем функции в Python, мы всегда используем ключевое слово def. При этом, делая так, мы назначаем им определенное имя. Но иногда у нас может возникнуть потребность объявить функцию анонимно или мы можем захотеть использовать функцию только один раз. В таком случае определение функции может показаться лишним, и как раз здесь нам придут на помощь lambda-функции.
2. Что собой представляет lambda-функция в Python?
Lambda-функция позволяет нам определять функцию анонимно. Стоит отметить, что она является именно функцией, а не оператором. То есть лямбда-функция возвращает значение, и у нее есть неявный оператор return. Ниже приведен синтаксис lambda-функций в Python.
Lambda-функция, возвращает свое значение в том месте, в котором вы его объявляете.
Как объявить lambda-функцию?
Для того, чтобы объявить lambda-функцию, используйте ключевое слово lambda.
Вы можете назначить lambda-функцию переменной, если хотите использовать ее в дальнейшем.
В этом примере e является аргументом, а e-2 выражением.
После назначения переменной, вы можете вызвать данную lambda-функцию, как и любую другую функцию в Python. Попробуем это сделать, взяв в качестве аргумента целое число 1.
4. Чем на самом деле является выражение lambda-функции в Python
Как мы смогли убедиться, lambda в Python возвращает выражение. Но у нас может появится вопрос, что же собой представляет выражение? В общем смысле, выражение — это последовательность букв символов и чисел, возвращающая определенное значение. Например, к выражениям можно отнести следующие записи.
Но при этом, такие записи как назначение не могут быть определены как выражение для lambda-функции, так как они ничего не возвращают даже None.
5. Когда лучше использовать lambda-функцию в Python?
Как мы видели ранее, lambda-функция в Python может принимать несколько аргументов и одно выражение. Причем значение этого выражения как раз и есть то, что возвращается при вызове функции. Использование lambda-функций не является обязательным, но может оказаться полезным в определенных ситуациях. Таких, например как:
1. Когда у вас есть только одно выражение для исполнения в функции
Допустим, мы хотим для функции printhello() запрограммировать вывод на экран слова «Привет». Тогда в теле функции у нас будет всего одна строчка:
Теперь давайте сделаем то же самое, используя lambda-функцию.
Заметьте, что здесь мы не использовали никаких аргументов. Но вернемся и более подробно рассмотрим мы этот момент в дальнейшем, а пока давайте обратимся к еще одному примеру.
От редакции Pythonist. Рекомендуем статью «Функции и их аргументы в Python 3».
2. Когда нужно вызвать код только один раз
Одной из основных причин выделения функций из остального кода является необходимость в их многократном использовании. Но если вам нужно использовать какой-либо код не более чем один раз, вы можете прибегнуть к lambda-функциям, не объявляя для этого стандартную функцию.
6. Значения аргументов по умолчанию для lambda-функции в Python
В Python, как впрочем и в других языках, например, C++, мы можем задавать значения аргументов по умолчанию. Но как нам это может пригодиться? Допустим функция func1() принимает 2 параметра a и b. Что произойдет если пользователь программы передаст лишь один из этих параметров или даже ни одного? Как раз для того, чтобы избежать возможной ошибки, или облегчить работу пользователя, вы можете задать вашим параметрам значения по умолчанию.
Давайте рассмотрим пример.
Здесь значениями по умолчанию для a и b являются соответственно 2 и 3. Для того, чтобы задать значения по умолчанию для lambda-функции, запись будет следующей:
7. Синтаксис lambda-функции в Python
Мы уже посмотрели, как объявляетcя lambda-функция в Python, но, как и все, что состоит из частей, ее объявление предполагает различные варианты. Так давайте же посмотрим, что мы можем, а что не можем делать с lambda-функцией.
a. Аргументы в Python
Одна или несколько переменных, присутствующих в выражении могут быть объявлены заранее. Но если речь идет об аргументах, то их значение должно быть либо задано по умолчанию, либо передано при вызове функции.
Здесь отсутствуют значения и a и b
У переменной a все еще отсутствует значение
Наконец здесь, так как нет аргументов с отсутствующим значением, все отлично работает.
От редакции Pythonist. Рекомендуем статью «Обрабатываем исключения в Python: try и except».
b. Пропускаем аргументы
Указывать аргументы в lambda-функции не обязательно. Она отлично работает и без них.
Во втором примере давайте в качестве выражения используем функцию print()
Вывод напрашивается сам собой, — пропуск аргументов в lambda-функции является вполне приемлемым.
c. Пропускаем выражение
Теперь давайте попробуем запустить нашу функцию без выражения.
Ясное дело ничего не сработало, да и почему оно должно было сработать, если значение выражение это как раз и есть то, что функция возвращает? Без выражения функция не имеет никакого смысла.
8. Совместное использование Lambda-функции со встроенными функциями Python
Существуют некоторые встроенные функции в Python, такие например как filter() или map(), в которых мы можем использовать lambda-функции, для выполнения определенных преобразований. Давайте же рассмотрим их поподробнее.
Для начала возьмем список под названием numbers
затем возьмем lambda-функцию следующего содержания.
a. filter()
Функция filter() принимает два параметра — функцию и список для обработки. В нашем примере мы также применим функцию list(), чтобы преобразовать объект filter в список.
Вот окончательный код, который нам нужен, и можете сами попробовать догадаться, как он работает. Итак, он берет список numbers, и отфильтровывает все элементы из него, которые не делятся нацело на 3. При этом фильтрация никак не изменяет изначальный список.
От редакции Pythonist. Рекомендуем статью «Списки в Python: изменяемость, доступ к элементам».
b. map()
Функция map() в отличие от функции filter() возвращает значение выражения для каждого элемента в списке. Давайте посмотрим как это работает на уже знакомом нам списке numbers.
c. reduce()
Наконец функция reduce() принимает два параметра — функцию и список. Сперва она применяет стоящую первым аргументом функцию для двух начальных элементов списка, а затем использует в качестве аргументов этой функции полученное значение вместе со следующим элементом списка и так до тех пор, пока весь список не будет пройден, а итоговое значение не будет возвращено. Для того, чтобы использовать reduce(), вы должны сначала импортировать ее из модуля functools.
Давайте посмотрим как получился такой результат.
Таким образом, на выходе у нас получается 5.
Давайте теперь возьмем другой пример.
Если проделать то же самое для x+y, то у вас получится 55.
9. Заключение
На этом, пожалуй, все. В той статье мы с вами сперва изучили, чем является lambda-функция в Python, рассмотрели ее синтаксис, а также выяснили как ее создать. Далее мы рассмотрели, что из себя представляет выражение, а также как передать аргументы по умолчанию в выражение lambda. Наконец мы попробовали использовать lambda-функцию внутри трех встроенных функций filter(), map(), и reduce() и выяснили, что lambda в сравнении с обычными функциями имеет ряд преимуществ.
Если у вас появились какие-то вопросы, пожалуйста, оставляйте их в комментариях.
Что такое lambda и как она работает
В этой статье мы поговорим о лямбда-функциях, их применении в Python, их достоинствах и особенностях использования.
Что такое Lambda-функции
Небольшие функции в пару строк кода можно заменить анонимной функцией — lambda [1], не имеющей уникального идентификатора. Python предназначен для того, чтобы писать лаконичный код, который мы обсуждали тут. И lambda-функции отлично помогают в этом.
Например, требуется функция, которая считает квадратное уравнение. Можно ее написать через def :
А можно написать через анонимную лямбда-функцию:
Заметим, передача аргументов осуществляется без скобок.
В Python все является объектами, в том числе и функции. Поэтому их можно передавать в качестве аргументов и возвращать их. Рассмотрим подобный пример:
Здесь функция calculate принимает n и возвращает лямбда-функцию, принимающая два аргумента z и y через запятую и вычисляющая соответствующее выражение.
Применение lambda в sort, filter, map, reduce
На практике сортировка – одна из самых популярных манипуляций с данными. Например, имеется список слов, которые нужно отсортировать по последней букве. Для этого нужно указать аргумент key – функцию, с помощью которой будет происходить сравнение элементов. Этой функцией может служить наша lambda:
Вторым применением lamda-функций является фильтрация различных структур данных. Например, необходимо исключить все четные элементы в списке. Для этого имеется встроенная в Python функция filter :
filter принимает первым аргументом функцию, через которую осуществляется фильтрация элементов. В данном случае мы использовали анонимную функцию.
Третий пример – это использование lambda-функций в отображениях нового пространства. Требуется из заданного списка чисел получить список кубов этих чисел. С помощью map это будет выглядеть так:
map принимает первым аргументом функцию, отображающую список в новом пространстве. Здесь была использована анонимная функция, которая возводит элемент в 3-ю степень.
Стоит отметить, не всегда lambda-функции являются уместными из-за их неочевидного интерфейса. Например, filter и map могут быть переписаны через List comprehension, о котором мы говорили тут. Как использовать lambda-функции и List comprehension в реальных проектах Data Science, вы узнаете на наших практических курсах по Python в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.
AWS Lambda — теория, знакомство
Краткий экскурс в AWS Lambda
Что это?
AWS Lambda: это вычислительный сервис, который позволяет запускать код практически для любого типа приложения или серверной службы — и все это без необходимости администрирования. AWS Lambda выполняет все администрирование за вас, включая обслуживание сервера и операционной системы, выделение ресурсов и автоматическое масштабирование, мониторинг кода и ведение журнала. Все, что вам нужно сделать — это предоставить свой код на одном из языков, которые поддерживает AWS Lambda.
Зачем ее использовать?
У этого подхода есть и свои минусы, вы не можете управлять операционной системой на который выполняется код, не можете контролировать ЦП, память и ресурсы. Всем этим занимается AWS.
Все что вы можете, это выбрать язык, из поддерживаемых AWS Lambda.
Что могёт?
Ниже представлен краткий перечень основных функций AWS Lambda. Далее все рассмотрим по порядку.
1. Triggers
Triggers — это «возбудители» лямбды. В некотором роде лямбду можно сравнить с PHP, в том плане, что для нас она выполняется и умирает. Далее мы подробно рассмотрим механизм работы. Пока нужно понимать что лямбда, это одна функция, которая выполняется по запросу из триггеров.
Ниже список всех возможных триггеров:
API Gateway
AWS IoT
Alexa Skills Kit
Alexa Smart Home
Application Load Balancer
CloudFront
CloudWatch Events
CloudWatch Logs
CodeCommit
Cognito Sync Trigger
DynamoDB
Kinesis
S3
SNS
SQS
Для каждого из них вам нужно будет настроить уникальные параметры, которые доступны для этих триггеров. Также вы можете настроить несколько триггеров на одну лямбду. От типа триггера зависит, будет лямбда выполняться синхронно или асинхронно.
Notice: Обратите внимание, что лямбду можно заставить выполниться, так и с помощью AWS CLI, AWS SDK в ручном режиме, передавая все необходимые параметры. В том числе будет она выполняться синхронно или нет
Давайте разберем на примере:
1. API Gateway — позволяет дергать лямбду по http запросу и требует вернуть результат пользователю. Такая операция не может выполняться асинхронно, т.к. требует ответа. Для синхронных операций некоторые функции недоступны.
2. SQS — к примеру, если наша лямбда обрабатывает сообщения от SQS, возвращать результат никуда не нужно и она может выполняться асинхронно. При асинхронном выполнении появляется несколько новых возможностей, к примеру, мы можем настроить повторное выполнение в случае ошибки, или отправлять такие запросы дальше в «мертвую» очередь SQS.
2. Permissions to AWS Services
Это сервисы AWS к которым лямбда имеет доступ по умолчанию. Что это значит? В функции которую вы будете писать всегда можно подключить AWS SDK и без ключей или каких либо параметров авторизации вы сможете использовать доступные сервисы. Все доступные сервисы вы определяете в IAM Role которую используете для этой лямбды.
Для каждого используемого языка есть своя SDK, которая умеет общаться с основными сервисами AWS.
Notice: для каждой лямбды вы настраиваете IAM Role от лица который будет запускаться лямбда
3. VPC
Вы можете настроить виртуальную сеть для вашей лямбды, например для безопасного подключения к RDS.
4. Online Editor
Также AWS Lambda предоставляет возможность редактировать код вашей функции напрямую с интерфейса в вашем браузере.
5. Logging
Все запросы на лямбду логируются в CloudWatch, туда же записываются данные по времени выполнения и памяти, эти данные могут очень помочь для установки лимитов. Также в коде есть возможность логировать собственные данные(к примеру в Node.js через console.log).
Дополнительно вы всегда можете увидеть статистику по использованию лямбды на вкладке Monitoring
6. Environment Variables
Notice: Обратите внимание, что есть список заранее подготовленных переменных окружения
7. Code
Теперь самая интересная часть, сама по себе лямбда состоит из нескольких частей.
1. Layers — нижний слой. Он не обязателен, но если для использования лямбды вам нужно добавить какие-то библиотеки, то их нужно класть отдельно от основного кода, так вы сильно экономите на объеме основного кода и быстродействии самой функции.
Слои в AWS Lambda чем-то похожи на слои в докере, в том плане, что они перманенты относительно функции, и их нужно изменять отдельно. Также их можно переиспользовать в других лямбдах.
2. Function Environment — в коде должна обязательно находится функция, которая непосредственно будет выполняться при каждом запуске лямбды(Handler). О ней ниже. А перед ней находится ее окружение, которое мы задаем. Дело в том, что управление ресурсами происходит таким образом, что это окружение, хранится отдельно от функции какое-то время после ее завершения. И при следующем старте, возобновляется, не тратя на инициализацию время и ресурсы. Таким образом, все что возможно, нужно проинициализировать до самой функции, к примеру конфигурации, подключение библиотек и т.п.
3. Handler — непосредственно сам по себе выполняемый код, в зависимости от языка, определяется по разному. Для примера возьмем Node.Js. Для того что бы ваш код выполнился, нужно:
Ниже пример кода, постараюсь описать что происходит там:
8. Версионирование
Сервис поддерживает удобное версионирование. Вкратце мы каждой загруженной копии можем выдавать версию. И добавлять алиасы, которые указывают на какую-то версию. Как это работает? Смотрите на схемку ниже
И так, теперь давайте разберемся что нужно сделать, чтобы получить то — что мы видим на диаграмме
Состояние первое
Notice: вот тут описано как работать с алиасами на практике. Практическая часть по lambda будет в следующей статье вместе с SQS
И так, сейчас мы получили что-то непонятное, по сути 3 алиаса ссылаются на одну версию, непонятно. Но ничего, все по порядку
Второе состояние
Третье состояние
Теперь, чтобы получить третье состояние, нам достаточно просто добавить еще пару строк в наш код и будет третья версия нашей лямбды. И «Dev» будет смотреть теперь на нее.
Резюмируем
И так, что мы имеем?
Маленькую. Быструю. Относительно дешевую. Автомасштабируемую. Версионируемую. Функцию.
В этой статье мы рассмотрели только теоретическую часть, знакомство с этим сервисом. Так же как и с SQS в прошлой статье. В следующей статье мы рассмотрим как эти два сервиса взаимодействуют друг с другом и в практической форме научимся их настраивать, использовать.
Детальный разбор AWS Lambda
Перевод статьи подготовлен специально для студентов курса «Облачные сервисы». Интересно развиваться в данном направлении? Смотрите мастер-класс Егора Зуева (TeamLead в компании InBit) «AWS EC2 сервис» и присоединяйтесь к ближайшей группе курса: старт 26 сентября.
Все больше людей переходят на 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
Среда выполнения Lambda
Основное преимущество Lambda заключается в том, что, выполняя функцию от вашего имени, сервис сам выделяет необходимые ресурсы. Вы можете не тратить время и силы на администрирование систем и сосредоточиться на бизнес-логике и написании кода.
Сервис Lambda разделен на две плоскости. Первая — плоскость управления. Согласно Википедии, плоскость управления (control plane) — это часть сети, отвечающая за транспортировку сигнального трафика и маршрутизацию. Она является главным компонентом, принимающим глобальные решения о выделении, обслуживании и распределении рабочих нагрузок. Кроме того, плоскость управления выступает в роли сетевой топологии поставщика решения, отвечающей за маршрутизацию трафика и управление им.
Вторая плоскость — плоскость данных. У нее, как и у плоскости управления, свои задачи. Плоскость управления предоставляет API для управления функциями (CreateFunction, UpdateFunctionCode) и контролирует взаимодействие Lambda с другими сервисами AWS. Плоскость данных управляет API вызовов (Invoke API), который запускает функции Lambda. После вызова функции плоскость управления выделяет либо выбирает существующую, заранее подготовленную для этой функции среду выполнения, а затем выполняет в ней код.
Как все это работает и как сервис будет выполнять ваши функции?
Каждая функция работает в одной или нескольких выделенных средах, которые существуют лишь в течение жизненного цикла этой функции, а затем уничтожаются. В каждой среде одновременно выполняется лишь один вызов, но она используется повторно, если возникает множество серийных вызовов одной и той же функции. Все среды выполнения работают на виртуальных машинах с аппаратной виртуализацией — на так называемых microVM. Каждая microVM назначается конкретной учетной записи AWS и может многократно использоваться средами для выполнения различных функций в этой учетной записи. MicroVM упаковываются в структурные блоки аппаратной платформы Lambda Worker, которой владеет и управляет AWS. Одна и та же среда выполнения не может использоваться разными функциями, равно как microVM уникальны для разных учетных записей AWS.
Модель изоляции в AWS Lambda
Изоляция сред выполнения реализована с помощью нескольких механизмов. На высшем уровне каждой среды присутствуют отдельные копии следующих компонентов:
Для изоляции разных сред выполнения применяются следующие механизмы:
В сочетании с проприетарными технологиями изоляции 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: режим «запрос — ответ»
Вызовы по событиям могут выполняться незамедлительно либо добавляться в очередь. В некоторых случаях очередь реализована с помощью сервиса 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 — возможно, он как нельзя лучше подходит для вашей задачи.