Запускать лямбду на каждой записи DynamoDb по расписанию? - PullRequest
0 голосов
/ 29 января 2019

Есть ли способ запустить лямбду для каждой записи таблицы DynamoDb?

У меня есть таблица динамо с именем, фамилией, адресом электронной почты и лямбда, которая принимает имя , фамилия, адрес электронной почты в качестве параметров.Я пытаюсь настроить среду таким образом, чтобы Lambda каждый день автоматически запускалась для каждого значения, которое она находит в Dynamo;не могу сделать все записи в одной лямбде, так как она не будет масштабироваться (будет превышено время ожидания после добавления новых пользователей).

У меня в настоящее время настроено правило CloudWatch, которое запускает лямбда по расписанию, но мне пришлосьвручную добавить параметры в триггер из «Динамо» - он не автоматический и не динамический / не подключен к динамо.

-

Другой вариант - запускать лямбду каждый раз, когда запись DynamoDbобновлено ... Я мог бы обновлять все записи еженедельно, а затем при обновлении Lambda будет срабатывать, но я тоже не знаю, возможно ли это.

Буду признателен за более глубокое понимание любого из этих подходов.!

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Поскольку ограничивающим фактором являются лямбда-тайм-ауты, запустите несколько лямбда-выражений, используя пошаговые функции.Выполните постраничное сканирование таблицы;каждая лямбда вернет LastEvaluatedKey и передаст его следующему вызову для следующей страницы.

0 голосов
/ 29 января 2019

Я думаю, что ваш лучший вариант, как вы и указали, запускать лямбда каждый раз при обновлении записи DynamoDB.Это возможно благодаря потокам DynamoDB .

Потоки - это упорядоченная запись изменений, которые происходят с таблицей.Они могут вызывать лямбду, поэтому она автоматическая (однако помните, что изменение появляется только один раз в потоке, настройте DLQ на случай, если ваша лямбда выйдет из строя).Этот подход хорошо масштабируется и также достаточно эволюционируем.При необходимости вы можете передать события из потока в SQS или Kinesis, разветвить и т. Д., В зависимости от требований.

0 голосов
/ 29 января 2019

Есть ли способ запустить лямбду для каждой записи таблицы DynamoDb?

В вашем конкретном случае все, что вам нужно сделать, - это обработать каждую строку таблицы DynamoDB в масштабируемоймода, я бы попробовал пойти с разветвлением Lambda -> SQS -> Lambdas следующим образом:

  1. Установить правило событий CloudWatch, которое запускается по расписанию.Пусть у этого триггера будет dispatch лямбда-функция.

  2. Задача dispatch лямбда-функции заключается в чтении всех записей в вашей таблице DynamoDB и записи сообщений в очередь jobs SQS.по одному на элемент DynamoDB.

  3. Создайте лямбда-функцию worker, которая делает все, что вы хотите, с любым данным элементом из таблицы DynamoDB.

  4. Подключите worker Lambda к очереди jobs SQS, чтобы его экземпляр отправлялся всякий раз, когда что-то помещалось в очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...