Create an SQS queue that subscribes to an SNS topic.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Serverless patterns - SNS to SQS (uksb-1tthgi812) (tag:sns-sqs)
Resources:
# Define the SQS queue
MySqsQueue:
Type: AWS::SQS::Queue
# Define the SNS topic
MySnsTopic:
Type: AWS::SNS::Topic
Properties:
# Subscribes the SQS queue to the SNS topic
Subscription:
- Protocol: sqs
Endpoint: !GetAtt MySqsQueue.Arn
# Policy allows SNS to publish to this SQS queue
SnsToSqsPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: "Allow SNS publish to SQS"
Effect: Allow
Principal:
Service: "sns.amazonaws.com"
Resource: !GetAtt MySqsQueue.Arn
Action: SQS:SendMessage
Condition:
ArnEquals:
aws:SourceArn: !Ref MySnsTopic
Queues:
- Ref: MySqsQueue
Outputs:
MySqsQueueName:
Description: SQS queue name
Value: !GetAtt MySqsQueue.QueueName
MySqsQueueArn:
Description: SQS queue ARN
Value: !GetAtt MySqsQueue.Arn
MySqsQueueURL:
Description: SQS queue URL
Value: !Ref MySqsQueue
MySnsTopicName:
Description: SNS topic name
Value: !GetAtt MySnsTopic.TopicName
MySnsTopicArn:
Description: SNS topic ARN
Value: !Ref MySnsTopic
Visit the GitHub repo for this pattern.
git clone https://github.com/aws-samples/serverless-patterns/ cd serverless-patterns/sns-sqs
sam deploy --guided
aws sns publish --topic-arn ENTER_SNS_TOPIC_ARN --subject testSubject --message testMessage
.aws sqs receive-message --queue-url ENTER_YOUR_QUEUE_URL
.sam delete --stack-name STACK_NAME
.aws cloudformation list-stacks --query "StackSummaries[?contains(StackName,'STACK_NAME')].StackStatus"