Giter Club home page Giter Club logo

serverless-local-dev-server's Introduction

Serverless Local Dev Server Plugin (Beta)

Build Status

This plugin exposes Alexa-Skill and HTTP events as local HTTP endpoints, removing the need to deploy every code change to AWS Lambda. You can connect these endpoints to Alexa, Facebook Messenger or other services via forwardhq, ngrok or any other forwarding service.

Supported features:

  • Expose alexa-skill and http events as local HTTP endpoints
  • Environment variables
  • Basic HTTP integration
  • Auto reload via nodemon (see How To)

This package requires node >= 6.0

How To

1. Install the plugin

npm install serverless-local-dev-server --save-dev

2. Add the plugin to your serverless configuration file

serverless.yml configuration example:

provider:
  name: aws
  runtime: nodejs6.10

functions:
  hello:
    handler: handler.hello
    events:
      - alexaSkill
      - http: GET /hello

# Add serverless-local-dev-server to your plugins:
plugins:
  - serverless-local-dev-server

# if needed add folder for serving static files if necessary (relative to service path)
custom:
  localDevStaticFolder: path/to/static/files

3. Start the server

serverless local-dev-server

On default the server listens on port 5005. You can specify another one with the --port argument:

serverless local-dev-server --port 5000

To automatically restart the server when files change, you may use nodemon:

nodemon --exec "serverless local-dev-server" -e "js yml json"

To see responses returned from Lambda and stack traces, prepend SLS_DEBUG=*

SLS_DEBUG=* serverless local-http-server

4. For Alexa Skills

4.1 Share localhost with the internet

For example with forwardhq:

forward 5005

4.2 Configure AWS to use your HTTPS endpoint

In the Configuration pane, select HTTPS as service endpoint type and specify the forwarded endpoint URL.

As method for SSL Certificate validation select My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority.

License & Credits

Licensed under the MIT license.

Created and maintained by DieProduktMacher.

serverless-local-dev-server's People

Contributors

chrisschneider avatar tlimp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

serverless-local-dev-server's Issues

Serverless command "local-dev-server" not found on v.1.19.0

The following error occures on serverless v 1.19.0

Serverless Error ---------------------------------------

  Serverless command "local-dev-server" not found

  Run "serverless help" for a list of all available commands.

  Stack Trace --------------------------------------------

HttpEndpoint - Invalid Regular Expression error

Windows 10, Node 6.11

Error: Invalid regular expression: /^\http\echo(?:([^\/]+?))/?$/: Unmatched ')'
HttpEndpoint.js (15, ..)

I assume this has something to do with the way Windows treats slashes. If I update this line:

this.path = path.join('/http', this.resourcePath)

to be fixed:

this.path = path.posix.join('/http', this.resourcePath)

The error is gone and all works.

Not able to get to it work with a Python Lambda

Hi.

Great stuff with the plugin. I think it is very important that we have a local dev setup as well :)

Although, I could not get it to work for my python project. I get the following error.

Serverless: HTTP: get hello/world Serverless: โžก Failure: Cannot find module '/Users/prakashraman/<path>/Code/api/handler'

Does this only work with a NodeJS codebase?

Add additional path property to lambda event object

Hello,

This module almost does exactly what I need. However when running on AWS the event object that gets passed to the lambda has a property called path which is missing in this module.

Here's an example event object sent from API Gateway to my Lambda...

{ "resource": "/profile",
  "path": "/profile",
  "httpMethod": "GET",
  "headers": 

Here is the event object sent in the module...

{ httpMethod: 'GET',
  body: '{}',
  queryStringParameters: {},
  pathParameters: {}
}

I've made this available by editing Server.js on line 82...

lambdaEvent.path = endpoint.resourcePath;

Do you think this is a plausible change to the module? I'm happy to make a pull request.

Thanks for making this module, its super useful!

Regards,
/t

Cookie support

Hello again,

Have you thought about supporting cookies? The lambda I'm developing interacts with the cookie header.

I'll also create a PR for this if you're interested?

Thanks,
/t

HTTPS support

Hello again,

Have you thought about providing HTTPS support?

I got a crude version working by adding this code into Server.js...

const https = require('https');
const fs = require('fs');
const options = {
    cert: fs.readFileSync('/Users/tmo2367/Certs/localhost-cert.pem'),
    key: fs.readFileSync('/Users/tmo2367/Certs/localhost-key.pem'),
    passphrase: 'XXXXX'
};
https.createServer(options, this.app).listen(8443);

You'd want HTTPS to be enabled via a flag, and also the 3 option values too.

This is useful as I'm doing AWS Cognito integration, passing the user back to your serverless app requires a HTTPS URL to be added into Cognito.

Shall I make a PR if you're interested and not already started this?

Thanks,
/t

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.