Configuring an Amazon SNS dead-letter queue for a subscription
A dead-letter queue is an Amazon SQS queue that an Amazon SNS subscription can target for messages that can't be delivered to subscribers successfully. Messages that can't be delivered due to client errors or server errors are held in the dead-letter queue for further analysis or reprocessing. For more information, see Amazon SNS dead-letter queues and Amazon SNS message delivery retries.
This page shows how you can use the AWS Management Console, an AWS SDK, the AWS CLI, and AWS CloudFormation to configure a dead-letter queue for an Amazon SNS subscription.
Note
For a FIFO topic, you can use an Amazon SQS queue as a dead-letter queue for the Amazon SNS subscription. FIFO topic subscriptions use FIFO queues, and standard topic subscriptions use standard queues.
Prerequisites
Before you configure a dead-letter queue, complete the following prerequisites:
-
Create an Amazon SNS topic named
MyTopic
. -
Create an Amazon SQS queue named
MyEndpoint
, to be used as the endpoint for the Amazon SNS subscription. -
(Skip for AWS CloudFormation) Subscribe the queue to the topic.
-
Create another Amazon SQS queue named
MyDeadLetterQueue
, to be used as the dead-letter queue for the Amazon SNS subscription. -
To give Amazon SNS principal access to the Amazon SQS API action, set the following queue policy for
MyDeadLetterQueue
.{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } }] }
To configure a dead-letter queue for an Amazon SNS subscription using the AWS Management Console
Before your begin this tutorial, make sure you complete the prerequisites.
-
Sign in to the Amazon SQS console
. -
Create an Amazon SQS queue or use an existing queue and note the ARN of the queue on the Details tab of the queue, for example:
arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
Sign in to the Amazon SNS console
. -
On the navigation panel, choose Subscriptions.
-
On the Subscriptions page, select an existing subscription and then choose Edit.
-
On the Edit
1234a567-bc89-012d-3e45-6fg7h890123i
page, expand the Redrive policy (dead-letter queue) section, and then do the following:-
Choose Enabled.
-
Specify the ARN of an Amazon SQS queue.
-
-
Choose Save changes.
Your subscription is configured to use a dead-letter queue.
To configure a dead-letter queue for an Amazon SNS subscription using an AWS SDK
Before you run this example, make sure that you complete the prerequisites.
To use an AWS SDK, you must configure it with your credentials. For more information, see The shared config and credentials files in the AWS SDKs and Tools Reference Guide.
The following code example shows how to use SetSubscriptionAttributesRedrivePolicy
.
To configure a dead-letter queue for an Amazon SNS subscription using the AWS CLI
Before your begin this tutorial, make sure you complete the prerequisites.
-
Install and configure the AWS CLI. For more information, see the AWS Command Line Interface User Guide.
-
Use the following command.
aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i --attribute-name RedrivePolicy --attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"
To configure a dead-letter queue for an Amazon SNS subscription using AWS CloudFormation
Before your begin this tutorial, make sure you complete the prerequisites.
-
Copy the following JSON code to a file named
MyDeadLetterQueue.json
.{ "Resources": { "mySubscription": { "Type" : "AWS::SNS::Subscription", "Properties" : { "Protocol": "sqs", "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint", "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic", "RedrivePolicy": { "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" } } } } }
-
Sign in to the AWS CloudFormation console
. -
On the Select Template page, choose Upload a template to Amazon S3, choose your
MyDeadLetterQueue.json
file, and then choose Next. -
On the Specify Details page, enter
MyDeadLetterQueue
for Stack Name, and then choose Next. -
On the Options page, choose Next.
-
On the Review page, choose Create.
AWS CloudFormation begins to create the
MyDeadLetterQueue
stack and displays the CREATE_IN_PROGRESS status. When the process is complete, AWS CloudFormation displays the CREATE_COMPLETE status.