0.1.2 • Published 4 years ago

serverless-offline-lambda-to-lambda v0.1.2

Weekly downloads
3
License
ISC
Repository
github
Last release
4 years ago

serverless-offline-lambda-to-lambda

serverless npm npm

A Serverless Offline plugin that exposes lambdas with no API Gateway event via HTTP, to allow offline direct lambda-to-lambda interactions.

Note - this requires the plugin serverless-offline.

Installation

Go to your project directory and install the plugin by running :

for npm users

npm install -D serverless-offline-lambda-to-lambda

for yarn users

yarn add serverless-offline-lambda-to-lambda -D

Setup

Open your serverless.yml configuration file and

  • add a plugins section
  • add serverless-offline-lambda-to-lambda plugin
plugins:
- serverless-offline-lambda-to-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

The plugin will create api-gateway proxies for all lambdas.

You will see output like this:

sls offline start

Serverless: Running Serverless Offline with lambda-to-lambda support
Serverless: Starting Offline: dev/us-east-1.

Serverless: Routes for lambda-func:
Serverless: (none)

Serverless: Routes for my-sls-project-dev-lambda-func_proxy:
Serverless: POST /proxy/my-sls-project-dev-lambda-func
Serverless: POST /2015-03-31/functions/my-sls-project-dev-lambda-func/invocations

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-sls-project-dev-lambda-func \
  -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:

var AWS = require("aws-sdk");
AWS.config.region = "us-east-1";

let lambda = new AWS.Lambda({
  region: "us-east-1",
  endpoint: "http://localhost:4000"
});

var lambda_args = {
  "some-key": "some-value",
  "other-key": false
};

var params = {
  FunctionName: "my-sls-project-dev-lambda-func", // the lambda function we are going to invoke
  Payload: JSON.stringify(lambda_args)
};

lambda.invoke(params, function(err, data) {
  if (err) {
    console.error(err);
  } else {
    console.dir(data);
  }
});