#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 секунд, если вы не остановите его самостоятельно.