2016-06-13 11 views
9

私はJavascriptの4.3ランタイムで2つのラムダ関数を使用しています。私は最初に実行し、それは2番目の同期を呼び出します(同期はインテントです)。問題は2回目のタイムアウト(60秒)ですが、実際にはわずか22秒で終了します。ラムダコールバックコール後にタイムアウトする

flow

ラムダ関数 I午前、もはやためCloudWatchのログを取得するが、本当の問題は、(私が思う)機能Bです回:ここ

は2つのラムダ関数との間の流れです何の理由もありません。

: - - 上記の「成功」のログ文は画像に表示されて含まれ、以下に含まれている

cloudwatch logs

終わりにファンクションBのコード:ここで

はこれを説明するためにいくつかのCloudWatchのログをです

code example

は、もともと私はあなたがOオフsucceed()と呼ばnodejs 0.10.x方法をcallback(null, 'successful ...')ラインを有しておりませんコンテキスト。必死で私は両方を加えましたが、結果は同じです。

誰もが何が起こっているのか考えていますか?私はこれをデバッグすることができますどのような方法ですか? AとBとの間の呼び出しロジックは、Bがで開始状態の違いを場合


は、ここで呼出しです:

invocation of Function b

+10

私はまだラムダ+ノード4.3のハングを取得していますが、[context.callbackWaitsForEmptyEventLoop = false;](https://aws.amazon.com/blogs/compute/)を設定しています。 node-js-4-3-2-runtime-now-on-lambda /)は、私が遭遇したものに似ている場合、あなたが見ているものの回避策になるかもしれません - 私はmysql接続を持っていました切断され、イベントループは空ではありませんでした。示されているように値を設定すると、問題が判明しました(run-until-timeoutを「修正」することによって)。その証拠を踏まえて、私はその接続を閉じることで正しく解決することができました。その時点で回避策は必要なくなりました。 –

+0

それは私が従うことができるスレッドだと思う。 4.3コールバックが何をしているのかの機能的なバリエーションを忘れていました。ありがとう!注:私はこの質問をAWSに落とし、多くの人々がこの問題を抱えていると言いました。また、多くの人々が0.10に戻って問題を解決したと言いました。それは私のために働いたが、明らかにこれは素晴らしい解決策ではない。というのも、私はむしろ優雅に/制御されたやり方で閉じようとするオープンなつながりがあるということだ。 – ken

答えて

16

Michael - sqlbotとして前記しました;問題は、開いている接続がある限り、空ではないイベントループのため、コールバックをコールしても関数が終了しないように見えます。開いているRedis接続で同じ問題があった。解決策はcontext.callbackWaitsForEmptyEventLoop = false;

+0

これは以前は機能していましたが、もう動作しません。私はredis接続で同じ問題に直面しています –

+0

私はこれを動作させることができませんでした。また、ノードmysql githubのスレッドを読んでタイムアウトを開始すると、これをtrueに設定する必要があるかもしれません。 – red6

関連する問題