2017-04-19 15 views
0

レポートエンジンからデータを収集する要求を受け取るNodeJSエンドポイントがあります。 要求エンドポイントを維持するため、生成されたレポートのいくつかに(データ収集 - >レポート - > PDFに変換 - >関連する人に電子メールを送信する)いくつかのステップがあるため、受信リクエストをジョブ自体から分離したい。 200/201AWS SQSを使用して長いクエリを処理する

と私は、要求を受け入れるSQSに変数を入れて対応できるAWS.SQSを使用

は、もう一方の端にこの仕事を拾うの周りより良いプラクティスのいくつかは何ですか? ラムダ関数をトリガーする場合、200/201を送る前にその関数が完了するのを待たなければなりませんか?または私がすることができます:

Accept Request -> 
Job to SQS -> 
Initiate Lamba function -> 
200 Response. 

代わりに、他のどのようなオプション処理自体からのインバウンド要求を分離するために利用できるだろうか?ここで

答えて

2

いくつかのオプションがされています

  1. は、あなたのSQSキューに要求を入れ、すぐに200応答を返します。 EC2サーバでSQSキューをポーリングし、SQSからメッセージを取得したときにクエリを実行するプロセスがある。
  2. ラムダ関数を非同期で呼び出し、クエリを実行するために必要なプロパティを渡し、すぐに200応答を返します。 Lambda関数を非同期に呼び出したので、Lambda関数を呼び出したNodeJSコードは関数が完了するのを待たずに終了します。
  3. #2の代わりに、SNSトピックに要求を送信し、LNSDA機能を呼び出すようにSNSトピックを構成することができます。何らかの理由でLambda関数が失敗した場合にSNSが再試行するため、おそらくラムダを使用している場合はこれが最良の方法です。

SQSとLambdaを組み合わせることはお勧めできません。これらの2つのサービスはうまく統合できないためです。一方、SNSはラムダと非常によく統合されています。

また、ラムダ関数の呼び出しは、現在のところラムダ関数が実行できる最大時間であるため、5分以内に完了できることを確認する必要があります。 5分以上実行する必要がある場合は、EC2またはECSを使用する必要があります。

私はAWS Step Functionsがあなたのユースケースに適していると思います。

+0

恐ろしいですが、非同期ラムダ関数は、私が行くことを考えていました。私は、クラウドウォッチを使って、ジョブが5分のしきい値を超えたかどうかを教えてくれます。 - ご協力ありがとうございました! –

関連する問題