Лучший способ запланировать одноразовые события в безсерверных средах - PullRequest
0 голосов
/ 07 октября 2019

Пример использования

Отправка пользователю уведомления через 2 часа после регистрации.

Рассматриваемые параметры

setTimeout(() => { /* send notification */ }, 2*60*60*1000); не поддерживается в средах без сервера, поскольку функция завершаетсяпосле выполнения (поэтому он должен быть без сохранения состояния).

События CloudWatch могут планировать лямбда-вызовы с использованием выражений cron - но это было разработано для повторяющихся вызовов (существует ограничение в 100 правил / регион).

Я не видел вариантов планирования в AWS SNS / SQS или GCP Pub / Sub. Существуют ли альтернативы с планированием?

Я хочу избежать (если возможно) установки выделенного посредника сообщений (избыточного) или экземпляра с сохранением состояния / без сервера - есть ли для этого способ без сервера?

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

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Используйте функции AWS Step, они похожи на функции без серверов, которые не имеют 15-минутного ограничения, как AWS Lambda. Вы можете создать рабочий процесс на шаге AWS, который интегрируется с API-шлюзом, Lambda и SNS для отправки электронной почты и текстовых уведомлений следующим образом:

  1. Создание API-интерфейса REST через шлюз API, который будет вызывать функцию Lambda, передаваемую внапример, адрес назначения (электронная почта, номер телефона) уведомления SNS, когда оно должно быть отправлено, способ уведомления (например, электронная почта, текст и т. д.).
  2. Функция Lambda при вызове вызовет шагфункция, передающая данные (требуется лямбда, потому что API-шлюз в настоящее время не может напрямую вызывать функции Step).
  3. Функция Step в основном представляет собой рабочий процесс, вы можете определять состояния для ожидания (например, ожидание указанного времени дляотправьте уведомление (например, 30 секунд), и состояния для вызова других функций Lambda, которые могут использовать SNS для отправки электронной почты и / или текстовых уведомлений.

A предоставляется элементарный пример на примере AWS с их таймером задач.

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

Вы можете использовать Cloud Scheduler на Google Cloud Platform. Как указано в официальной документации:

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

Здесь вы можете проверить quickstart для использования его с Pub /Sub и Облачные Функции.

0 голосов
/ 07 октября 2019

На GCP поступают вещи за это, но не очень скоро. Таким образом, сегодня решение заключается в опросе базы данных.

Вы можете сделать это с помощью Datastore / firestore с индексированием даты и времени выполнения (чтобы не читать все документы каждую минуту). Но будьте осторожны с ростом трафика, вы можете создать точку доступа.

...