Как справиться с несколькими разветвлениями с помощью AWS Lambdas - PullRequest
0 голосов
/ 05 октября 2018

У меня есть одна лямбда AWS, которая запускает (события SNS) несколько лямбд, которые, в свою очередь, запускают (события SNS) несколько лямбд.Все эти лямбды записывают файлы на S3, и мне нужно знать, когда все файлы были записаны.Будет еще одна лямбда, которая отправит окончательное сообщение SNS, содержащее все ссылки на созданные файлы.Количество разветвлений во втором наборе лямбд неизвестно, так как зависит от первого разветвления.

Если бы это было разовое разложение, я бы знал, сколько файлов нужно искать, но как этоявляется двухэтапным разветвлением, я не уверен относительно того, как отслеживать все файлы.Кто-нибудь имел дело с этим раньше?Спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

Я бы создал таблицу DynamoDB для отслеживания этого процесса.Создайте одну запись в таблице, когда начальная лямбда-функция запускается, с уникальным идентификатором, например, UUID, или чем-то еще, если у вас еще нет уникального идентификатора для этого процесса.Также добавьте этот уникальный идентификатор к сообщениям SNS, это будет ключ, используемый для всех обновлений, выполняемых другими процессами.Также добавьте splitters_invoked к записи, когда она создается первым процессом с числом вызываемых функций разделителя второго уровня, и свойством splitters_complete, установленным в 0.

Внутри разделителя второго уровняФункции Вы можете использовать функцию DynamoDB Условные обновления , чтобы обновить запись DynamoDB со списком файлов, созданных с их местоположениями S3.Функции разделителя второго уровня также будут использовать функцию DynamoDB Atomic Counters , чтобы обновить счетчик splitters_complete непосредственно перед их выходом.

На уровне "process" каждый из этих вызовов будет выполнятьдругое Условное обновление записи DynamoDB, помечающей отдельный файл, который они только что обработали, как завершенный.

Наконец, настройте потоки DynamoDB для запуска другой функции Lambda.Эта лямбда-функция будет проверять два условия: splitters_complete равно splitters_invoked, и все файлы в списке файлов помечаются как «выполненные».Тогда он будет знать, что он может выполнить последний шаг в вашем процессе.


В качестве альтернативы, если вы не хотите сохранять список расположений файлов S3 в таблице DynamoDB, просто используйте атомарные счетчики дляэто также один счетчик для общего числа файлов, созданных разделителями второго уровня, и другой счетчик для функций обработки файлов.

...