JSPM

serverless-offline-lambda-invoke

0.0.5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 238
  • Score
    100M100P100Q95663F
  • License ISC

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

Package Exports

  • serverless-offline-lambda-invoke

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (serverless-offline-lambda-invoke) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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 support
Serverless: Starting Offline: dev/us-east-1.

Serverless: Routes for myLambda:
Serverless: (none)

Serverless: Routes for my-project-dev-myLambda_proxy:
Serverless: POST /proxy/my-project-dev-myLambda
Serverless: POST /2015-03-31/functions/my-project-dev-myLambda/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-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 = 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-project-dev-myLambda', // 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);
    }
})