2016-03-23 28 views
1

私はLambdaを使用して、VPCの一部であるPostgres RDSインスタンスに接続しています。ラムダ関数がしばらく起動されていない場合、それは実行の約2分後に次のエラーが発生します。AWS Lambda postgres接続のタイムアウトが発生しましたが、最初の試行時にのみ

could not connect to postgres { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' } 

ラムダ関数の再試行、それがデータベースに正常に接続し、実行したときとそれが必要。

node-postgresパッケージを使用してnode.js用のLambda関数が記述されています。接続するためのプログラムは次のようになります。

var client = new pg.Client(conString); 
client.connect(function(err) { 
    console.log("client connected"); 
    if(err) { 
     context.fail('Connection failed'); 
    } 
    else { //do stuff } 
} 

ログには、それは決してタイムアウト前に「接続されたクライアントを」到達されていないことを示しています。これらの最初の試みで何がうまくいかないのですか?

注:ラムダ関数が20-30分以内に再度呼び出されると、このタイムアウトは発生せず、関数は正常に実行されます。 「 ETIMEDOUTを接続する」、「ERRORTYPE」:

+0

に動作します再試行します。ラムダ関数を終了する前に 'client.end()'を呼び出していますか? –

+0

また、非常に頻繁に呼び出されないVPCアクセスのラムダ関数を使用する場合、ENI作成時間に関するいくつかの問題について読んできました。可能な場合は、Amazon接続がラムダ機能の新しいインスタンスを起動するたびにネットワーク接続を取得するために余分な時間を考慮して、データベース接続タイムアウトを増やす必要があります。 –

+0

client.end()が呼び出されているため、開いている接続が残っていません。後続の呼び出しや再試行で同じ問題が発生しないため、ENI作成時間は良い理論のように聞こえます。私はデータベースのタイムアウトを増やし、lambda関数を最大タイムアウトにすることを検討します。 – Toast

答えて

-3

この問題は私が最初の試みで、ラムダ関数を呼び出すようにしようとすると、利用ラムダのないいくつかの分後に私は

{「にErrorMessage」を取得するには、あまりにも私と一緒に起こりました: "SequelizeConnectionError"、 "stackTrace":["Handshake._callback (/var/task/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:94:20)",Handshake.Sequence.end /var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)",Protocol.handleNetworkError (/var/task/node_modules/mysql/lib/protocol/Protocol.js:364: 14)」、「Connection._handleNetworkError (/var/task/node_modules/mysql/lib/Connection.js:421:18)",Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:417:8) "、 Socket._onTimeout(net) "、" Socket.emit (events.js:166:7) "、" emitNone(events.js:67:13) Timer.unrefTimeout(timers.js:584:5)」、「_ makeTimerTimeout (timers.js:515:3)」、「_ 「2-3の後]}

はそれが私はデータベースへの古い接続を再利用しようとしているが、接続がタイムアウトした推測している

+0

これは本当に質問に答えるのに役立ちません。 – hyprstack

関連する問題