Я пытаюсь найти способ обработки фрагментов данных через определенные промежутки времени, вызывая aws lambda каждые N часов.
Например, анализировать страницу по определенному URL каждые 6 часов и сохранятьрезультат в s3 bucket.
Иметь много (~ 100k) URL-адресов, которые обрабатываются таким образом.
Конечно, у вас может быть виртуальная машина, на которой размещен какой-то планировщик, который будет запускать лямбда-выражения, как описано в этот ответ , но это нарушает подход без сервера.
Итак, есть ли способ сделать это, используя только службы aws?
То, что я пробовал, не работает:
- SQS может задерживать сообщения, но толькомаксимум 15 минут (мне нужны часы) и нет встроенной интеграции между SQS и Lambda, поэтому вам нужно иметь некоторый агент опроса (lambda?), который будет постоянно опрашивать qeueu и отправлять новые сообщения на рабочую лямбду,что снова нарушает точку выполнения только в запланированное время;
- CloudWatch Alarms может отправлять сообщения в SNS, который запускает Lambda.Периодические лямбда-вызовы могут быть реализованы таким образом, используя метрическую временную метку будущего , однако к аварийному сообщению не могут быть подключены пользовательские данные (например, URL из примера выше), так что это тоже не работает;
- Я мог бы создать запланированных триггеров Lambda CloudWatch программно, но они также не могут передавать какие-либо данные в Lambda.
Единственный способ, о котором я мог подумать, - это иметь динамо-базу данныхтаблица с записями «url», каждая из которых имеет метку времени последней «обработки» и имеет периодическую лямбду, которая будет запрашивать таблицу и отправлять «старые» записи в качестве заданий другой «рабочей» лямбде (напрямую или через SNS).Это сработало бы, однако вам все равно нужна лямбда-опрос, которая может стать узким местом по мере увеличения числа обрабатываемых элементов.
Есть еще идеи?