Serverless simulation plugin
This is a proof of concept to see if we can replicate Amazon API Gateway using docker images to run lambda
Features:
- λ runtimes supported by docker-lambda.
- CORS
- Authorizer
- Custom Authorizer supported
- Coginito Authorizer not implemented yet
- Lambda Integration
- Velocity templates support. supported
- Lambda Proxy Integration. supported
Prerequisite
Getting Started
Install the plugin
npm i --save-dev serverless-plugin-simulate
Configure your service to use the plugin
service: my-serviceprovider: name: aws runtime: nodejs4.3 # python2.7 is also supported # this is optional configurations # servicesPathDest is use for the case u want to compile all your src and out # put to another folder like dist # # services allows specifying a docker-compose.yml file and (optional) # projectName. This will start the docker-compose stack when simulate is run. # If projectName is specified, it will be used when running docker-compose, # and the default docker-compose network will be passed to lambda docker commands # allowing all lambdas to access any hosts defined in docker-compose services custom: simulate: dist: dist services: file: docker-compose.yml # will use: $ docker-compose --project-name myproject ... # and: $ docker --network myproject_default ... projectName: myproject plugins: - serverless-plugin-simulate
If you do not need to chain functions locally you can just run the API Gateway simulation by itself.
sls simulate apigateway -p 5000
Using the Lambda simulator
If you want to chain functions locally, you need to use the Lambda Simulator.
Run the Lambda Simulation
sls simulate lambda -p 4000
Run the API Gateway Simulation
sls simulate apigateway -p 5000 --lambda-port 4000
Use the environment variables to configure the AWS SDK to use the local Lambda simulation. You can use the same technique with any other AWS SDK.
const AWS = ; const endpoint = processenvSERVERLESS_SIMULATE ? processenvSERVERLESS_SIMULATE_LAMBDA_ENDPOINT : undefined const lambda = endpoint const handler = { const params = FunctionName: 'my-other-function' Payload: JSON lambda}
Examples
See the examples folder for examples.
npm install
- Installs all dependenciesnpm start
- Starts API Gateway simulation listening at http://localhost:5000npm run start:lambda
- Starts Lambda simulation listening at http://localhost:4000npm run start:apigateway
- Starts API Gateway simulation that uses the Lambda simulation listening at http://localhost:5000npm run start:services
- Starts mock services defined indocker-compose.yml
npm test
- tests custom authorizer (Authorization:TOKEN 12345)
Authors
- Gert JvR - Initial work - gertjvr
- John McKim - johncmckim
See also the list of contributors who participated in this project.
Contributing
Please create an issue before submitting an Pull Request.
Acknowledgements
This would not be possible without lambci
- docker-lambda - Docker images and test runners that replicate the live AWS Lambda environment
@johncmckim for suggesting the idea