Search code examples
amazon-web-servicesamazon-sqsserverless

serverless: configure deadletter SQS queue


I use serverless to configure a Lambda function that receives events via AWS SQS. Now I want to add a dead letter queue. That's what I have so far:

service: myservice

plugins:
  - serverless-plugin-lambda-dead-letter

provider:
  name: aws
  runtime: go1.x
  region: eu-central-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "sqs:*"
      Resource:
        - "*"

package:
 exclude:
   - ./**
 include:
   - ./bin/**

functions:
  main:
    handler: bin/send-mail
    deadLetter:
      sqs:
        queueName: send-mail-dlx
        messageRetentionPeriod: 200000
    events:
      - sqs: arn:aws:sqs:eu-central-1:123456789:send-mail

Both SQS queues were created successfully, but the dead letter queue send-mail-dlx isn't assigned as dead letter queue to send-mail. How do I assign it properly in my serverless config?


Solution

  • Found it: https://github.com/serverless/serverless/issues/4647#issuecomment-474306379

    resources:
      Resources:
        MyQueue:
          Type: "AWS::SQS::Queue"
          Properties:
            QueueName: "MyQueue"
            VisibilityTimeout: 30
            MessageRetentionPeriod: 60
            RedrivePolicy:
              deadLetterTargetArn:
                "Fn::GetAtt":
                  - ReceiverDeadLetterQueue
                  - Arn
              maxReceiveCount: 1
        ReceiverDeadLetterQueue:
          Type: "AWS::SQS::Queue"
          Properties:
            QueueName: "receiverDLQ"
            MessageRetentionPeriod: 1209600 # 14 days in seconds