serverless-scripts-plugin
TypeScript icon, indicating that this package has built-in type declarations

0.0.10 • Public • Published

What's the plugins for?

This plugin allows you to write scripts to customize Serverless behavior for Serverless 3.x

Features:

  • Run any command in any stage of serverless lifecycle
  • Add custom commands to serverless, e.g. npx serverless YOUR-COMMAND Example

Quick Start

  1. Install
    npm install --save-dev serverless-scripts-plugin
  2. Add to Serverless config
    plugins:
      - serverless-scripts-plugin
    
    custom:
      scripts:
        # set env vars for all hooks and commands
        env:
          EXTRA_VAR: VAR_VALUE       
    
        # add custom hooks
        hooks:
          before:package:createDeploymentArtifacts: npm run build
    
        # or custom commands
        commands:
          migrate: echo Running migration

Examples

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

```yml
plugins:
  - serverless-scripts-plugin

custom:
  scripts:
    hooks:
      before:package:createDeploymentArtifacts: npm run build

package:
  patterns:
    - '**/**'
    - '!dist/**'
    - '!node_modules/**'
    - node_modules/aws-sdk/**
```

2. Add a custom command

```yaml
plugins:
  - serverless-scripts-plugin

custom:
  scripts:
    hooks:
      before:migrate:command: echo before migrating
      after:migrate:command: echo after migrating
    commands:
      migrate: echo Running migration
```

Then you could run this command by:
```bash
$ npx serverless migrate
Running command: echo before migrating
before migrating
Running command: echo Running migrating
Running migrating
Running command: echo after migrating
after migrating
```

3. Deploy python function

```yml
plugins:
  - serverless-scripts-plugin

custom:
  scripts:
      hooks:
        before:package:createDeploymentArtifacts: ./package.sh

# serverless will use the specified package that generated by `./package.sh`
package:
  artifact: .serverless/package.zip
```

and package.sh script file to package the zip file (https://docs.aws.amazon.com/lambda/latest/dg/python-package.html)

```bash
  PACKAGE_FILE=.serverless/package.zip
  rm -f $PACKAGE_FILE && rm -rf output && mkdir -p output
  pip install -r requirements.txt --target output/libs
  # You can use the following command to install if you are using pipenv
  # pipenv requirements > output/requirements.txt && pip install -r output/requirements.txt --target output/libs
  (cd output/libs && zip -r ../../$PACKAGE_FILE . -x '*__pycache__*')
  (zip -r $PACKAGE_FILE your-src-folder -x '*__pycache__*')
```

Serverless would then deploy the zip file you built to aws lambda.

4. 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

```yml
plugins:
  - serverless-scripts-plugin

custom:
  scripts:
    hooks:
      before:package:createDeploymentArtifacts: zip -q -r .serverless/package.zip src node_modules

service: service-name
package:
  artifact: .serverless/package.zip
```

5. Suppress console output

You could control what to show during running commands, in case there are sensitive info in command or console output.

```yml
custom:
  scripts:
    showStdoutOutput: false # Default true. true: output stderr to console, false: output nothing
    showStderrOutput: false # Default true. true: output stderr to console, false: output nothing
    showCommands: false # Default true. true: show the command before execute, false: do not show commands

    outputStream: stderr # Default combined. combined: forwards commands and scripts stderr and stdout to parent process stderr and stdout, stderr: forwards all logs to stderr, stdout: forwards all logs to stdout

    hooks:
      ...
    commands:
      ...
```

6. Add extra env vars for command / script

You can pass extra env variables for each command / script

custom:
  scripts:
    hooks:
      before:package:createDeploymentArtifacts:
       env: 
          LOCATION: .serverless
       scripts:
         - zip -q -r $LOCATION/package.zip src node_modules

7. Set current working directory for a command / script

It's possible to set current working directory for script execution

custom:
  scripts:
    hooks:
      before:package:createDeploymentArtifacts:
       cwd: very/very/very/very/very/long/path
       scripts:
         - zip -q -r package.zip src node_modules

Package Sidebar

Install

npm i serverless-scripts-plugin

Weekly Downloads

27

Version

0.0.10

License

MIT

Unpacked Size

46.9 kB

Total Files

19

Last publish

Collaborators

  • andrew.chubatiuk