Serverless M
Serverless M (or Serverless Modular) is a plugin for the serverless framework. This plugins helps you in managing multiple serverless projects with a single serverless.yml file. This plugin gives you a super charged CLI options that you can use to create new features, build them in a single file and deploy them all in parallel
Currently this plugin is tested for the below stack only
- AWS
- NodeJS λ
- Rest API (You can use other events as well)
Prerequisites
Make sure you have the serverless CLI installed
# Install serverless globally$ npm install serverless -g
Getting Started
To start the serverless modular project locally you can either start with es5 or es6 templates or add it as a plugin
ES6 Template install
# Step 1. Download the template$ sls create --template-url https://github.com/aa2kb/serverless-modular/tree/master/template/modular-es6 --path myModularService # Step 2. Change directory$ cd myModularService # Step 3. Create a package.json file$ npm init # Step 3. Install dependencies$ npm i serverless-modular serverless-webpack webpack --save-dev
ES5 Template install
# Step 1. Download the template$ sls create --template-url https://github.com/aa2kb/serverless-modular/tree/master/template/modular-es5 --path myModularService # Step 2. Change directory$ cd myModularService # Step 3. Create a package.json file$ npm init # Step 3. Install dependencies$ npm i serverless-modular --save-dev
If you dont want to use the templates above you can just add in your existing project
Adding it as plugin
plugins: - serverless-modular
Now you are all done to start building your serverless modular functions
API Reference
The serverless CLI can be accessed by
# Serverless Modular CLI$ serverless modular # shorthand$ sls m
Serverless Modular CLI is based on 4 main commands
sls m init
sls m feature
sls m function
sls m build
sls m deploy
init command
sls m init
The serverless init command helps in creating a basic .gitignore
that is useful for serverless modular.
The basic .gitignore
for serverless modular looks like this
#node_modulesnode_modules #sm main functionssm.functions.yml #serverless file generated by buildsrc/**/serverless.yml #main serverless directories generated for sls deploy.serverless #feature serverless directories generated sls deploysrc/**/.serverless #serverless logs file generated for main sls deploy.sm.log #serverless logs file generated for feature sls deploysrc/**/.sm.log #Webpack config copied in each featuresrc/**/webpack.config.js
feature command
The feature command helps in building new features for your project
options (feature Command)
This command comes with three options
--name: Specify the name you want for your feature
--remove: set value to true if you want to remove the feature
--basePath: Specify the basepath you want for your feature, this base path should be unique for all features. helps in running offline with offline plugin and for API Gateway
options | shortcut | required | values | default value |
---|---|---|---|---|
--name | -n | ✅ | string | N/A |
--remove | -r | ❎ | true, false | false |
--basePath | -p | ❎ | string | same as name |
Examples (feature Command)
Creating a basic feature
# Creating a jedi feature$ sls m feature -n jedi
Creating a feature with different base path
# A feature with different base path$ sls m feature -n jedi -p tatooine
Deleting a feature
# Anakin is going to delete the jedi feature$ sls m feature -n jedi -r true
function command
The function command helps in adding new function to a feature
options (function Command)
This command comes with four options
--name: Specify the name you want for your function
--feature: Specify the name of the existing feature
--path: Specify the path for HTTP endpoint helps in running offline with offline plugin and for API Gateway
--method: Specify the path for HTTP method helps in running offline with offline plugin and for API Gateway
options | shortcut | required | values | default value |
---|---|---|---|---|
--name | -n | ✅ | string | N/A |
--feature | -f | ✅ | string | N/A |
--path | -p | ❎ | string | same as name |
--method | -m | ❎ | string | 'GET' |
Examples (function Command)
Creating a basic function
# Creating a cloak function for jedi feature$ sls m function -n cloak -f jedi
Creating a basic function with different path and method
# Creating a cloak function for jedi feature with custom path and HTTP method$ sls m function -n cloak -f jedi -p powers -m POST
build command
The build command helps in building the project for local or global scope
options (build Command)
This command comes with four options
--scope: Specify the scope of the build, use this with "--feature" tag
--feature: Specify the name of the existing feature you want to build
options | shortcut | required | values | default value |
---|---|---|---|---|
--scope | -s | ❎ | string | local |
--feature | -f | ❎ | string | N/A |
Saving build Config in serverless.yml
You can also save config in serverless.yml file
custom: smConfig: build: scope: local
Examples (build Command)
all feature build (local scope)
# Building all local features$ sls m build
Single feature build (local scope)
# Building a single feature$ sls m build -f jedi -s local
All features build global scope
# Building all features with global scope$ sls m build -s global
deploy command
The deploy command helps in deploying serverless projects to AWS (it uses sls deploy
command)
options (deploy Command)
This command comes with four options
--sm-parallel: Specify if you want to deploy parallel (will only run in parallel when doing multiple deployments)
--sm-scope: Specify if you want to deploy local features or global
--sm-features: Specify the local features you want to deploy (comma separated if multiple)
options | shortcut | required | values | default value |
---|---|---|---|---|
--sm-parallel | ❎ | ❎ | true, false | true |
--sm-scope | ❎ | ❎ | local, global | local |
--sm-features | ❎ | ❎ | string | N/A |
--sm-ignore-build | ❎ | ❎ | string | false |
Saving deploy Config in serverless.yml
You can also save config in serverless.yml file
custom: smConfig: deploy: scope: local parallel: true ignoreBuild: true
Examples (deploy Command)
Deploy all features locally
# deploy all local features$ sls m deploy
Deploy all features globally
# deploy all global features$ sls m deploy --sm-scope global
Deploy single feature
# deploy all global features$ sls m deploy --sm-features jedi
Deploy Multiple features
# deploy all global features$ sls m deploy --sm-features jedi,sith,dark_side
Deploy Multiple features in sequence
# deploy all global features$ sls m deploy --sm-features jedi,sith,dark_side --sm-parallel false
Authors
- Amin Ahmed Khan - Project Creator - aa2kb