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.