aronim / serverless-plugin-parent

Serverless plugin to share common configuration between services

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Serverless Parent Plugin

serverless npm version npm downloads license

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 Serverless serverless.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.

About

Serverless plugin to share common configuration between services

License:MIT License


Languages

Language:JavaScript 100.0%