serverless-offline-sns
A serverless plugin to listen to offline SNS and call lambda fns with events.
Docs
For an example of a working application please see serverless-offline-sns-example
Prerequisites
This plugin provides an SNS server configured automatically without you specifying an endpoint.
If you'd rather use your own endpoint, e.g. from your AWS account or a localstack SNS server endpoint, you can put it in the custom config. See below for details.
Installation
Install the plugin
npm install serverless-offline-sns --save
Let serverless know about the plugin
plugins:
- serverless-offline-sns
Configure the plugin with your offline SNS endpoint, host to listen on, and a free port the plugin can use.
custom:
serverless-offline-sns:
port: 4002
debug: false
In normal operation, the plugin will use the same --host option as provided to serverless-offline. The host parameter as shown above overrides this setting.
If you are using the serverless-offline plugin serverless-offline-sns will start automatically. If you are not using this plugin you can run the following command instead:
serverless offline-sns start
Configure
Configure your function handlers with events as described in the Serverless SNS Documentation
Here's an example serverless.yml
config which calls a function on an SNS notifcation. Note that the offline-sns plugin will automatically pick up this config, subscribe to the topic and call the handler on an SNS notification.
functions:
pong:
handler: handler.pong
events:
- sns: test-topic
Or you can use the exact ARN of the topic:
functions:
pong:
handler: handler.pong
events:
- sns:
arn: "arn:aws:sns:us-east-1:123456789012:test-topic"
Here's a demo of some code that will trigger this handler:
var AWS = require("aws-sdk");
var sns = new AWS.SNS({
endpoint: "http://127.0.0.1:4002",
region: "us-east-1",
});
sns.publish({
Message: "hello!",
MessageStructure: "json",
TopicArn: "arn:aws:sns:us-east-1:123456789012:test-topic",
}, () => {
console.log("ping");
});
Usage
If you use serverless-offline this plugin will start automatically.
However if you don't use serverless-offline you can start this plugin manually with -
serverless offline-sns start
Contributors
Happy to accept contributions, feature requests and issues.
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!