Запускать лямбду на каждой записи DynamoDb по расписанию?
Есть ли способ запустить лямбду на каждой записи таблицы DynamoDb?
У меня есть таблица "Динамо" с именем, фамилией, адресом электронной почты и лямбда, которая принимает имя, фамилию, адрес электронной почты в качестве параметров. Я пытаюсь настроить среду таким образом, чтобы Lambda каждый день автоматически запускалась для каждого значения, которое она находит в Dynamo; не может сделать все записи в одной лямбде, так как она не будет масштабироваться (истечет время ожидания после добавления новых пользователей).
В настоящее время у меня настроено правило CloudWatch, которое запускает лямбду по расписанию, но мне пришлось вручную добавлять параметры в триггер из "Динамо" - он не автоматический и не динамический / не подключен к динамо.
-
Другой вариант - запускать лямбду каждый раз, когда обновляется запись DynamoDb... Я мог бы обновлять все записи еженедельно, а затем при их обновлении запускается лямбда, но я тоже не знаю, возможно ли это.
Хотелось бы получить дополнительную информацию о любом из этих подходов!
3 ответа
Есть ли способ запустить лямбду на каждой записи таблицы DynamoDb?
Для вашего конкретного случая, когда все, что вы хотите сделать, это обрабатывать каждую строку таблицы DynamoDB в масштабируемом режиме, я бы попробовал использовать разветвление Lambda -> SQS -> Lambdas следующим образом:
Установите правило событий CloudWatch, которое запускается по расписанию. Иметь это вызвать
dispatch
Лямбда-функция.dispatch
Работа лямбда-функции заключается в чтении всех записей в вашей таблице DynamoDB и записи сообщений вjobs
Очередь SQS, по одному на элемент DynamoDB.Создать
worker
Лямбда-функция, которая делает все, что вы хотите, с любым данным элементом из таблицы DynamoDB.Подключите
worker
Лямбда кjobs
Очередь SQS, чтобы ее экземпляр отправлялся всякий раз, когда что-то помещалось в очередь.
Поскольку ограничивающим фактором являются лямбда-тайм-ауты, запустите несколько лямбда-выражений, используя пошаговые функции. Выполните постраничное сканирование таблицы; каждая лямбда вернет LastEvaluatedKey
и передать его следующему вызову для следующей страницы.
Я думаю, что ваш лучший вариант, как вы уже указали, - запускать лямбду каждый раз, когда обновляется запись DynamoDB. Это возможно благодаря потокам DynamoDB.
Потоки - это упорядоченная запись изменений, которые происходят с таблицей. Они могут вызывать лямбду, поэтому она автоматическая (однако помните, что изменение появляется только один раз в потоке, настройте DLQ на случай, если ваша лямбда выйдет из строя). Этот подход хорошо масштабируется и также достаточно эволюционируем. При необходимости вы можете передать события из потока в SQS или Kinesis, разветвить и т. Д., В зависимости от требований.