2015-01-30 2 views
3

node-postgres 클라이언트를 AWS Redshift 데이터베이스에 사용하고 있습니다.AWS를 통한 Redshift 연결 시도 람다

로컬에서는 ">> connected"및 ">>> successful query. jsonResult :"에 대한 인쇄 명령문을 가져 와서 node에 다음 코드를 실행할 수 있습니다.

그러나 Amazon Lambda에서이 코드를 실행하면 "연결하려고합니다 ..."와 같은 로그 문이 표시되지 않습니다.

console.log("trying to connect..."); 
var r = pg.connect(conString, function(err, client) { 
    if(err) { 
    return console.log('>> could not connect to redshift', err); 
    } 
    console.log(">> connected"); 
    client.query('SELECT * FROM my_table', function(err, result) { 
    if(err) { 
     return console.log('error running query', err); 
    } 
    var jsonResult = JSON.stringify(result); 
    console.log(">>> successful query. jsonResult: " + jsonResult); 
    client.end(); 
    return jsonResult; 
    }); 
}); 

이 코드에는 ">> 연결하려고합니다 ..."와 같은 print 문이 표시되지 않는 것과 혼동 스럽습니다.

+1

node.js가 비동기 모드에서 함수를 실행 중입니다. 비동기 유틸리티 (https://github.com/caolan/async) – Guy

+0

고맙다, 가이 사용을 고려하십시오. asynC# waterfall의 내부에서 호출을 감싸는 것은 더 나를 필요로합니다. –

+0

이것에 대해 더 알고 싶습니까? 내가 옳은 대답은 현재 위의 코드가 비동기를 실행하고 콜백이 끝나기 전에 끝나는 것이라고 생각합니다. –

답변

1

두 가지 당신이

  1. 이 람다 함수가 조기 반환하지 않습니다 있는지 확인합니다 확인해야합니다 있습니다, 당신은 context.done()에 대한 호출을 포함하지 않는 게시 된 snipplet 그래서 당신이있어 알고 어렵다 이것을 올바르게 처리하십시오. context.done() 다른 곳으로 전화 하시겠습니까?
  2. Redshift 클러스터가 인터넷에 열려 있습니까? Redshift 클러스터에 수동으로 연결할 때 EC2 인스턴스 또는 인터넷을 통해 수동으로 수행합니까? 이전 버전 인 경우 람다 함수는 클러스터가 주소 지정이 가능하지 않기 때문에 클러스터에 연결할 수 없습니다 (인스턴스의 보안 그룹이 연결될 수 있도록 클러스터의 보안 그룹을 구성 했으므로 EC2 인스턴스에서 가져온 것입니다). You can read more about how to configure access to your cluster here.