-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Closed
Labels
contributors/good-first-issueGood first issue for a contributorGood first issue for a contributortype/feature
Description
Description:
SAM offers simplified syntax for SNS -> Lambda and with #261 supports adding subscription filter policies. However, a common use case is SNS -> SQS -> Lambda. SAM offers simplified syntax for SQS -> Lambda, but you have to use standard CloudFormation to setup the SNS -> SQS connection and subscription filter policy, which can be verbose.
SAM could add a lot of value by adding an option to the existing SNS event type to create an SQS queue.
Here's an example that uses simple default settings for the queue:
Type: SNS
Properties:
Topic: arn:aws:sns:us-east-1:123456789012:my_topic
# new property that creates an SQS queue between the topic and Lambda function
# When only the boolean is specified, SAM uses the following defaults:
# AWS::SQS::Queue logicalId: <function logicalId><SNS event key>Queue
# AWS::SQS::QueuePolicy logicalId: <function logicalId><SNS event key>QueuePolicy
# BatchSize: default behavior - don't add to `AWS::Lambda::EventSourceMapping` resource so default value is used.
# Enabled: default behavior - don't add to `AWS::Lambda::EventSourceMapping` resource so default value is used.
SqsSubscription: true
FilterPolicy:
store:
- example_corp
price_usd:
- numeric:
- ">="
- 100
Here's an example that specifies additional options for the queue:
Type: SNS
Properties:
Topic: arn:aws:sns:us-east-1:123456789012:my_topic
# new property that creates an SQS queue between the topic and Lambda function
# Default values can be overridden by passing an object instead of a boolean. Supported keys:
# QueuePolicyLogicalId: overrides default logicalId naming of the AWS::SQS::QueuePolicy resource.
# QueueArn: allows the user to specify their own queue instead of having SAM create one on their behalf, allowing them to specify non-default properties on the queue.
# BatchSize: if specified, add BatchSize property with given value to `AWS::Lambda::EventSourceMapping` resource.
# Enabled: if specified, add BatchSize property with given value to `AWS::Lambda::EventSourceMapping` resource.
SqsSubscription:
QueuePolicyLogicalId: CustomQueuePolicyLogicalId
QueueArn: !GetAtt MyCustomQueue.Arn
BatchSize: 5
Enabled: false
FilterPolicy:
store:
- example_corp
price_usd:
- numeric:
- ">="
- 100
Implementation Note: When SAM expands this into CloudFormation, the AWS::SQS::QueuePolicy
resource should look like this:
ExampleQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
Queues:
- !Ref ExampleQueue
PolicyDocument:
Version: '2012-10-17'
Id: ExampleQueuePolicy
Statement:
- Effect: Allow
Principal:
Service:
- sns.amazonaws.com
Action:
- sqs:SendMessage
Resource:
- !GetAtt ExampleQueue.Arn
Condition:
ArnEquals:
aws:SourceArn: <SNS Topic ARN>
otaviofff, izidorome, chrisoverzero, georgealton, 53ningen and 3 more
Metadata
Metadata
Assignees
Labels
contributors/good-first-issueGood first issue for a contributorGood first issue for a contributortype/feature