記事検索

検索ワードを入力してください。
Sky Tech Blog
【AWS】デッドレターキュー(DLQ)を​検討する​際の​注意ポイント

【AWS】デッドレターキュー(DLQ)を​検討する​際の​注意ポイント

AWSのデッドレターキュー(DLQ)について、その役割とAmazon SNSおよびAWS Lambdaにおける設定例を基に、メッセージがキューに送信される具体的な条件と注意点を解説します。非同期呼び出しの特性を理解し、どのレイヤーでの失敗を検知したいかを明確にした上で、適切なサービスにDLQを設定することの重要性を紹介します。

はじめに

AWS のアーキテクチャを設計する際に、処理に失敗することを考慮して、デッドレターキュー(DLQ)を採用されたご経験はございますでしょうか?
デッドレターキュー(DLQ)にキューが積まれる条件を正しく理解していないと要件にあった設計が困難になります。
この記事では、デッドレターキュー(DLQ)の使用例をもとに注意ポイントをご紹介させていただきます。

デッドレターキュー​(DLQ)とは

デッドレターキュー(DLQ)は、AWSのメッセージングサービスにおいて、処理に失敗したメッセージを保存するための特別なキューです。
これにより、失敗したメッセージを後で確認し、問題を特定して対処することができます。
また、システムの信頼性とメンテナンス性が向上します。

デッドレターキュー​(DLQ)の​設定例

こちらのシステム構成図は特定の通知をEメールへ送信と、AWS Lambdaの関数を呼び出すものとなります。
下記システム構成図のように、 Amazon SNS と AWS Lambda にデッドレターキュー(DLQ)を設定することができます。

デッドレターキュー​(DLQ)に​積まれる​条件に​ついて

上記の Amazon SNS と AWS Lambda に設定されているデッドレターキュー(DLQ)について、どのタイミングでキューが送信されるかの理解が必要です。

Amazon SNS に​設定されている​デッドレターキュー​(DLQ)

Amazon SNS に設定されているデッドレターキュー(DLQ)は、SNS がサブスクライバー(今回の例では AWS Lambda)へメッセージを配信できなかった場合に、メッセージが送信されます。

ここで注意すべき点は、 Amazon SNS と AWS Lambda の連携は 非同期呼び出し であるという点です。
Amazon SNS は AWS Lambda 関数そのものの処理結果(成功・失敗)までは判定しておらず、「AWS Lambda サービスへの起動リクエストが正常に受け付けられたか」のみをもって配信成功と判断します。

そのため、以下のようなケースでは Amazon SNS 側の デッドレターキュー(DLQ) にはメッセージは送信されません。

  • AWS Lambda 関数が正常に起動したが、処理途中でエラーが発生した
  • AWS Lambda 関数内のロジックエラーや外部サービス連携失敗により処理が失敗した

一方で、以下のように SNS が配信自体に失敗した場合 には、SNS に設定された デッドレターキュー(DLQ) にメッセージが送信されます。

  • AWS Lambda のエンドポイントが存在しない
  • 権限不足などにより AWS Lambda を起動できない
  • 一定回数のリトライ後も配信に失敗した

AWS Lambda に​設定されている​デッドレターキュー​(DLQ)

AWS Lambda に設定されているデッドレターキュー(DLQ)は、AWS Lambda 関数の実行が失敗した場合 に、イベントデータが送信されます。
特に Amazon SNS からの呼び出しは非同期実行となるため、AWS Lambda 側では以下のような条件で失敗と判定され、デッドレターキュー(DLQ) へ送信されます。

  • 関数の実行中に例外が発生した
  • タイムアウトが発生した
  • 非同期実行における再試行(最大回数)後も処理が成功しなかった

このように、「AWS Lambda の処理結果に起因する失敗」を検知してメッセージを保持したい場合は、AWS Lambda 側に デッドレターキュー(DLQ) を設定する必要があります。

SNS 側の デッドレターキュー(DLQ) と AWS Lambda 側の デッドレターキュー(DLQ) は役割が異なるため、「どのレイヤーでの失敗を検知・再処理したいのか」を明確にした上で、適切なサービスにデッドレterキュー(DLQ)を設定することが重要です。

おわりに

紹介させていただいたリソース以外にも Amazon SQS や Amazon EventBridge にも デッドレターキュー(DLQ)を設定することが可能です。
また、 AWS Lambda に関しては、デッドレターキュー(DLQ)の送信先を Amazon SNS にすることが可能です。
デッドレターキュー(DLQ)に送信される条件について、正しく理解してシステム構成を検討しましょう。
では、よりよい AWS ライフを


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム