Lambdr is automated deployment and flow management module to create powerful micro services with AWS Lambda functions. It's still in development and looking for contributors. 🤘
First we need to install cli globally.
npm install lambdr -g
Assume that a lambdr project as a micro service.
lambdr new my-micro-service
This will create a folder named 'my-micro-service' and it includes the following files:
my-micro-service
|-- config
| |-- aws.json (AWS credentials)
| |-- env.json (Environment variables for every stage)
| |-- lambdr.json (Lambder configurations)
|-- functions
| |-- .... (You lambda functions will be here)
|-- package.json
|-- .gitignore
Let's create a signup function. After you enter the command the cli will ask you the HTTP method for the function and the endpoint.
We can use POST
method and /users
endpoint for signup function.
lambdr function:create signup
After the command finishes, a js file will be added into functions
folder.
It's really easy to run the function in your local machine by using this command:
lambdr function:run signup
Before running a function you can pass event
parameters by changing testEvents
function property in config/lambdr.json
.
{
"accountId": "123456789",
"name": "my-micro-service",
"functions": {
"signup": {
"method": "POST",
"endpoint": "/users",
"testEvent": {
"email": "[email protected]",
"password": "incredible_password"
}
}
}
}
To deploy your functions you need to create a stage. You can create multiple stages like (development, staging, production).
Assume we want a development
stage for now.
lambdr stage:create development
lambdr function:deploy signup development
We deployed signup function into development stage. After this command you will see an endpoint to test this function.
Lambdr deploys environment variables for it's own stage. You can set environment variables in config/env.json
file. An example env.json
:
{
"default": {
"APP_NAME": "Example OAuth Micro Service",
"TEST_STAGE": true
},
"local": {
"DYNAMO_TABLE": "users-local"
},
"development": {
"DYNAMO_TABLE": "users-dev"
},
"production": {
"TEST_STAGE": false
}
}
Notice that TEST_STAGE
will be overridden in production stage.
exports.handler = function(event, context) {
if (process.env.TEST_STAGE) {
context.done(null, 'This stage is for testing');
} else {
context.done(null, 'This stage is production');
}
}
lambdr stage:list
lambdr stage:remove staging