Lambda: Event Source Mapper Flashcards
Какие сервисы вызывают Лямбду через Event Source Mapping?
На какие группы они делятся?
Как их можно общим словом назвать в данном контексте?
Делятся на две категории
- STREAMS
- Kinesis Data Streams
- DynamoDB Streams
- QUEUES
- SQS и SQS FIFO
Event Sources
Как происходит взаимодействие Event Source + Lambda + Event Source Mapper?
Кто обращается к кому?
Внутренний Лямбда event-source-mapper pull’ит (стягивает) записи из источника (SQS, Kinesis Data Stream, etc).
Когда записи появляются во внутреннем event-source-mapper’е, то он СИНХРОННО вызывает Лямбду через EVENT BATCH.
Как устроен Event Source Mapping для “Streams”
- Внутренний Лямбда
event-source-mapper
создаёт … для каждого …
Тогда event’ы будут обрабатываться согласно … - Можно поставить …
- в самое начало …
- в указанный момент времени (timestamp)
- в то место, где он остановился в прошлый раз
- Item’ы … из Stream’а после их обработки.
Так что могут быть ….
итератор
ШАРДА
их порядку в рамках КАЖДОГО ШАРДАитератор
шарда
НЕ удаляются
прочитаны другими consumer’ами
Use Cases для Event Source Mapping (Streams)
Какие они? Как нужно настраивать обработку в каждом случае? Для каких целей?
Если трафик НИЗКИЙ - установить долгий Batch Window (секунды), чтобы собирать побольше record’ов перед обработкой
и оптимизировать COST
Если трафик ВЫСОКИЙ настроить параллельную обработку
несколькими Лямбдами на уровне Шарда (т.е. одного Шарда),
и оптимизировать PERFORMANCE
Сколько Лямбд одновременно могут обрабатывать один Шард?
Количество одновременных обработчиков (Лямбда функций) при параллельной обработке одного Kinesis Data Stream шарда - максимум 10 обработчиков на шард.
Как устроен Event Source Mapping для “Queues”
- Внутренний Лямбда
event-source-mapper
… SQS, используя … - Можно указать размер …
- Можно указать … (количество времени в секундах, которое …)
- Item’ы … из SQS очереди после ….
- Лямбда умеет … (запускать параллельно …).
- Если во время обработки произошла ошибка, то … в очередь …. А значит они в дальнейшем ….
poll
’итLong Polling
БАТЧА (сколько сообщений)Batch Window
мы ждём, пока наполнится батч
удаляются
их (успешной) обработки
масштабироваться
несколько одинаковых Лямбд
item’ы батча возвращаются
ПО-ОТДЕЛЬНОСТИ (индивидуально)
могут быть обработаны в другом порядке
Может ли Лямбда “задублировать” event при event-source-mapping’е из SQS? При каких условиях?
При использовании SQS Event Source Mapping есть вероятность повторной обработки одного и того же item’а (даже если никаких ошибок в обработке не произошло)
Чтобы Лямбда имела права читать сообщения из SQS …
Лямбде нужно дать LambdaSQSQueueExecutionRole
Где можно создать Dead Letter Queue при event-source-mapping’е из SQS?
- Отдельно в SQS
- В самом Лямбда сервисе
- Можно вообще выбрать Destination вместо DLQ
В чём отличие использования Destinations для разных выполнений Лямбды?
- Синхронно - нет смысла и возможности использовать Destination / DLQ
- Ассинхронно - в destination можно слать успешные / failed event’ы
- Event Source Mapping - в destination можно слать ТОЛЬКО FAILED event’ы (discarded batches)
Как происходит масштабирование Лямбды для SQS FIFO?
Сколько можно запустить Лямбд? Каков порядок обработки?
Для соблюдения порядка FIFO очереди
количество одновременных Лямбда функций
будет равно количеству активных Message Groups.
Сообщения в одной Message Group’е будут обработаны упорядоченно.
Как происходит масштабирование Лямбды для SQS Standard?
Сколько можно запустить Лямбд? Каков порядок обработки?
Для обычной SQS очереди
порядок обработки сообщений Лямбда НЕ соблюдает.
Масштабироваться будет ASAP.
- До 60-ти
новых единиц Лямбда функции в минуту.
- До 1000
батчей одновременно.