Serverless Scriptable Plugin

homepage icon https://github.com/weixu365/serverless-scriptable-plugin
Follow @weixu365

Tracked

NPM Downloads Last Month
1727
Issues
1
Stars
33
Forks
4
Watchers
33
Watch Star Fork Issue Download License NPM Build Status Coverage Status Contributors

Repo README Contents:

npm version Build Status Test Coverage Code Climate Issue Count

What’s the plugins for?

This plugin add script support to Serverless 1.0 which enables you to customize Serverless behavior without writing a plugin.

It allows you to run nodejs script in any build stage.

Quick Start

  1. Install

     npm install --save-dev serverless-scriptable-plugin
    
  2. Add to Serverless config

     plugins:
       - serverless-scriptable-plugin
    
     custom:
       scriptHooks:
         before:deploy:createDeploymentArtifacts: npm run build
    

Example

  1. Customize package behavior

    The following config is using babel for transcompilation and packaging only the required folders: dist and node_modules without aws-sdk

     plugins:
       - serverless-scriptable-plugin
    
     custom:
       scriptHooks:
         before:deploy:createDeploymentArtifacts: npm run build
    
     package:
       exclude:
         - '**/**'
         - '!dist/**'
         - '!node_modules/**'
         - node_modules/aws-sdk/**
    
  2. Run any command as a hook script

    It’s possible to run any command as the hook script, e.g. use the following command to zip the required folders

     plugins:
       - serverless-scriptable-plugin
        
     custom:
       scriptHooks:
         after:package:createDeploymentArtifacts: zip -q -r .serverless/package.zip src node_modules
        
     service: service-name
     package:
       artifact: .serverless/package.zip
    
  3. Create CloudWatch Log subscription filter for all Lambda function Log groups, e.g. subscribe to a Kinesis stream

     plugins:
       - serverless-scriptable-plugin
        
     custom:
       scriptHooks:
         after:deploy:compileEvents: build/serverless/add-log-subscriptions.js
        
     provider:
       logSubscriptionDestinationArn: 'arn:aws:logs:ap-southeast-2:{account-id}:destination:'
    

    and in build/serverless/add-log-subscriptions.js file:

     const resources = serverless.service.provider.compiledCloudFormationTemplate.Resources;
     const logSubscriptionDestinationArn = serverless.service.provider.logSubscriptionDestinationArn;
        
     Object.keys(resources)
       .filter(name => resources[name].Type === 'AWS::Logs::LogGroup')
       .forEach(logGroupName => resources[`${logGroupName}Subscription`] = {
           Type: "AWS::Logs::SubscriptionFilter",
           Properties: {
             DestinationArn: logSubscriptionDestinationArn,
             FilterPattern: ".",
             LogGroupName: { "Ref": logGroupName }
           }
         }
       );
    
  4. Run multiple commands for the serverless event

    It’s possible to run multiple commands for the same serverless event, e.g. Add CloudWatch log subscription and dynamodb auto scaling support

     plugins:
       - serverless-scriptable-plugin
        
     custom:
       scriptHooks:
         after:package:createDeploymentArtifacts: 
           - build/serverless/add-log-subscriptions.js
           - build/serverless/add-dynamodb-auto-scaling.js
        
     service: service-name
     package:
       artifact: .serverless/package.zip
    

Change Log