📬

【Serverless Framework】Lambda関数の非同期呼び出し失敗をSQSに送信させる

2023/12/10に公開

はじめに

ServerlessFrameworkを利用してLambda関数の非同期呼び出し失敗をSQSに送信する方法を備忘録として投稿させていただきます。

環境

ServerlessFramework
NodeJS:18

公式ドキュメント

図解

本投稿で構築するインフラでは、Lambdaの非同期呼び出しに失敗すると、図のような流れでメッセージ(イベント情報)がSQSに送信されます。
image



実装

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

01

04.動作確認

Lambda関数の同時実行を「0」に設定する。

02

Lambda関数には1分間隔で実行されるスケジュールを設定したため、しばらくすると、Lambda関数の非同期呼び出しに失敗する。

非同期呼び出しの送信先に設定したSQSにメッセージが届いてることを確認する。

03

Discussion