2016-07-20 1 views
2

私は単純なmongoテストを書いて、vpcのmongoサーバーにアクセスしようとしました。 "errorMessage": "***タスクは3.00秒後にタイムアウトしました" ラムダにハンドラを追加してチェックしました。lambdaがmongoにアクセスしようとしたときにタイムアウトしました

  1. vpcへの接続に問題はありません。別のサーバーに接続する他のハンドラー(同じファイル)が正常に実行されます。
  2. 他のモジュールに問題はありません。別のモジュール(make-random-string)を追加したので、毎回実行しています。
  3. エラーメッセージは表示されません。 Mongoからの例外はありません。それは毎回タイムアウトします。
  4. メモリを1024に、実行時間を15秒に増やしても結果は同じです。
  5. あなたがkerberosを使用しない限り、MongoドライバはC++ビルドを必要としません。
  6. ラムダを模倣したテストファイルは正常に動作します。
  7. サンプルコードはhttp://pastebin.com/R2e3jwwaです。ここでdb情報は削除されています。

ありがとうございます。

+0

の問題の詳細情報を見つけることができますか? –

+0

複数のサーバーを試してみてください。内側に1つ、外側に1つ。何も動作せず、モジュールからのエラーまたはタイムアウトエラーはありません。ラムダからちょうど。 – donald

+0

他のサーバからMongoDBに接続できますか? –

答えて

3

奇妙なことに、callback(null, response)context.done(null, response)に変更するだけで問題が解決しました。このナンセンスは私たちがここで過ごすのが好きだったよりも時間がかかりました。

のMongoDBサーバはVPC内のEC2インスタンス上である場合、あなたはここにhttps://github.com/serverless/serverless/issues/1036

+0

先生、ありがとうございます。ドキュメンテーションを掘り下げて、クラウドウォッチのログは私にタイムアウト以上のものを与えませんでした。 最初の実行は成功し、 'context.done(null、response)'が呼び出されない、つまり 'callback'が呼び出された場合、環境変数は上書きされているようです。 – olingern

+1

ハ!それも私たちを夢中にさせた。あなたのラムダ関数の先頭に 'context.callbackWaitsForEmptyEventLoop = false;'を追加する方法もあります。その後、 'callback'をタイムアウトなしで使用することができます –

+1

THANKS SO MUCH ... mongodbにdynamodbを使ってうまく動作していたコードを切り替えた後、この問題を解決しようと4〜5日を費やしました。私は、少なくともatalastのプロセスでVPCについて多くを学んだ。 –

関連する問題