1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQSに複数Lambdaトリガーが設定して、メッセージが入ってきた場合これってどうなる?

Last updated at Posted at 2023-10-29

概要

AWSにはメッセージキューサービスとしてSimple Queue Service(SQS)が存在します
またSQSで管理しているキューに対してメッセージが入ってきたとき、処理させるLambdaを設定できます

ふと気になってい見てみると1つのキューに対して複数のLambdaが紐付けると知りました。
とはいえ実際にメッセージを処理させるのは1種類のLambdaである方が都合が良いと思いますが複数のメッセージが入ってきたときにどのような挙動になるか見ていきましょう

テスト用の処理

  1. ログ出力するLambdaを作成
  2. SQS作成
  3. SQSのトリガーに作成したLambdaを紐つける

Lambdaの関数名、同時に処理するSQSのメッセージ数、処理しているメッセージの中身をそれぞれ出力させます

handler.js
exports.handler = async (event, context) => {
  console.log(context.functionName)
  console.log(event.Records.length)
  event.Records.forEach((record) => {
    console.log(record.body)
  })
}

SQSも合わせて作成し、CloudShellからメッセージを送信して見ましょう

$ aws sqs send-message-batch --queue-url https://sqs.ap-northeast-1.amazonaws.com/[AWSアカウントID]/[SQSのQueue名] --entries \
'{"Id":"1","MessageBody":"Message 1 content"}' \
'{"Id":"2","MessageBody":"Message 2 content"}' \
'{"Id":"3","MessageBody":"Message 3 content"}' \
'{"Id":"4","MessageBody":"Message 4 content"}' \
'{"Id":"5","MessageBody":"Message 5 content"}' \
'{"Id":"6","MessageBody":"Message 6 content"}' \
'{"Id":"7","MessageBody":"Message 7 content"}' \
'{"Id":"8","MessageBody":"Message 8 content"}' \
'{"Id":"9","MessageBody":"Message 9 content"}' \
'{"Id":"10","MessageBody":"Message 10 content"}'

実際のログ出力

今回はLambdaの名前はmy-serverless-app-dev-processMessage1|2と作成しました
1つ目の画像がprocessMessage1のログ、2つ目の画像がprocessMessage2のログとなっています

スクリーンショット 2023-10-29 23.43.09.png

スクリーンショット 2023-10-29 23.42.45.png

このことからSQSに複数のLambdaトリガーを設定すると
どれか1つのLambdaで処理がされた場合、他のLambdaが実行されない」ということが確認できました。
そもそもとして複数のLambdaで処理させる必要があるケースならSQSではなくSNSを使えばうまくいきそうな感じがします :eyes:

またメッセージ処理を早める目的であればLambdaがメッセージの同時に処理できる数を上げるほうが適切ですね

まとめ

  • SQSでは複数のLambdaトリガーを設定できる
  • 複数のLambdaを設定した場合、メッセージ単位でどのLambdaに処理させるか決めることはできない

また、複数のLambdaトリガーを設定する事による活用法など知っていればぜひ教えてください :pray:

参照

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs.html
https://dev.classmethod.jp/articles/compare_sns_with_sqs/

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?