In the following example, we specify that the compute
function should be triggered whenever there are messages in the given SQS Queue.
The ARN for the queue can be specified as a string, the reference to the ARN of a resource by logical ID, or the import of an ARN that was exported by a different service or CloudFormation stack.
Note: The sqs
event will hook up your existing SQS Queue to a Lambda function. Serverless won't create a new queue for you.
functions:
compute:
handler: handler.compute
events:
# These are all possible formats
- sqs: arn:aws:sqs:region:XXXXXX:MyFirstQueue
- sqs:
arn:
Fn::GetAtt:
- MySecondQueue
- Arn
- sqs:
arn:
Fn::ImportValue: MyExportedQueueArnId
- sqs:
arn:
Fn::Join:
- ':'
- - arn
- aws
- sqs
- Ref: AWS::Region
- Ref: AWS::AccountId
- MyOtherQueue
For the SQS event integration, you can set the batchSize
, which effects how many SQS messages can be included in a single Lambda invocation. The default batchSize
is 10
. The max batchSize
is 10000
for a standard queue, 10
for a FIFO queue.
You can also set maximumBatchingWindow
to standard queues to specify the maximum amount of time in seconds to gather records before invoking the function. The max maximumBatchingWindow
is 300
seconds. Check AWS documentation for more details.
functions:
compute:
handler: handler.compute
events:
- sqs:
arn: arn:aws:sqs:region:XXXXXX:myQueue
batchSize: 10
maximumBatchingWindow: 60
The Serverless Framework will automatically configure the most minimal set of IAM permissions for you. However you can still add additional permissions if you need to. Read the official AWS documentation for more information about IAM Permissions for SQS events.
The examples above show how to consume messages from an existing SQS queue. To create an SQS queue in serverless.yml
, you can either write custom CloudFormation, or you can use Lift.
Lift is a Serverless Framework plugin that simplifies deploying pieces of applications via "constructs". Lift can be installed via:
serverless plugin install -n serverless-lift
We can use the queue
construct to deploy an SQS queue with its Lambda consumer:
constructs:
my-queue:
type: queue
worker:
handler: handler.compute
plugins:
- serverless-lift
The queue
construct deploys:
worker
Lambda function: this function processes messages sent to the queue.Read the queue
construct documentation to find a complete example with code, and to learn how to configure the batch size, retries and other options.
Product