1政策だけでなく、最大同時インスタンス:1の両方を尊重するための設定AWS SQS /ラムダトリガ

hotmeatballsoup:

SQSキューに送信されたメッセージに応答して実行すべきJavaのラムダを書くためにAWS Java SDKを使用してJava 8こちら。

理想的には、1-と専用1ラムダインスタンスが起動されます/に対して実行レコードのSQSキューに送信されました。5つのメッセージがキューに送信されているのであれば、5つのラムダは火(かだろう-私のラムダ構成に応じて-私は私の期待は保留/未消費SQSメッセージは、次の利用可能なを待つということであり、その場合には、同時ラムダの最大#を設定することができラムダ)。

これは、ハード要件、単なる理想的ではありません。

私は中にいることに気づいcom.amazonaws.services.lambda.runtime.events.SqsEventたクラスがあり、getRecords() : List<SQSMessage>私に関係するビットを持っている方法は。私にとって、これは単一のラムダインスタンスを供給することができることを意味し、より実行につき1件のSQSメッセージよりも、再び、私の希望の動作に反します。

それが唯一のようにラムダ・トリガーを設定する方法がある場合、私は思ったんだけどだから今までに発射するラムダがあるまで当りSQSキューメッセージたら、またメッセージがSQSで待たせる、設定「同時ラムダインスタンスの最大#」を称えるは準備が整いました。だから、別の例として、私は3(3)に同時ラムダセットの最大#を持っていると言う、そして5つのメッセージを同時にキューに送信されます。この場合、私は、火災に3つのラムダを望む5キューに入れられたメッセージの各処理1、および別の1が起動し、それらを拾うことができるように5つのメッセージの2は、仕上げにそれらの3つのラムダの1を待っていることでしょう。

これは行うことは可能ですか?またはラムダは、単に与えられたラムダの実行に提出することをどのように多くのメッセージ何とか自力で(?)「決定」のでしょうか?もしそうなら、誰もがこれを決定する方法を知っていますか?

マーティンは実行されます。

TL; DR

@josephはすでに正しく指摘したように、あなたが使用できるイベントソースマッピングのBatchSizeのようになります1に設定しgetRecords()、リターン最大限に1 SQSMessageを一度に最大限に1メッセージを処理するためには、あなたがラムダ関数の設定する必要が予約された並行性をも正確に述べたように、しかし1に、これはのために最適ではない標準 SQSキュー。イベント・ソース・マッピングは、いくつかの中に実行されますTooManyRequestsException:レート超過 CloudWatchのログに記録されるエラーを。

AWSブログ投稿[1]に記載のようにラムダ関数の調整に依存することなく適切な順次一メッセージ・アット・タイム処理パターンを使用するように、SQS FIFOキューを使用します。それは言う:「総同時実行がSQS FIFOキュー内のユニークMessageGroupIdsの数以下です」。それはあなたが正確に一つ設定することができ、あるMessageGroupIdをするために、FIFOキューをSQS、あなたのために:

  • ラムダを発射一度SQSキューメッセージあたり(BATCHSIZE = 1ので)
  • また、正確に1(同時実行数= #uniqueメッセージのグループID = 1理由)の「同時ラムダインスタンスの最大#」を尊重しながら、

ユニークなメッセージグループIDの数は、このように最大です。SQS FIFOキューのイベント・ソースマッピングによる同時ラムダの呼び出しの数。

いくつかのより多くの情報

ラムダのためのJavaライブラリ

私の知る限り見ることができるように、AWS(例えばのPOJOのセットを提供SQSEventライブラリにAWS-ラムダのJavaイベント着信SQSイベント[3]を処理するための[2])。SQSイベントはラムダイベントソースマッピングによって送達所与POJOにデシリアライズされます。POJOのためのドキュメントSQSEventは JavaDoc.io [4]にも利用可能であり、ソースコードはGitHubの[5]で入手可能です。この方法は、getRecords()のリストを返しSQSMessageAWSラムダイベントソースマッピングが実際1~10 SQSメッセージ間提供することができるので、オブジェクトを。

ラムダイベントソースマッピング

イベント・ソース・マッピングが作成され、ソース・タイプに固有の属性で構成されています。我々はSQSとの統合を見ているように、我々はSQS固有の属性のみを考慮に入れる必要があります。これらは、主に以下のとおりです。のBatchSizeEventSourceArn完全なリストについては、[6]を参照してください。属性は、SQSソースタイプに適用されない場合は、その説明は、キーワードで始まります(Streams)

あなたは、設定しなければならないのBatchSizeを使用して取得されSQSメッセージの数を制限する場合getRecords()デフォルト値は10です。

ラムダスケーリング

ドキュメント[7]に記載のように、ラムダ同時実行制限は、ラムダ関数によって同時に処理されるSQSメッセージのバッチの数を制限するために使用することができます。しかし、これはラムダ関数を呼び出してからイベントソースマッピングを防ぐことはできません。少なくとも、私は反対のことを述べて任意の公式のソースを見つけることができなかった - 私が間違っているなら、私を修正してください。

すなわち、スロットルエラーの多くは、SQSキューが頻繁に使用されている場合(コード429)スローされます。順番にメッセージを処理するためにイベントソースを指示することにより、この問題を克服することが可能です。これは、Amazon SQS FIFOのイベントソースを使用することによって達成されます。それはかなり新しい機能です。[8]

概要

すべてのすべてで、私がすることをお勧めします:

  • 代わりに、標準タイプのFIFOタイプでSQSキューを使用
  • 1へのBatchSizeが設定されたイベントソースマッピングを使用
  • 同じ値を使用しMessageGroupIdのすべてのSQS全体の属性のSendMessage APIの呼び出し[9]
  • SQS FIFOキューと標準キュー[10]〜[11]の間の違いを熟知して - [12]を含む価格差
  • それはFIFOキューのイベントソースマッピングによって処理されるよう、必ずしも、予約並行処理を設定していません

リファレンス

[1] https://aws.amazon.com/blogs/compute/new-for-aws-lambda-sqs-fifo-as-an-event-source/
[2] HTTPS://docs.aws.amazon。 COM /ラムダ/最新/ DG /で-SQS-作成-のpackage.html#-SQS-例展開-PKG-Javaに
[3] https://docs.aws.amazon.com/lambda/latest/dg/ -sqs.html
[4] https://javadoc.io/static/com.amazonaws/aws-lambda-java-events/2.2.2/com/amazonaws/services/lambda/runtime/events/SQSEvent.html
[ 5] https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/ SQSEvent.java
[6] https://docs.aws.amazon.com/lambda/latest/dg/API_CreateEventSourceMapping.html#API_CreateEventSourceMapping_RequestBody
[7]https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html
[8] https://aws.amazon.com/about-aws/whats-new/2019/11/aws-ラムダ・サポート・アマゾン-SQS-FIFO・イベント・ソース/ NC1 = h_ls?
[9] https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
[10] のhttps://ドキュメント.aws.amazon.com / AWSSimpleQueueService /最新/ SQSDeveloperGuide /使用-messagegroupid-property.html
[11] https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html#FIFO-queues -moving
[12] https://aws.amazon.com/sqs/pricing/?nc1=h_ls

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=372731&siteId=1