SAM関数の非同期失敗イベントの保存が未設定

非同期呼び出しで処理できなかったイベントの保存先を設定してください。

説明

SAM関数のDeadLetterQueueは、Lambdaの非同期呼び出しで再試行回数や保持時間の上限に達したイベントの送信先です。DLQや失敗時の送信先がないと、イベントの調査や再処理が難しくなる場合があります。

想定される影響

失敗した入力が残らないと、原因調査や復旧が遅れるおそれがあります。

対処方法

DeadLetterQueueに標準SQSキューまたはSNSトピックのTypeとTargetArnを指定するか、非同期呼び出しの失敗時の送信先を使ってください。SQSイベントソースの場合は、ソースキューのDLQを設定してください。

例

イメージベースの関数に非同期DLQを追加する例です。イメージURI、実行設定、キューARNは実際のリソースに合わせ、送信権限を確認してください。

変更前

yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: account-id.dkr.ecr.region.amazonaws.com/ecr-repo-name:image-name
      ImageConfig:
        Command:
          - app.lambda_handler
        EntryPoint:
          - entrypoint1
        WorkingDirectory: workDir
      Tags:
        Type: AWS Serverless Function

変更後

yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: account-id.dkr.ecr.region.amazonaws.com/ecr-repo-name:image-name
      ImageConfig:
        Command:
          - app.lambda_handler
        EntryPoint:
          - entrypoint1
        WorkingDirectory: workDir
      Tags:
        Type: AWS Serverless Function
      DeadLetterQueue:
        TargetArn: arn:aws:sqs:us-east-1:123456789012:aaa
        Type: SQS

参考資料