2017-11-10 3 views
0

MongoDB에 대한 데이터 저장을 위해 AWS 람다를 설정했습니다. 연결을 다시 사용하여 lambda가 호출 될 때마다 새 연결을 작성하지 않아야합니다. 하지만 db 연결을 열어두면 람다 핸들러의 콜백이 작동하지 않습니다!AWS Lambda 콜백이 열려있는 mongodb 연결에 의해 차단되고 있습니까?

내가이 문제를 만드는 데있어 잘못된 행동을하고 있습니까? 여기 내 코드 :

var MongoClient = require('mongodb').MongoClient 

exports.handler = (event, context, callback) => { 
    MongoClient.connect(process.env.MONGOURL, function (err, database) { 
     //database.close(); 
     callback(null, "Successful db connection") 
    }); 
} 
+0

[문서에서 : (http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html) 당신의 람다 함수 코드 * "모든 선언 (외부 처리기 코드, 프로그래밍 모델 참조)는 함수가 다시 호출 될 때 추가 최적화를 제공하여 초기화됩니다. 예를 들어, 람다 함수가 데이터베이스 연결을 설정하면 연결을 다시 설정하는 대신 후속 호출에서 원래 연결이 사용됩니다. 코드를 생성하기 전에 연결이 있는지 확인하기 위해 코드에 논리를 추가하십시오. "* –

+0

일반적인"nodej "응용 프로그램에 적용되는 모듈 코드 (또는 함수) 간의 연결을 유지하고 공유하기위한"간단한 "** 답변 여기에 신청하십시오. [Node.js 웹 응용 프로그램에서 MongoDB 연결을 관리하는 방법은 무엇입니까?] (https://stackoverflow.com/questions/10656574/how-do-i-manage-mongodb-connections-in-a-node-js- 웹 응용 프로그램). 그저 당신이 구현할 getDB() 함수는 "핸들러"코드의 "외부"에서 선언되어야하고, 핸들러에서는 그 연결의 현재 "인스턴스"를 잡아낼뿐입니다. 이것은 실제로 "지속 된" . 문서가 말하는 것처럼. –

+0

@NeilLunn Lambda는 이벤트 루프가 비어있을 때까지 기다리지 말고 대신 결과를 반환하고 컨테이너를 고정 시키라는 지시를 받아야합니다. –

답변