2017-12-04 11 views
0

DynamoDB 데이터베이스에서 항목을 가져 오려고합니다. 내 코드가 현재 작성된 방식과 달리 DynamoDB에서 데이터를 검색하지 못합니다. 내 테스트에서 알 수있는 한 내 콜백이 호출되지 않기 때문에 나는 뭔가 잘못하고있을 것입니다.AWS Lambda의 DynamoDB 객체에서 getItem()을 호출하면 콜백이 실행되지 않습니다.

나는 하루 종일 이걸 보냈고 오늘 아침에 일어난 이래로 그 일을 잘 못 고쳤다.

누군가 내가 여기서 잘못하고있는 것에 대해 통찰력을 제공 할 수 있다면 매우 감사하게 생각합니다. 모두에게 미리 감사드립니다.

최종 메모 : 람다 함수 자체의 시간 초과는 5 분으로 설정됩니다. 그래서 나는 db 쿼리가 반환되기 전에 Lambda 함수가 시간 초과되었다고 생각하지 않습니다. 함수를 실행하면 잠시 후 종료됩니다.

const AWS = require('aws-sdk'); 

const dynamodb = new AWS.DynamoDB(); 
var response = null; 
var test = false; 

function getFromDB(callback) { 
    const params = { 
    TableName: process.env['DB_TABLE_NAME'] // evaluates to 'test-table', 
    Key: { 
     "id": { 
     S: postId // evaluates to a big string, pulling it in from an SNS message. Verified it with console.log(). It stores the expected value. 
     } 
    } 
    }; 
    dynamodb.getItem(params, function(err, data) { 
    if (err) callback(data, true);   // an error occurred 
    else  callback(data, true);   // successful response 
    }); 
} 

getFromDB((data, isCalled) => { 
    response = data; 
    test = isCalled; 
}); 

console.log(data); // evaluates to null 
console.log(test); // evaluates to false 
+0

로그를 확인 했습니까? AWS 콘솔에서 lambda 함수를 클릭 한 다음 모니터링 탭을 클릭하고 'Cloudwatch에서보기'를 클릭하십시오. 맨 위 항목이 최신 실행 로그입니다. – Stu

+0

또한 처리기를 어떻게 설정합니까? – Stu

+0

귀하의 처리기 함수는 선택적으로 콜백을 인수로 취할 수 있지만 이벤트와 컨텍스트를 취해야한다고 생각합니다. 이 '함수 (이벤트, 컨텍스트, 콜백)'처럼 – Stu

답변

1

SDK를로드 했습니까? 그 생각 때문에, 포함 지역

+0

예, SDK가로드되었습니다. 나는 그것을 반영하기 위해 원래 게시물을 편집 할 것입니다. –

+0

AWS.config.update ({region : 'REGION'});'문을 포함하지 않았습니다. 그게 내 문제를 일으킬 수 있다고 생각하니? –

+0

가능합니다. Dynamo에는 지역이 필요하며 기본값이 아닌 것으로 생각됩니다. 그러나 스택 추적 없이는 문제가 무엇인지 알기가 어렵습니다. 지역에 대한 추가 정보가 필요한 경우 알려 주시기 바랍니다. – Stu

1

나는에 람다 함수를 호출입니다 무슨 생각하지만, 다시 전화를 기다릴려고하고 있지 않다 : 나는

// Load the AWS SDK for Node.js 
var AWS = require('aws-sdk'); 
// Set the region 
AWS.config.update({region: 'REGION'}); 

편집 코드 조각에서 볼 수 없습니다 완료되고 종료됩니다.

나는 비슷한 문제가 있다고 생각하고 Bluebird와 async/await를 사용하여 해결했습니다.

필요하면 코드에서 스 니펫을 제공 할 수 있습니다.