LoginSignup
2
0

More than 1 year has passed since last update.

AWS Lambdaの非同期呼び出し機能やデッドレターキューとか良く分からなかったので検証してみた

Posted at

目次

はじめに

AWS Lambdaで非同期呼び出し機能がありますが、動作がイマイチ良く分からなかったので実際に検証してみました。

AWS Lambdaの非同期呼び出し機能とは

Lambdaが非同期呼び出しされた際にエラーとなった場合に、リトライ処理をしたりデッドレターキューにキューを入れることができる機能です。

リトライに関しては以下に記載のあるように、1回目のリトライは1分後、2回目のリトライは2分後に行われます。

Lambda manages the function's asynchronous event queue and attempts to retry on errors. If the function returns an error, Lambda attempts to run it two more times, with a one-minute wait between the first two attempts, and two minutes between the second and third attempts.

言葉で書いてもイメージが湧きづらいと思うので、以下検証してみます。

検証準備

SQS

デフォルトの設定でキューを作成します。

image.png

Lambda

新規作成します。

また、コードはエラーが出るように以下のコードを用意しました。

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    
    console.error(`ERROR!!!`);
    throw new Error(`ERROR !!!`);
    
    return response;
};

また、以下のように非同期呼び出し機能でデッドレターキューサービスに先ほど作成したSQSのキューを指定します。

image.png

EventBridge

適当に時間を指定し、Lambdaを実行してみます。

image.png

検証内容

ログ

以下のように、リトライ処理が行われていることが分かります。

  • 20:10 → 初回実行
  • 20:11 → 1回目リトライ
  • 20:13 → 2回目リトライ

image.png

SQS

上記ログのとおり、2回リトライしてもエラーのままであることから、以下のようにデッドレターキューにキューが入っています。

image.png

メッセージをポーリングしてみます。

image.png

中身をみてみると、先ほどのログで確認したリクエストIDやエラーメッセージが入っていることが分かります。

image.png

まとめ

今回はLambdaの非同期呼び出し機能について検証しました。
本機能を使うことで、エラー時にリトライ処理ができること、デッドレターキューにキューが移動することを確認できました。
Lambdaでリトライ処理を実装したい人はこの機能を使ってみても良いかもしれません。

2
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
2
0