This Serverless-offline plugin emulates AWS λ and SQS queues on your local machine. It listens to SQS queues and invokes your handlers accordingly.
- Serverless Webpack support.
- SQS configurations: batchsize.
- New in this fork: Automatically starts all SQS queues, even those not associated with a handler.
First, add serverless-offline-sqs
to your project:
npm install serverless-offline-sqs
Then, inside your project's serverless.yml
file, add the following entry to the plugins section before serverless-offline
(and after serverless-webpack
if present):
plugins:
- serverless-webpack
- serverless-offline-sqs
- serverless-offline
To emulate AWS SQS queues locally, an actual queue system must be running. One such implementation is ElasticMQ, a standalone in-memory queue system that provides an AWS SQS-compatible interface. It can run independently or inside a Docker container.
ElasticMQ should be initialized using the AWS CLI, either inside another container or on your local machine. Once initialized, the plugin can be configured.
Function configuration follows the Serverless documentation.
functions:
mySQSHandler:
handler: handler.compute
events:
- sqs: arn:aws:sqs:region:XXXXXX:MyFirstQueue
- sqs:
arn: arn:aws:sqs:region:XXXXXX:MySecondQueue
- sqs:
queueName: MyThirdQueue
arn:
Fn::GetAtt:
- MyThirdQueue
- Arn
- sqs:
arn:
Fn::GetAtt:
- MyFourthQueue
- Arn
- sqs:
arn:
Fn::GetAtt:
- MyFifthQueue
- Arn
resources:
Resources:
MyFourthQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: MyFourthQueue
MyFifthQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: MyFifthQueue.fifo
FifoQueue: true
ContentBasedDeduplication: true
AWS.SQS
client configuration is handled using a custom: serverless-offline-sqs
section in serverless.yml
.
To use ElasticMQ, configure it as follows:
custom:
serverless-offline-sqs:
autoCreate: true
apiVersion: '2012-11-05'
endpoint: http://0.0.0.0:9324
region: eu-west-1
accessKeyId: root
secretAccessKey: root
skipCacheInvalidation: false
To enable this feature, simply set:
custom:
serverless-offline-sqs:
autoStartAllQueues: true
This ensures all defined queues in the resources
section are available locally when running serverless offline
.
For more details, refer to the original serverless-offline-sqs repository and ElasticMQ documentation.