web-dev-qa-db-ja.com

コールバック後のawsラムダ実行が保証されていますか?

API GWを介して呼び出されたnode4ラムダ関数は、一連の遅いAPI呼び出しを行います。すべてが完了するまでユーザーを待たせないために、コードを次のようにする予定です。

function(event, context, callback) {
  ...
  // Return users API GW call now
  callback(null, data);
  // Do the heavy lifting afterwards.
  longApiCall().then(otherLongApiCalls)
}

しかし今、私は AWS docs を読みました:「コールバックは、プロセスをフリーズして結果を呼び出し元に返す前に、Node.jsランタイムイベントループが空になるまで待機します」

これは、API GWがlongApiCallsの完了前または完了後に応答データを返すことを意味しますか?

その後、すべてが完了する前に「早く戻る」方法の提案された方法はありますか?

14
bebbi

現在の構成では、API Gatewayは、Lambda関数の実行が終了するまで待機してから、応答を送信します。オプションは次のとおりです。

  1. API Gatewayエンドポイントの統合タイプをAWS Serviceに変更し、APIGatewayにLambda関数を非同期で呼び出させます。これは文書化されています ここ
  2. API Gatewayが呼び出すLambda関数に、別のLambda関数を非同期で呼び出してから戻る以外に何もしないようにします。
  3. API Gateway、またはAPI Gatewayによって呼び出されるLambda関数を使用して、SNSトピックにメッセージを送信します。次に、SNSトピックで長いAPI呼び出しを処理するLambda関数をトリガーします。これにより、マイクロサービスが少し分離されます。
  4. API Gateway、またはAPI Gatewayによって呼び出されるLambda関数で、1つまたは複数のLambda関数を介して長いAPI呼び出しを処理するように設定された AWS Step Function をトリガーします。長いAPI呼び出しで、単一のLambda関数の実行時間制限である5分を超えるリスクが発生する場合は、このアプローチをお勧めします。
24
Mark B

オプション5.ラムダ関数にメッセージをSQSにキューイングさせ、別のラムダまたはec2、あるいは手間のかかる作業を行いたい場所からキューをポーリングします。

1
Andi