2017-02-25 1 views
0

DynamoDB 문제에 액세스 할 때 이러한 AWS Lambda node.js 시간 초과 중 하나가 발생하지만 증상이 다르게 나타나고 찾은 해결책으로이 문제가 해결되지 않습니다.AWS Lambda node.js DynamoDB에 액세스 할 때 시간 초과

제한 시간은 5 분으로 설정되고 메모리는 128MB로 설정되지만 사용량은 30MB를 초과하지 않습니다. 역할에 대한
IAM 정책은 다음과 같습니다

  • AWSLambdaFullAccess
  • AmazonDynamoDBFullAccess
  • AWSLambdaVPCAccessExecutionRole

기본 VPC 7 개 보안 그룹이와 함께 기본 보안 그룹을 포함

  • 인보 싶게 : 모든 트래픽 모든 프로토콜, 모든 포트 범위,
  • 아웃 바운드 : 모든 트래픽 모든 프로토콜, 모든 포트 범위, 여기

0.0.0.0/0은 코드입니다 :

var aws = require('aws-sdk'); 

exports.handler = function(event, context) { 
    var dynamo = new aws.DynamoDB(); 

    dynamo.listTables(function(err, data) { 
    if (err) { 
     context.fail('Failed miserably:' + err.stack); 
    } else { 
     context.succeed('Function Finished! Data :' + data.TableNames); 
    } 
    }); 
}; 

그리고 결과 :

START RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Version: $LATEST 
END RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba 
REPORT RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Duration: 300000.91 ms Billed Duration: 300000 ms Memory Size: 128 MB Max Memory Used: 21 MB 
2017-02-25T15:21:21.778Z 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Task timed out after 300.00 seconds 

관련 node.js 버전 문제가 해결되어 here이 작동하지 않으며 "ReferenceError: https is not defined at exports.handler (/var/task/index.js:6:16)"을 반환합니다. 또한 AWS에서는 0.10 버전이 사용되지 않습니다.

var aws = require('aws-sdk'); 

exports.handler = function(event, context) { 
    var dynamo = new aws.DynamoDB({ 
    httpOptions: { 
    agent: new https.Agent({ 
     rejectUnauthorized: true, 
     secureProtocol: "TLSv1_method", 
     ciphers: "ALL" 
    }) 
    } 
}); 

    dynamo.listTables(function(err, data) { 
    if (err) { 
     context.fail('Failed miserably:' + err.stack); 
    } else { 
     context.succeed('Function Finished! Data :' + data.TableNames); 
    } 
    }); 
}; 

결과 :

START RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Version: $LATEST 
2017-02-24T22:27:31.010Z 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb ReferenceError: https is not defined 
    at exports.handler (/var/task/index.js:6:16) 
END RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb 
REPORT RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Duration: 81.00 ms Billed Duration: 100 ms  Memory Size: 128 MB Max Memory Used: 26 MB 
RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Process exited before completing request 

내가 AWS는 할 수 없을 것이라고 믿을 수 없어 5 분으로 설정 시간 제한으로
여기 은 HTTPS를 참조하여 코드입니다 할당 된 시간대에 테이블 목록을 반환하고 권한 문제는 일반적으로 로그에 표시됩니다.

감사합니다.

+0

업데이트 : "No VPC"를 사용하면 VPC 문제 일 수 있으므로 올바른 완료를 허용합니다. START RequestId : 11930536-fb72-11e6-a386-25115dc82eee 버전 : $ LATEST END RequestId : 11930536-fb72-11e6-a386- 25115dc82eee 보고서 RequestID가 : 11,930,536 - fb72-11e6-a386-25115dc82eee \t 시간 : 1000 MS \t 메모리 크기 : 978.54 MS \t이 시간을 청구 128메가바이트 사용 \t 최대 메모리 : 28메가바이트 \t가 어떻게이 VPC의 잘못된 구성 문제를 해결할 수 있습니다? – prg281

+0

분명히 VPC가 진짜 문제이지만'https is not defined '문제에 관해서는'var https = require ('https ')'를 파일 상단에 추가하면됩니다. – idbehold

+1

이 Lambda 기능을 실행중인 VPC에 NAT 게이트웨이가 있습니까? 선택한 VPC 및 서브넷의 인스턴스가 개인 IP 만 가지고 실제로 인터넷에 연결할 수 있습니까? – jarmod

답변

1

람다가 개인 서브넷에있는 것 같습니다. 이 경우 기본적으로 람다는 아웃 바운드 인터넷 액세스를 갖지 않습니다. VPC가 리소스를 사용하여 외부 인터넷에 액세스 할 수있게하려면 NAT 게이트웨이 또는 NAT 인스턴스를 만들어야합니다. DynamoDB API가 VPC 관점에서 인터넷 외부에 있습니다.

관련 문제