Help us understand the problem. What is going on with this article?

Lambdaのデッドレターキュー(DLQ)設定は非同期呼び出しでのみ有効

はじめに

SQSをイベントソースにしてLambdaを実行する仕組みを検証している際、DLQの設定を行っているのに、実行に失敗した際のメッセージがDLQに移動しない!という状況に陥りました。

そもそもSQS側にDLQの設定があるので、どちらを利用すればいいのかというのを確かめるために検証していたのですが、少しハマったので共有します。

SQSをイベントソースにした場合のLambda呼び出しは「同期呼び出し」

これが分かっていなかったため、ずっと「非同期呼び出し」に関する説明を追っていました。

非同期呼び出しの場合、実行が失敗すると2回まで再試行を行う、という説明があるのですが、CloudwatchLogsで実行ログを確認しても再試行している様子がありません。念のため、ドキュメントで説明に使っているX-rayというサービスも使って実行のトレースをしてみましたが、実行は1度きりしか行っていないよう。

なぜ1回しか呼び出されないのか、その答えを求めて調べていると、今回の答えにたどり着きました。気づくきっかけになったのは以下の記事です。

https://qiita.com/keni_w/items/dc651c9fc794f5a8ad64

これをきっかけに公式のドキュメントでもSQSは「同期呼び出し」であることがわかり、またDLQは「非同期呼び出し」の場合のみ有効であることがわかりました。

なおAWSのサービスからLambdaを呼び出す場合は、そのサービスがどの呼び出し方をしているかを確認するのが手っ取り早いです。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html

まとめ

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away