2017-10-23 16 views
0

プライベートサブネットでNodeJSラムダ機能を実行しており、セキュリティグループとNACL(安全ではありませんが、ジョブを実行します) 。プライベートサブネットには、同じVPCのパブリックサブネットにあるNATゲートウェイがあるため、インターネット接続が機能します。VPC実行AWS LambdaはSQSメッセージを1回だけ送信します

私の目標は、メッセージを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" 
} 

そして、ここでログ

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にアタッチされていない機能を実行すると、「それは完璧にするたびに動作しますが、私はそこにいくつかの民間のリソースへのアクセス・ロジックを追加する必要がありますので、私のことが可能ですそれをVPCの外で実行しないでください。

この機能は、この機能が使用する再利用可能なコンテナ(インフラストラクチャユニット)と関係がありますが、一般的なAWSやラムダの経験は、それがどのように影響を受けるか把握するには浅すぎます。

sqsオブジェクトがhandlerで構築される「より暖かい」バージョンを試しましたが、これはうまくいきませんでした。

私が間違っていることを知っている人はいますか?

+2

'sqs = new AWS.SQS()'を 'handler'関数に移動してみてください。私は、AWS SDKがLambdaハンドラの外で作成されたときにタイムアウトの問題に遭遇するHTTP接続プールを作成するのを見ました。 –

+0

コンテナが熱い場合は、グローバルコードが再度実行されません。ハンドラ関数でグローバル変数を再初期化する必要があります。 – Asdfg

+0

どのようにインターネットに接続できますか?あなたのvpcをnat gwなどで間違って設定するのは信じられないほど簡単です。 – Daniel

答えて

0

これは実際に接続の問題だったようです。

私は3つの公開サブネットと3つのプライベートサブネットを持っていました。パブリックサブネットは、インターネットゲートウェイ(IGW)を介して0.0.0.0/0にルーティングされたトラフィックをルーティングします。プライベートなものは、パブリックサブネットの1つに入っていたNATゲートウェイを経由して、トラフィックを0.0.0.0/0にルーティングしました。

パブリックサブネットに接続されているNACLが、ポート80443、および49152-65535のインバウンドトラフィックだけを許可したという問題がありました。 SQSサービスへのリクエストは、これらとは異なるポートで行われていたようです。

ポート1024-65535を介して公衆サブネットに着信トラフィックをthe guide hereに従って許可しましたが、あまりにも安全ではないようです。

関連する問題