Запланированные задания с использованием AWS Lambda - PullRequest
0 голосов
/ 17 мая 2019

У меня есть несколько лямбда-функций AWS, запускаемых событиями из других приложений, например через кинезис. Некоторые из этих событий должны вызывать что-то происходящее в другое время. В качестве примера рассмотрим случай отправки пользователю электронного письма с напоминанием / уведомлением о чем-либо, когда прошло 24 часа с момента события X.

Ранее я работал с лямбда-функциями, которые планируют другие лямбда-функции, динамически создавая правила cron CloudWatch во время выполнения, но сейчас я пересматриваю свой старый дизайн и думаю, является ли это лучшим подходом. Было немного утомительно настраивать лямбды, которые планируют другие лямбды, потому что в дополнение к отправке правил CW с новой лямбдой в качестве цели мне также пришлось иметь дело с предоставлением во время выполнения активированных лямбда-разрешений, запускаемых новым правилом CW.

Таким образом, другой подход, который я рассматриваю, состоит в том, чтобы отправлять задания, которые нужно выполнить, добавляя их в таблицу базы данных с заданным временем выполнения, а затем запускать одно правило CW Cron каждые x минут, которое проверяет базу данных на наличие заданий. , Это уменьшает сложность правил CW (только одно, требуется статическое правило), лямбда-разрешений (также статических) и т. Д., Но добавляет сложность в дополнительную таблицу базы данных и т. Д. Другое отличие состоит в том, что, хотя старый дизайн выполнял только одно выполненное одно «задание» за вызов этот дизайн потенциально может выполнить 100 ожидающих заданий в одном вызове, и я не уверен, может ли это вызвать проблемы с тайм-аутом и т. д.

Кто-нибудь успешно реализовывал нечто подобное? Какой подход вы выбрали? Я знаю, что есть и другие сервисы, такие как AWS Batch, но это кажется излишним для планирования простых задач, таких как отправка электронной почты, когда время t прошло с момента события e, так как, насколько мне известно, это не так поддерживать простые лямбда-задания. SQS также поддерживает синхронизированные сообщения, но только до 15 минут, поэтому это не кажется полезным для планирования чего-либо за 24 часа.

1 Ответ

0 голосов
/ 17 мая 2019

Интересной альтернативой является использование Шаговых функций AWS для запуска лямбда-функции AWS после заданной задержки.

Step Functions имеет состояние ожидания, которое может планировать или задерживать выполнение, поэтому вы можете реализовать довольно простой конечный автомат Step Functions, который ставит задержку перед вызовом лямбда-функции. База данных не требуется!

Пример концепции (немного другой, но достаточно близкий) см .:

...