Вызвать лямбда-функцию с задержкой

У меня есть эта схема для получения запросов http и некоторой обработки файлов в экземпляре Windows Server EC2.

API Gateway -> Lambda -> EC2 (Node.js + Express)

На данный момент существует несколько запросов в день, поэтому экземпляр останавливается, пока не поступит запрос. Когда приходит запрос, функция Lambda запускает экземпляр, но первый запрос теряется. Если экземпляр запущен, запрос перенаправляется.

Я хочу решение, при котором я не теряю первый запрос. У меня есть несколько подходов, но ни один из них не кажется правильным:

1) Сохраните этот запрос в ElastiCache (Redis / memcached). При запуске сервера Express проверьте, сохранены ли какие-либо запросы.

2) Используйте Amazon SQS для хранения всех запросов. Затем переключите Express API для работника, чтобы проверить SQS на наличие новых сообщений. Мне не нравится это решение, потому что я буду постоянно проверять SQS, что большую часть времени будет пустым, и я полагаю, что это может быть дорого.

3) Повторно вызвать лямбда- функцию с задержкой. Просто сделайте еще один вызов функции Lambda с тем же запросом за 1 минуту (например), когда экземпляр будет готов. На мой взгляд, сейчас это лучшее решение, простое и эффективное, но я не знаю, как его реализовать. Я знаю, что вы можете планировать лямбда-выполнения, но есть что-то вроде "выполнить эту функцию все дни в 3 часа дня", и я хочу выполнить функцию только один раз с задержкой.

Я застрял с этим, надеюсь, кто-то может прояснить мои идеи.

1 ответ

Решение

Используйте решение SQS.

Когда ваша лямбда-функция выполняется, сохраните запрос в SQS.

Используйте автоматическое масштабирование, чтобы запустить и завершить работу экземпляра EC2, когда запросы добавляются в очередь.

На вашем экземпляре EC2 опросите очередь SQS для работы. Вы можете минимизировать затраты SQS, минимизируя запросы:

  • Использовать длинный опрос и / или
  • Проверяйте очередь раз в минуту, спя между проверками.

Запросы SQS не так дороги. Опрос один раз в минуту даст 43 200 запросов в месяц. Это значительно ниже 1 миллиона запросов, которые вы получаете бесплатно каждый месяц. Даже если уровень бесплатного обслуживания не покрывается, первый миллион запросов составляет всего $0,50.

Другие вопросы по тегам