AWS Lambda "Процесс завершен до завершения запроса"
Я пытаюсь вызвать DynamoDB и получить один элемент из БД. Я использую AWS Lambda. Тем не менее, я продолжаю получать сообщение "Процесс завершен до завершения запроса". Я увеличил таймаут только для того, чтобы убедиться, но время обработки меньше таймаута. Любые советы?
console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function(event, context) {
dynamodb.listTables(function(err, data) {
});
var params = {
"TableName": "User",
"Key":
{"User Id" : {"S":event.objectId}
},
"AttributesToGet" : ["First Name","Last Name", "Latitude", "Longitude"],
"ConsistentRead" : true
}
dynamodb.getItem(params, function(response,result) {
response.on('data', function(chunk){
console.log(""+chunk);
console.log("test1")
context.done(result);
});
result.on('ready', function(data){
console.log("test2")
console.log("Error:" + data.error);
console.log("ConsumedCapacityUnits:" + data.ConsumedCapacityUnits);
context.done('Error',data);
// ...
});
});
};
Ответы
Ответ 1
Сообщение "Процесс, завершенный до завершения запроса" означает, что функция Javascript вышла перед вызовом context.done
(или context.succeed
и т.д.). Обычно это означает, что в вашем коде есть некоторая ошибка.
Я не эксперт Javascript (вообще), поэтому могут быть более элегантные способы найти ошибку, но мой подход заключался в том, чтобы добавить в мой код кучу сообщений console.log
, запустить ее, а затем посмотреть на журналы. Обычно я могу опуститься на оскорбительную линию, и, если я посмотрю на нее достаточно долго, я обычно могу выяснить свою ошибку.
Я вижу, что у вас уже есть регистрация. Что вы видите на выходе?
Ответ 2
Взгляните на потребление памяти (включено в последнюю строку журнала). Я получил то же сообщение, когда я назначил слишком мало памяти для своей лямбда-функции.
Ответ 3
Я использовал обратный вызов вместо контекста
то есть используется либо нижеследующее:
* обратный вызов (ошибка);
* обратный вызов (нуль, данные);
Итак, чтобы завершить запрос, любой из вышеперечисленных, должен быть вызван.
В случае, когда выполнение лямбда завершается, не вызывая ни одного из вышеуказанных обратных вызовов, мы получили вышеуказанную ошибку.
Ответ 4
Ошибка в коде. Удалить последнее}); и не используйте контекст для обратной совместимости, используйте обратные вызовы в node.js 4.3 и 6.1.
Ответ 5
Я знаю, что это был ответ, но я получаю такое же сообщение об ошибке при запуске AWS Lambda через С# aspnetcore, пытающегося отправить PNG-изображение на S3 через конечную точку S3Proxy.
Во всяком случае, я сделаю это коротко. Это было причиной моего пакета nuget Microsoft.IdentityModel.Tokens версии 5.1.4.