web-dev-qa-db-ja.com

複数のLambdaトリガーが設定されたAWS SQSの動作

トリガーとして設定されたmultiple Lambdasを使用してSQSキューをセットアップしました。これはAWSのAPIで許可されていますが、意図された動作が明確ではありません。

たとえば、1つのメッセージがキューから取り出され、各Lambdaに送信されますか?または代わりに、各Lambdaは、メッセージをキューから個別にプルするポーリングサービスとして機能しますか?

私のテストから、それは後者であるように見えますが、私はこれがどこにでも文書化されているのを私の生涯で見つけることができません。後者は、AWS Lambdaの同時実行機能を考えると、あまり意味がありません。

SQSメッセージは、キューからのみread onceにすることができ、1つのコンシューマーによって処理されている間、他のコンシューマーからは見えません。複数のラムダがある場合、それぞれがメッセージのシェアを取得しますが、一度に1つのメッセージが複数のラムダに配信されることはありません。

ラムダの処理が失敗した場合(ラムダがキューによってトリガーされた場合)、または 可視性タイムアウト 内にメッセージが削除されなかった場合、SQSメッセージはキューに再挿入されます =(Lambdaがキューをポーリングしている場合)。

複数のLambdaで同時に処理される単一のメッセージが必要な場合は、次のいずれかを実行できます。

  1. ファンアウトSNSへのSQSメッセージ複数のサブスクライバー(たとえば、すべて同じメッセージを処理する複数のLambda)を持つ、または
  2. sQSの代わりにKinesis streamを使用します。 Kinesisは、同じメッセージの複数のコンシューマーをサポートしています。

それが役に立てば幸い:)

5
MLu