Índice secundario de consulta de AWS Lambda

La siguiente es la consulta node.js en AWS lambda en un objeto JSON dynamoDB. UserID es la clave principal sin clave de clasificación. GeoHash es una clave secundaria, con el nombre de índice “GeoHash-index”. La llamada se realiza correctamente sin error, pero no da como resultado que se devuelva nada. Es posible que los datos de prueba a continuación sean incorrectos, ya que no ofrece ninguna conexión con el nombre del índice, pero soy nuevo en AWS / noSQL y un poco perdido.

var AWS = require('aws-sdk'); var docClient = new AWS.DynamoDB({apiVersion: '2012-08-10'}); exports.handler = function(event,context,callback) { console.log(JSON.stringify(event, null, ' ')); var tableName = "table1"; // getItem docClient.getItem({ TableName: tableName, IndexName: "GeoHash-index", KeyConditionExpression: "GeoHash = :geohash", ExpressionAttributeValues: {":geohash": "dpz886gb0tb0"} }), function(err,data){ if(err){ callback(err); } else { callback(null,data); } } }; 

Donde los datos de la prueba Lambda es

 { "GeoHash": "dpz886gb0tb0", "Radius": 2, "Timestamp": 1472601493180, "UserID": "User1" } 

La cadena GeoHash debe coincidir entre sí. ¿Pensamientos?

EDITAR No hay éxito con este método tampoco

 var AWS = require('aws-sdk'); var docClient = new AWS.DynamoDB({apiVersion: '2012-08-10'}); exports.handler = function index(event, context, callback) { var params = { TableName: "LocationAware1", IndexName: "GeoHash-index", KeyConditionExpression: "GeoHash = :geohash", ExpressionAttributeValues: { ":geohash": {'S': 'dpz886gb0tb0'} }, }; docClient.query(params, function(err, data) { if (err) console.log(JSON.stringify(err)); else console.log(JSON.stringify(data)); }); } 

Cuando dices que la llamada es exitosa sin error, supongo que te refieres a la llamada a la lambda

Si está utilizando la versión 4.3 del nodo, la forma en que regresa de la función está en desuso como se ve en este extracto de la documentación de aws lambda.

El tiempo de ejecución Node.js v4.3 admite el parámetro de callback opcional. Usted puede usarlo para devolver explícitamente información a la persona que llama. La syntax general es:

callback (error error, resultado del objeto);

El uso del parámetro de callback es opcional. Si no usa el parámetro de callback opcional, el comportamiento es el mismo que si llamara a la callback () sin ningún parámetro. Puede especificar la callback en su código para devolver información a la persona que llama. Si no utiliza la callback en su código, AWS Lambda lo llamará implícitamente y el valor de retorno es nulo.

Esta es la forma correcta de regresar de una función aws lambda si usa el nodo versión 4.3

Primero agregue un tercer parámetro a la función de manejador como tal

  exports.handler = function(event,context,callback) 

Luego, al regresar de la función, siga este formulario.

  function(err,data){ if(err){ callback(err); } else { callback(null,data); } } 
 var AWS = require('aws-sdk'); exports.handler = function(event,context,callback) { var params = { TableName: 'Table1', IndexName: 'GeoHash-index', KeyConditionExpression: 'GeoHash = :geohash', ExpressionAttributeValues: { ':geohash': 'dpz886g8p9e2', } }; var docClient = new AWS.DynamoDB.DocumentClient(); docClient.query(params, function(err, data) { if (err) callback(err); else callback(null, data); }); } 

Vuelve a escribir y está limpio.