amazon-web-services - example - learn amazon lambda
AWS Lambda "Proceso finalizado antes de completar la solicitud" (4)
Estoy tratando de llamar a un método de cliente DynamoDB y obtener un elemento de la tabla DynamoDB. Estoy usando AWS Lambda . Sin embargo, sigo recibiendo el mensaje:
"El proceso salió antes de completar la solicitud".
He aumentado el tiempo de espera solo para asegurarme, pero el tiempo de procesamiento es menor que el tiempo de espera. ¿Algún consejo?
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);
// ...
});
});
};
Eche un vistazo a su consumo de memoria (incluido en la última línea de registro). Recibí el mismo mensaje cuando asigné muy poca memoria a mi función lambda.
El mensaje "Proceso finalizado antes de completar la solicitud" significa que la función Javascript salió antes de llamar a
context.done
(o
context.succeed
, etc.).
Por lo general, esto significa que hay algún error en su código.
No soy un experto en Javascript (en absoluto), por lo que puede haber formas más elegantes de encontrar el error, pero mi enfoque ha sido poner un montón de mensajes de
console.log
en mi código, ejecutarlo y luego mirar los registros.
Por lo general, puedo concentrarme en la línea ofensiva y, si la miro lo suficiente, generalmente puedo descubrir mi error.
Veo que ya tienes algunos registros. ¿Qué estás viendo en la salida?
Error en tu código. Eliminar el último}); y no use el contexto, está ahí para la compatibilidad con versiones anteriores, use devoluciones de llamada en el tiempo de ejecución de node.js 4.3 y 6.1.
He usado la
callback
, en lugar del
context
.
Los ejemplos más recientes en el sitio web de aws usan la
callback
de
callback
lugar del
context
.
Para completar la solicitud, se debe llamar a cualquiera de los siguientes:
callback(error); // This is used when there is an error
// or
callback(null, data); // This is used when there is a success
// ''data'' will contain success result, like some JSON object
Cuando la ejecución lambda completa la solicitud,
no llamar a una de las devoluciones de llamada anteriores,
verás el siguiente error:
"El proceso salió antes de completar la solicitud".