6

私はServerless Frameworkを使用してAWS Lambda関数を実装しました。そのラムダ関数はRDSとMongoDBを使用しています。 MongoDBエンドポイントは約500ms実行されますが、RDSは12秒(コールドスタート)と約3秒(ホットスタート)で動作します。AWS LambaのRDS使用時のパフォーマンスが悪い

注:このエンドポイントではSequelizeを使用しています。

私のRDSラムダエンドポイントをスピードアップするには?あなたの機能モジュールの定義の後の最初の行で

答えて

8

、次の行を追加します

context.callbackWaitsForEmptyEventLoop = false; 

callbackWaitsForEmptyEventLoop

  • デフォルト値は唯一のデフォルトの動作を変更する
  • 真便利ですコールバック

あなたは、コールバックはイベントループでイベントがあっても、呼び出された後、すぐにプロセスを凍結するAWSラムダを要求するために、このプロパティをfalseに設定することができます。 AWS Lambdaは、プロセス、Node.jsイベントループ内のすべての状態データとイベントをフリーズします(ラムダ関数が次に呼び出されたときに処理されるイベントループ内の残りのイベントと、AWS Lambdaがフリーズプロセスを使用することを選択した場合)

詳細はあなたがすぐにまたはより具体的にcontext.succeed/context.fail返すために、古いcontext.done機能を使用することができthis記事

+0

@alishこの回答を正しい回答としてマークしました。パフォーマンスがどれだけ向上したかを教えてください。あなたは3秒〜12秒でしたが、今は何を持っていますか? – Zanon

0

をお読みください。

実行中のラムダを突然終了させるのではなく、(APIゲートウェイのような)呼び出し側に応答し、バックグラウンドで実行し続けますが、最大でも〜15秒。

おかげさまで、ちょっと後で実行する予定がsetTimeoutの場合、Lambdaは明示的に非同期関数呼び出しに電荷を保持するだけなので、無料で実行するには約15秒かかります。

+0

回答を返す文書がありますか?私は何も見つけることができません。イベントループに残ったものは次の呼び出しで実行されると思った。 – Alex

+0

どちらの部分?コンテキスト関数は、AWS Lambdaプログラミングモデル(http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html#nodejs-prog-model- oldruntime-context-methods)、それは古くなっていますが、下位互換性のために存在しています。この点をテストすることができます。 'setTimeout'遅延は、文書化されていないトリビアです。 –

関連する問題