Awesome
Serverless Parent Plugin
Share common configuration between services
Requirements:
- Serverless v1.12.x or higher.
- AWS provider
How it works
Serverless Plugin that allows you to keep common configuration in a parent serverless.yml
Setup
Install via npm in the root of your Serverless service:
npm install serverless-plugin-parent --save-dev
- Add the plugin to the
plugins
array in your Serverlessserverless.yml
:
plugins:
- serverless-plugin-parent
Default Usage - Discover Serverless.yml
The plugin will recursively search all parent directories for a serverless.yml file until it reaches the user's
home direcory or has gone x
number of directories up. The default value is 3 but this can be configured using
custom:
parent:
maxLevels: 2 # Optional (Default 3)
Per default the parent file will overwrite settings in the service files. If you want the service file to have a higher priority you can change that using
custom:
parent:
overwriteServiceConfig: false # Optional (Default true)
Project Structure
<project_root>
- service1
- hello.js
- serverless.yml
- service2
- goodbye.js
- serverless.yml
- serverless.yml
serverless.yml
provider:
name: aws
stage: ${opt:stage, "Test"}
runtime: nodejs8.10
role: DefaultRole
resources:
Resources:
DefaultRole:
Type: AWS::IAM::Role
Properties:
Path: /
RoleName: ${self:service}-${self:provider.stage}
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: ${self:service}-${self:provider.stage}
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:${self:provider.region}:*:log-group:/aws/lambda/*:*:*
service1/serverless.yml
service: Service1
plugins:
- serverless-plugin-parent
provider:
environment:
HELLO_MESSAGE: Mholo
functions:
Hello:
handler: hello.handle
events:
- http:
path: hello
method: get
cors: true
Effective serverless.yml
service: Service1
provider:
name: aws
stage: ${opt:stage, "Test"}
runtime: nodejs8.10
role: DefaultRole
plugins:
- serverless-plugin-parent
provider:
environment:
HELLO_MESSAGE: Mholo
functions:
Hello:
handler: hello.handle
events:
- http:
path: hello
method: get
cors: true
resources:
Resources:
DefaultRole:
Type: AWS::IAM::Role
Properties:
Path: /
RoleName: ${self:service}-${self:provider.stage}
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: ${self:service}-${self:provider.stage}
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: arn:aws:logs:${self:provider.region}:*:log-group:/aws/lambda/*:*:*
Alternate Usage - Defined parent configuration path
Project Structure
<project_root>
- parent
- serverless.yml
- service1
- hello.js
- serverless.yml
- service2
- goodbye.js
- serverless.yml
service1/serverless.yml
custom:
parent:
path: ../parent
# or
path: ../parent/serverless.yml
Contribute
Help us making this plugin better and future proof.
- Clone the code
- Install the dependencies with
npm install
- Create a feature branch
git checkout -b new_feature
- Lint with standard
npm run lint
License
This software is released under the MIT license. See the license file for more details.