serverless-offline-direct-lambda
A Serverless Offline plugin that exposes lambdas with no API Gateway event via HTTP, to allow offline direct lambda-to-lambda interactions.
Setup
Note - this requires the plugin 'serverless-offline'.
To include in your project, add the following to the plugins section in serverless.yml:
- serverless-offline-direct-lambda
You may also want to change the port that the plugin runs on - you can do this by specifying the following custom config in your serverless yml file:
custom: serverless-offline: port: 4000
Running & Calling
To run:
servlerless offline start
(calling the command 'start' is necessary to trigger the plugin, simply running 'serverless online' does not trigger the start hooks).
The plugin will create api-gateway proxies for all lambdas with no triggering events.
You will see output like this:
export AWS_SDK_USED=node sls offline start Serverless: Running Serverless Offline with direct lambda supportServerless: Starting Offline: dev/us-east-1. Serverless: Routes
Calling via HTTP Post:
The body of the POST should match the JSON data that would ordinarily be passed in a lambda-to-lambda call. i.e.
curl -X POST \ http://localhost:4000/proxy/my-project-dev-myLambda \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ -d '{ "some-key": "some-value", "other-key": false}'
Invoking the function via the AWS SDK:
You may also invoke the function by using the AWS SDK on your client side... This can be done by specifying a custom "endpoint" in your Lambda configuration like so:
Note: the AWS SDK for NodeJS actually sends a different content type header on it's request to the Lambda API then all the other AWS SDK's (Python, Rails etc).. You will need to export AWS_SDK_USED=node
before running the serverless offline
if you wish to use this with the NodeJS AWS SDK.
var AWS = ;AWSconfigregion = 'us-east-1'; let lambda = region: 'us-east-1' endpoint: 'http://localhost:4000' var lambda_args = "some-key": "some-value" "other-key": false var params = FunctionName: 'my-project-dev-myLambda' // the lambda function we are going to invoke Payload: JSON; lambda