BatchGetItem retorna exitoso pero nulo.
Intentando ejecutar un BatchGetItem desde Lambda a DynamoDB, sin embargo, cuando ejecuto la consulta, devuelve una respuesta nula y no registra ningún problema. Las claves primarias (PK) y las claves de ordenamiento (SK) existen en la tabla y los valores asociados a cada una se almacenan actualmente en la tabla, como se muestra a continuación. La función Lambda tiene permisos para ejecutar BatchGetItem en esa tabla específica y cuando ejecuto un solo GetItem en esa misma tabla, funciona correctamente y devuelve un solo elemento. Cualquier ayuda para tratar de hacer que BatchGetItem devuelva los elementos consultados sería muy apreciada. Gracias.
Imagen de DynamoDB
Código de Lambda
// Cargar la SDK de AWS para Node.js
var AWS = require('aws-sdk');
// Establecer la región
AWS.config.update({region: 'us-east-1'});
// Crear el objeto de servicio DynamoDB
var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var info;
exports.handler = async (event, context) => {
var params = {
RequestItems: {
"candidates": {
Keys: [
{
"PK": {S: "jack"},
"SK": {S: "C108951642"}
},
{
"PK": {S: "ben"},
"SK": {S: "C143956179"}
},
{
"PK": {S: "hill"},
"SK": {S: "C268283233"}
}
],
ProjectionExpression: "Name"
}
}
};
ddb.batchGetItem(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
data.Responses.TABLE_NAME.forEach(function(element, index, array) {
console.log(element);
info = element;
});
}
});
return info;
}
Respuesta de Lambda
Evento de prueba: batch
Respuesta: nulo
Registros de la función:
START RequestId: a411114a-29b9-4f7f-bc20-2a5caff9f0cf Versión: $LATEST
END RequestId: a411114a-29b9-4f7f-bc20-2a5caff9f0cf
INFORME RequestId: a411114a-29b9-4f7f-bc20-2a5caff9f0cf Duración: 442.11 ms Tiempo facturado: 443 ms Tamaño de memoria: 128 MB Memoria máxima utilizada: 78 MB
ID de solicitud: a411114a-29b9-4f7f-bc20-2a5caff9f0cf
davy.ai
En primer lugar, asegúrate de que
TABLE_NAME
endata.Responses.TABLE_NAME
sea reemplazado por el nombre real de tu tabla en el código de la función Lambda.Dado que la función Lambda devuelve null, una posibilidad es que el método
batchGetItem
no esté esperando la respuesta de DynamoDB antes de ejecutar la sentencia de retorno. Esto se puede solucionar envolviendo el métodobatchGetItem
en una Promesa y utilizandoawait
para esperar a que se resuelva.Modifica el código del controlador de Lambda de la siguiente manera:
Esto envuelve el método
batchGetItem
en una Promesa, que se resolverá con los datos de DynamoDB una vez que la consulta esté completa. La palabra claveawait
se utiliza para esperar a que la Promesa se resuelva.Además, agrega una declaración console.log a la función Lambda para registrar la respuesta de DynamoDB con fines de depuración.
Con estos cambios, la función Lambda ahora debería ejecutar correctamente la consulta BatchGetItem y devolver los elementos consultados.