1

다음은 dynamoDB JSON 객체의 AWS 람다에서 node.js 쿼리입니다. UserID는 정렬 키가없는 기본 키입니다. GeoHash는 색인 이름이 "GeoHash-index"인 보조 키입니다. 호출은 오류없이 성공하지만 아무 것도 반환되지 않습니다. 아래의 테스트 데이터는 인덱스 이름에 아무런 연결도 제공하지 않으므로 잘못되었지만 AWS/noSQL을 처음 사용하고 조금 손실되었습니다. 람다 테스트 데이터AWS 람다 보조 인덱스를 쿼리

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

인 경우

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); 
     } 
    } 
}; 

는 geohash와 문자열은 서로 일치해야합니다. 생각?

편집 이 방법 없음 성공하지 중 하나

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)); 
    }); 
} 

답변

1
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); 
    }); 
} 

다시 작성하고 깨끗합니다.

1

당신은 전화가 난 당신이 노드 버전을 사용하는 경우 람다

에 대한 호출을 의미 가정하고 오류없이 성공 말할 때 4.3 함수에서 돌아 오는 방법은 aws lambda 문서의이 추출물에서 볼 수 있듯이 사용되지 않습니다.

Node.js 런타임 v4.3은 선택적 콜백 매개 변수를 지원합니다. 사용자는이 정보를 사용하여 정보를 호출자에게 명시 적으로 반환 할 수 있습니다. 일반적인 구문은 다음과 같습니다.

콜백 (오류 오류, 개체 결과);

콜백 매개 변수는 선택 사항입니다. 선택적 콜백 매개 변수를 사용하지 않으면 매개 변수없이 callback()을 호출 한 것과 같은 동작을합니다. 코드에서 콜백을 지정하여 정보를 호출자에게 반환 할 수 있습니다. 코드에서 콜백을 사용하지 않으면 AWS Lambda가이를 암묵적으로 호출하고 반환 값이 null입니다.

이 먼저 그렇게

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

같이 핸들러 함수로 제 3 파라미터를 추가 노드 버전 4.3

를 이용한 경우 AWS 람다 함수에서 복귀하는 올바른 방법 함수에서 복귀 할 때이 형식을 따르십시오.

function(err,data){ 
     if(err){ 
      callback(err); 
     } else { 
      callback(null,data); 
     } 
    } 
+0

아직도 람다에서 "널 (null)"응답이 ... docClient.getItem ({ TABLENAME : TABLENAME, 키 : { 사용자 ID : {S : "사용자 2"}, } }, 이 의지 그러나 나에게 가치를 돌려 주라. – Iorek