📬
【Serverless Framework】Lambda関数の非同期呼び出し失敗をSQSに送信させる
はじめに
ServerlessFrameworkを利用してLambda関数の非同期呼び出し失敗をSQSに送信する方法を備忘録として投稿させていただきます。
環境
ServerlessFramework
NodeJS:18
公式ドキュメント
図解
本投稿で構築するインフラでは、Lambdaの非同期呼び出しに失敗すると、図のような流れでメッセージ(イベント情報)がSQSに送信されます。
実装
01. SQSを作成
Lambda関数の非同期呼び出し失敗
を送信先するSQSを作成する。
serverless.yml
resources:
Resources:
xxxxxFailureQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:service}-${sls:stage}-xxxxxFailureQueue
02. 非同期呼び出しの送信先の設定
Lambda関数に非同期呼び出し失敗の送信先(SQS)
を追加する。
(動作確認用のイベントスケジュールも合わせて設定しておく。)
serverless.yml
functions:
xxxxx:
runtime: nodejs18.x
handler: function/xxxxx.handler
timeout: 15
memorySize: 128
events:
# イベントスケジュール
- schedule:
rate: rate(1 minute) # 1分間隔で実行(動作確認用)
enabled: true
# 非同期呼び出しの送信先の設定
destinations:
onFailure:
type: sns
arn: !GetAtt xxxxxFailureQueue.Arn
03. デプロイ
serverless deploy
コマンドでデプロイする。
$ serverless deploy
04.動作確認
Lambda関数の同時実行を「0」に設定する。
Lambda関数には1分間隔で実行されるスケジュールを設定したため、しばらくすると、Lambda関数の非同期呼び出しに失敗する。
非同期呼び出しの送信先
に設定したSQSにメッセージが届いてることを確認する。
Discussion