2015-02-01 4 views
7

60 초 동안 시간을 ​​: JDBC의 URL CONECTING AWS 람다 적색 편이를 위해 - 내가 AWS 람다 함수를 만들어

  • 를 통해 Redshift에에

    • 기록하는 노드를 사용하여,

    로컬 쿼리를 실행 JDBC를 통해 Redshift 인스턴스에 성공적으로 연결할 수 있고 쿼리를 실행할 수 있습니다. I는 (그것이 async#waterfall 블록에 싸여) AWS 람다의 기능을 실행할 때

    var conString = "postgresql://USER_NAME:[email protected]_URL”; 
    var client = new pg.Client(conString); 
    client.connect(function(err) { 
        if(err) {
    
         console.log('could not connect to redshift', err);
   
        } 
   
    // omitted due to above error 
    

    그러나 AWS CloudWatch에서 로그는 AWS 람다 함수 60 초 후에 타임 아웃 저 말한다.

    내 기능이 연결되지 않는 이유에 대한 아이디어가 있습니까?

  • 답변

    3

    모든 소스에 공개 된 Redshift 보안 그룹을 열어 보았거나 공개하지 않았습니다. 람다 (Lambda) 함수는 고정 된 주소 나 고정 된 범위의 IP 주소에서 실행되지 않기 때문에 (AKA 서버가 없음) 사용자에게 완전히 투명합니다.

    아마존이 어제 VPC를 지원하는 새로운 람다 기능을 발표 한 것을 보았습니다. VPC에서 Redshift 클러스터를 실행할 수 있다면 문제를 해결할 수 있습니다. 당신이 서버를 사용하지 않는 프레임 워크 v1.5.0를 사용하는 경우

    1

    , 당신은 추가해야합니다 :

    iamRoleStatements: - Effect: Allow Action: - ec2:CreateNetworkInterface Resource: '*' - Effect: Allow Action: - ec2:DeleteNetworkInterface - ec2:DescribeNetworkInterfaces Resource: 'arn:aws:ec2:${self:provider.region}:*:network-interface/*'

    또한

    는 아래와 같이, 인바운드 규칙에 모든 securityGroupIds을 추가해야합니다 : screenshot 2017-01-09 23 02 33

    상세 정보 : https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

    1

    람다와 레드 쉬프트를 연결하기 위해 키네스 [1] 파이어 호스를 사용하는 것이 좋습니다. 이는 docs [2]에서 제안 된 더 나은 접근 방법입니다.

    키네시네이션은 중간 저장 장치로 s3을 사용하여 복사 명령을 사용하여 데이터를 적색 변이로 자동 푸시 할 수 있습니다.

    "A COPY 명령은 테이블을로드 할 수있는 가장 효율적인 방법입니다.이 COPY를 사용하는 것보다 훨씬 효율성이 떨어집니다하지만 당신은 또한, INSERT 명령을 사용하여 테이블에 데이터를 추가 할 수 있습니다"

    각주 : [1] http://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html

    [2] http://docs.aws.amazon.com/redshift/latest/dg/t_Loading_data.html.

    관련 문제