Быстро вернуть ответ от AWS Lambda - PullRequest
0 голосов
/ 11 мая 2018

У меня есть Node.js 8.10 Lambda.Он отвечает на POST-запросы к моему API-шлюзу.

Я хочу:

  1. Ответить пользователю.
  2. Подождите 3,5 минуты.
  3. Сделайте что-нибудь полезное.

Мой код такой:

function handler(event, context, lambdaCallback) {
  //210000 milliseconds is 3.5 minutes
  let timeToWait = 210000;

  //respond to the caller and continue to process the request
  lambdaCallback(null, {"message": "process started"});

  setTimeout(() => {
    doSomethingUseful();
  }, timeToWait);

}

doSomethingUseful () запускается после указанного времени ожидания во всех случаях.

Проблема в том, чтоЯ не получил ответ.Я думаю, что время ожидания ответа шлюза API убивает ответ - обычно я получаю: { "message": "Endpoint request timed out" }.

Я думаю, что время ожидания ответа шлюза API убивает ответ, потому что, если я уменьшу timeToWait до тривиального значения, я получуожидаемый ответ ({"message": "process started"}).

Есть идеи, как отправить быстрый ответ до окончания setTimeout?

Ответы [ 2 ]

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

AWS Step Функции в качестве принятого ответа являются отличным вариантом (и, вероятно, наилучшим для конкретных требований). Тем не менее, я просто хотел отметить, что вы можете сделать это с SQS и отложенными событиями, которые запускают лямбда-функцию.

Примечание: Максимальное время составляет 15 минут для тех, кто хочет получить больше, чем 3,5 минуты ОП ищет.


Вы также можете сделать Вызов другой лямбда-функции с Event для InvocationType (асинхронный вызов). Это позволяет запускать после того, как пользователю отправили ответ, но очевидно, что действия вторичной лямбды должны быть полностью изолированы, так как мы не можем вернуть ответ пользователю от нее. Это определенно не правильное решение для OP, так как нет причин платить 3,5 минуты времени запуска лямбды, чтобы он ничего не делал, но шаблон может быть чрезвычайно полезным.

Я использую шаблон asyncInvoke, когда у меня есть обработка в vpc, которая должна быть выполнена, и я не хочу, чтобы пользователь имел дело с ужасным холодным стартом 10 с VPC для лямбды, когда это не является необходимым / подключенная часть запроса.


Примечание: Если вы используете любой из вышеперечисленных методов, весьма рекомендует установить Очередь мертвых писем для лямбда-функции, поскольку асинхронные вызовы повторят выполнение несколько раз, когда не удалось.


В любом случае, не отвлекайте от лучшего ответа, основанного на потребностях ОП, но подумал, что может быть полезно увидеть, какие другие возможности могут быть для других, которые случаются на посту!

0 голосов
/ 12 мая 2018

Использование Функции шага AWS с Состояние ожидания

  1. Начните с лямбды 1 и отправьте ответ пользователю
  2. Использовать состояние ожидания 3,5 минуты
  3. Позвоните второй лямбде, чтобы сделать другие полезные вещи
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...