2017-10-23 6 views
0

개인 서브넷에서 NodeJS 람다 기능을 실행하고 보안 그룹과 NACL 모두에서 수신/송신 정책을 모두 허용합니다 (안전하지는 않지만 작업을 수행함) . 사설 서브넷에는 동일한 VPC의 공용 서브넷에 NAT 게이트웨이가 있으므로 인터넷 연결이 작동합니다.VPC 실행 AWS Lambda가 SQS 메시지를 한 번만 전송합니다.

내 목표는 메시지를 SQS 대기열에 보내는 것입니다. 어떤 이유

const AWS = require('aws-sdk') 
const sqs = new AWS.SQS() 

exports.handler = (event, context, callback) => { 
    sqs.sendMessage({ 
     MessageBody: JSON.stringify(event), 
     QueueUrl: 'https://sqs.eu-west-1.amazonaws.com/000000000000/queue-name' 
    }, function(err, data) { 
     console.log(err, data); 
     return callback(err, data); 
    }); 
}; 

,이 기능은 내가 넣어 각 개인 서브넷에서 처음으로 실행 :

람다 코드는 다음입니다. 그 후에 그것은 단지 시간을 초과합니다. '

{ 
    "errorMessage": "2017-10-23T17:07:01.675Z 903aaabc-b814-11e7-a727-19816eaa468a Task timed out after 10.00 seconds" 
} 

그리고 여기에 내가 VPC에 연결되지 않은 기능을 실행하면 완벽 할 때마다 작동

START RequestId: 903aaabc-b814-11e7-a727-19816eaa468a Version: $LATEST 
END RequestId: 903aaabc-b814-11e7-a727-19816eaa468a 
REPORT RequestId: 903aaabc-b814-11e7-a727-19816eaa468a Duration: 10002.46 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 32 MB 
2017-10-23T17:07:01.675Z 903aaabc-b814-11e7-a727-19816eaa468a Task timed out after 10.00 seconds 

로그,하지만 난 거기에 몇 가지 개인 리소스 액세스 로직을 추가해야합니다, 그래서 내가 할 수있는 VPC 외부에서 실행하지 마십시오.

내 생각에이 기능은 함수에서 사용하는 재사용 가능한 컨테이너 (인프라 단위)와 관련이 있지만 일반적으로 AWS 및 Lambda에 대한 나의 경험은 그 영향을 이해하기에는 너무 얕습니다.

sqs 개체가 handler에 생성되는 "더 따뜻한"버전을 사용해 보았지만 더 이상 작동하지 않았습니다.

내가 잘못하고있는 것에 대해 누구나 생각을 갖고 있습니까?

+2

'sqs = new AWS.SQS()'를'handler' 함수로 옮겨보십시오. AWS SDK가 Lambda 처리기 외부에서 생성 될 때 시간 초과 문제로 실행되는 HTTP 연결 풀을 생성하는 것을 보았습니다. –

+0

컨테이너가 뜨거우면 전역 코드가 다시 실행되지 않습니다. 핸들러 함수에서 전역 변수를 다시 초기화해야합니다. – Asdfg

+0

어떻게 인터넷에 연결되어 있습니까? 믿을 수 없을 정도로 쉽게 nat gw 등을 사용하여 vpc를 잘못 구성하는 것입니다. – Daniel

답변

0

실제로 이것은 연결 문제였던 것 같습니다.

나는 3 개의 공개 서브넷과 3 개의 개인 서브넷을 가지고있었습니다. 공용 서브넷은 인터넷 게이트웨이 (IGW)를 통해 0.0.0.0/0으로 라우팅 된 트래픽을 라우팅합니다. 사설은 공개 서브넷 중 하나에 앉아있는 NAT 게이트웨이를 통해 트래픽을 0.0.0.0/0으로 라우트했습니다.

공용 서브넷에 연결된 NACL은 포트 80, 44349152-65535의 인바운드 트래픽 만 허용하는 것이 문제였습니다. SQS 서비스에 대한 요청이 이들 포트와 다른 포트에서 발생하고있는 것으로 보입니다.

너무 안전하지는 않지만 1024-65535 포트를 통해 공용 서브넷에 대한 인바운드 트래픽을 the guide here에 따라 허용했습니다.