Node.js Http post запрос на aws lambda Socket зависает

#node.js #aws-lambda

#node.js #aws-lambda

Вопрос:

 var http = require('http');
exports.handler = function(event, context) {

  var headers = {
      'content-type': 'application/x-www-form-urlencoded'
  }
  var options = {
    host: 'stage.wings.com',
    path:'/test-lambda',
    form: {
     'days':'3'
    },
    headers:headers
  };
  console.log(options);

  var req = http.request(options, function(response) {
      // Continuously update stream with data
      var body = '';
      response.on('data', function(d) {
          body  = d;
      });
      response.on('end', function() {
          // Data reception is done, do whatever with it!
          var parsed = JSON.parse(body);
          console.log("success");
          console.log(parsed);
      });
  });
  // Handler for HTTP request errors.
  req.on('error', function (e) {
      console.error('HTTP error: '   e.message);
      completedCallback('API request completed with error(s).');
  });
};
  

версия моего узла: v0.10.25
Если я выполняю в файле, это выдает ошибку HTTP: зависание сокета
Из aws lambda, если я запускаю эту функцию, она выдает ошибку

Ошибка Lambda: 2016-10-09T23:11:17.200Z 89f2146f-8e75-11e6-9219-b9b32aa0a768 Ошибка: зависание сокета при createHangUpError (_http_client.js:200:15) в сокете.socketOnEnd (_http_client.js:285:23) в emitNone (events.js:72:20) в Socket.emit (events.js:166:7) в endReadableNT (_stream_readable.js:905:12) в nextTickCallbackWith2Args (node.js: 437:9) в процессе._tickDomainCallback (node.js:392:17)

Ответ №1:

Для aws-lambda существует время ожидания, оно зависнет не более чем через 300 секунд.

Вот немного больше об этом. http://docs.aws.amazon.com/lambda/latest/dg/limits.html

вы можете использовать context.getRemainingTimeInMillis(); , который вернет вам оставшееся время вашего lambda, чтобы вы могли очистить свои данные. Если предполагается, что это будет выполняться дольше пяти минут, то вы можете реализовать какое-то полное завершение работы и очистить свои данные перед этим.

Комментарии:

1. я не нахожу никаких проблем, когда я получаю запрос, но проблема возникает, когда я выполняю POST-запрос. Некоторое время он сообщает, что TCP-соединение закрыто.

2. Вы прочитали ответ? Инфраструктура AWS ОСТАНОВИТ ваш lambda через 300 секунд, если вы не остановите его самостоятельно.