This is a proof of concept to see if we can replicate Amazon API Gateway using docker images to run lambda
npm install serverless-plugin-simulate





This is a proof of concept to see if we can replicate Amazon API Gateway using docker images to run lambda
- λ 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
npm i --save-dev serverless-plugin-simulate
`Configure your service to use the plugin
`yaml
service: my-service
provider:
name: aws
runtime: nodejs4.3 # python2.7 is also supportedthis 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: myprojectplugins:
- 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
`$3
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.
`js
const AWS = require('aws-sdk');const endpoint = process.env.SERVERLESS_SIMULATE ?
process.env.SERVERLESS_SIMULATE_LAMBDA_ENDPOINT :
undefined
const lambda = new AWS.Lambda({ endpoint })
const handler = (event, context, callback) => {
const params = {
FunctionName: 'my-other-function',
Payload: JSON.stringify({ foo: 'bar' })
}
lambda.invoke(params, (err, result) => {
if (err) {
return callback(err)
}
callback(null, {
statusCode: 200,
body: result.Payload
})
})
}
`Examples
See the examples folder
for examples.
-
npm install - Installs all dependencies
- npm start - Starts API Gateway simulation listening at http://localhost:5000
- npm run start:lambda - Starts Lambda simulation listening at http://localhost:4000
- npm run start:apigateway - Starts API Gateway simulation that uses the Lambda
simulation listening at http://localhost:5000
- npm run start:services - Starts mock services defined in docker-compose.yml
- npm test` - tests custom authorizer (Authorization:TOKEN 12345) Gert JvR - Initial work* - gertjvr
* John McKim - johncmckim
See also the list of contributors who participated in this project.
@johncmckim for suggesting the idea