@twilio-labs/plugin-serverless

Develop and deploy Twilio Serverless Functions

Usage no npm install needed!

<script type="module">
  import twilioLabsPluginServerless from 'https://cdn.skypack.dev/@twilio-labs/plugin-serverless';
</script>

README

@twilio-labs/plugin-serverless

Plugin for the Twilio CLI to locally develop, debug and deploy to Twilio Serverless. Part of the Serverless Toolkit

npm npm GitHub All Contributors Code of Conduct PRs Welcome


This plugin adds functionality to the Twilio CLI to locally develop, debug and deploy to Twilio Serverless. It's a part of the Serverless Toolkit and wraps twilio-run and create-twilio-function.

Important: This version requires Twilio CLI version 3.0 or newer. For Twilio CLI version 2.x you have to use plugin-serverless version 2.4.

Requirements

Install the Twilio CLI

Via npm or yarn:

$ npm install -g twilio-cli
$ yarn global add twilio-cli

Via homebrew:

$ brew tap twilio/brew && brew install twilio

Usage

$ twilio plugins:install @twilio-labs/plugin-serverless
$ twilio --help serverless
USAGE
  $ twilio serverless
...

Concurrency

When deploying lots of Functions and Assets it is possible to run up against the enforced concurrency limits of the Twilio API. You can limit the concurrency and set how many times the library retries API requests using environment variables.

The default concurrency is 50 and the default number of retries is 10. You can change this by setting environment variables. The following would set concurrency to 1, only 1 live request at a time, and retries to 0, so if it fails it won't retry.

export TWILIO_SERVERLESS_API_CONCURRENCY=1
export TWILIO_SERVERLESS_API_RETRY_LIMIT=0

Commands

twilio serverless:deploy

Deploys existing functions and assets to Twilio

USAGE
  $ twilio serverless:deploy

OPTIONS
  -c, --config=config                  Location of the config file. Absolute path or relative to current working
                                       directory (cwd)

  -l, --log-level=log-level            [default: info] Level of logging messages.

  -n, --service-name=service-name      Overrides the name of the Serverless project. Default: the name field in your
                                       package.json

  -o, --output-format=output-format    Output the results in a different format

  -p, --profile=profile                Shorthand identifier for your profile.

  -u, --username=username              A specific API key or account SID to be used for deployment. Uses fields in .env
                                       otherwise

  --[no-]assets                        Upload assets. Can be turned off with --no-assets

  --assets-folder=assets-folder        Specific folder name to be used for static assets

  --cwd=cwd                            Sets the directory of your existing Serverless project. Defaults to current
                                       directory

  --env=env                            Path to .env file for environment variables that should be installed

  --environment=environment            [default: dev] The environment name (domain suffix) you want to use for your
                                       deployment. Alternatively you can specify an environment SID starting with ZE.

  --force                              Will run deployment in force mode. Can be dangerous.

  --[no-]functions                     Upload functions. Can be turned off with --no-functions

  --functions-folder=functions-folder  Specific folder name to be used for static functions

  --load-system-env                    Uses system environment variables as fallback for variables specified in your
                                       .env file. Needs to be used with --env explicitly specified.

  --override-existing-project          Deploys Serverless project to existing service if a naming conflict has been
                                       found.

  --password=password                  A specific API secret or auth token for deployment. Uses fields from .env
                                       otherwise

  --production                         Please prefer the "activate" command! Deploys to the production environment (no
                                       domain suffix). Overrides the value passed via the environment flag.

  --runtime=runtime                    The version of Node.js to deploy the build to. (node12 or node14)

  --service-sid=service-sid            SID of the Twilio Serverless Service to deploy to

  --to=to                              [Alias for "environment"]

See code: src/commands/serverless/deploy.js

twilio serverless:env:get

Retrieves the value of a specific environment variable

USAGE
  $ twilio serverless:env:get

OPTIONS
  -c, --config=config        Location of the config file. Absolute path or relative to current working directory (cwd)
  -l, --log-level=log-level  [default: info] Level of logging messages.
  -p, --profile=profile      Shorthand identifier for your profile.
  -u, --username=username    A specific API key or account SID to be used for deployment. Uses fields in .env otherwise
  --cwd=cwd                  Sets the directory of your existing Serverless project. Defaults to current directory
  --env=env                  Path to .env file for environment variables that should be installed

  --environment=environment  [default: dev] The environment name (domain suffix) you want to use for your deployment.
                             Alternatively you can specify an environment SID starting with ZE.

  --key=key                  Name of the environment variable

  --load-system-env          Uses system environment variables as fallback for variables specified in your .env file.
                             Needs to be used with --env explicitly specified.

  --password=password        A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production               Promote build to the production environment (no domain suffix). Overrides environment flag

  --service-sid=service-sid  SID of the Twilio Serverless Service to deploy to

  --to=to                    [Alias for "environment"]

See code: src/commands/serverless/env/get.js

twilio serverless:env:import

Takes a .env file and uploads all environment variables to a given environment

USAGE
  $ twilio serverless:env:import

OPTIONS
  -c, --config=config        Location of the config file. Absolute path or relative to current working directory (cwd)
  -l, --log-level=log-level  [default: info] Level of logging messages.
  -p, --profile=profile      Shorthand identifier for your profile.
  -u, --username=username    A specific API key or account SID to be used for deployment. Uses fields in .env otherwise
  --cwd=cwd                  Sets the directory of your existing Serverless project. Defaults to current directory
  --env=env                  Path to .env file for environment variables that should be installed

  --environment=environment  [default: dev] The environment name (domain suffix) you want to use for your deployment.
                             Alternatively you can specify an environment SID starting with ZE.

  --load-system-env          Uses system environment variables as fallback for variables specified in your .env file.
                             Needs to be used with --env explicitly specified.

  --password=password        A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production               Promote build to the production environment (no domain suffix). Overrides environment flag

  --service-sid=service-sid  SID of the Twilio Serverless Service to deploy to

  --to=to                    [Alias for "environment"]

See code: src/commands/serverless/env/import.js

twilio serverless:env:list

Lists all environment variables for a given environment

USAGE
  $ twilio serverless:env:list

OPTIONS
  -c, --config=config                Location of the config file. Absolute path or relative to current working directory
                                     (cwd)

  -l, --log-level=log-level          [default: info] Level of logging messages.

  -o, --output-format=output-format  Output the results in a different format

  -p, --profile=profile              Shorthand identifier for your profile.

  -u, --username=username            A specific API key or account SID to be used for deployment. Uses fields in .env
                                     otherwise

  --cwd=cwd                          Sets the directory of your existing Serverless project. Defaults to current
                                     directory

  --env=env                          Path to .env file for environment variables that should be installed

  --environment=environment          [default: dev] The environment name (domain suffix) you want to use for your
                                     deployment. Alternatively you can specify an environment SID starting with ZE.

  --load-system-env                  Uses system environment variables as fallback for variables specified in your .env
                                     file. Needs to be used with --env explicitly specified.

  --password=password                A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production                       Promote build to the production environment (no domain suffix). Overrides
                                     environment flag

  --service-sid=service-sid          SID of the Twilio Serverless Service to deploy to

  --show-values                      Show the values of your environment variables

  --to=to                            [Alias for "environment"]

See code: src/commands/serverless/env/list.js

twilio serverless:env:set

Sets an environment variable with a given key and value

USAGE
  $ twilio serverless:env:set

OPTIONS
  -c, --config=config        Location of the config file. Absolute path or relative to current working directory (cwd)
  -l, --log-level=log-level  [default: info] Level of logging messages.
  -p, --profile=profile      Shorthand identifier for your profile.
  -u, --username=username    A specific API key or account SID to be used for deployment. Uses fields in .env otherwise
  --cwd=cwd                  Sets the directory of your existing Serverless project. Defaults to current directory
  --env=env                  Path to .env file for environment variables that should be installed

  --environment=environment  [default: dev] The environment name (domain suffix) you want to use for your deployment.
                             Alternatively you can specify an environment SID starting with ZE.

  --key=key                  Name of the environment variable

  --load-system-env          Uses system environment variables as fallback for variables specified in your .env file.
                             Needs to be used with --env explicitly specified.

  --password=password        A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production               Promote build to the production environment (no domain suffix). Overrides environment flag

  --service-sid=service-sid  SID of the Twilio Serverless Service to deploy to

  --to=to                    [Alias for "environment"]

  --value=value              Name of the environment variable

See code: src/commands/serverless/env/set.js

twilio serverless:env:unset

Removes an environment variable for a given key

USAGE
  $ twilio serverless:env:unset

OPTIONS
  -c, --config=config        Location of the config file. Absolute path or relative to current working directory (cwd)
  -l, --log-level=log-level  [default: info] Level of logging messages.
  -p, --profile=profile      Shorthand identifier for your profile.
  -u, --username=username    A specific API key or account SID to be used for deployment. Uses fields in .env otherwise
  --cwd=cwd                  Sets the directory of your existing Serverless project. Defaults to current directory
  --env=env                  Path to .env file for environment variables that should be installed

  --environment=environment  [default: dev] The environment name (domain suffix) you want to use for your deployment.
                             Alternatively you can specify an environment SID starting with ZE.

  --key=key                  Name of the environment variable

  --load-system-env          Uses system environment variables as fallback for variables specified in your .env file.
                             Needs to be used with --env explicitly specified.

  --password=password        A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production               Promote build to the production environment (no domain suffix). Overrides environment flag

  --service-sid=service-sid  SID of the Twilio Serverless Service to deploy to

  --to=to                    [Alias for "environment"]

See code: src/commands/serverless/env/unset.js

twilio serverless:init NAME

Creates a new Twilio Function project

USAGE
  $ twilio serverless:init NAME

ARGUMENTS
  NAME  Name of Serverless project and directory that will be created

OPTIONS
  -a, --account-sid=account-sid  The Account SID for your Twilio account
  -p, --profile=profile          Shorthand identifier for your profile.
  -t, --auth-token=auth-token    Your Twilio account Auth Token
  --empty                        Initialize your new project with empty functions and assets directories

  --import-credentials           Import credentials from the environment variables TWILIO_ACCOUNT_SID and
                                 TWILIO_AUTH_TOKEN

  --skip-credentials             Don't ask for Twilio account credentials or import them from the environment

  --template=template            Initialize your new project with a template from
                                 github.com/twilio-labs/function-templates

  --typescript                   Initialize your Serverless project with TypeScript

See code: src/commands/serverless/init.js

twilio serverless:list [TYPES]

List existing services, environments, variables, deployments for your Twilio Serverless Account

USAGE
  $ twilio serverless:list [TYPES]

ARGUMENTS
  TYPES  [default: services] Comma separated list of things to list (services,environments,functions,assets,variables)

OPTIONS
  -c, --config=config                Location of the config file. Absolute path or relative to current working directory
                                     (cwd)

  -l, --log-level=log-level          [default: info] Level of logging messages.

  -n, --service-name=service-name    Overrides the name of the Serverless project. Default: the name field in your
                                     package.json

  -o, --output-format=output-format  Output the results in a different format

  -p, --profile=profile              Shorthand identifier for your profile.

  -u, --username=username            A specific API key or account SID to be used for deployment. Uses fields in .env
                                     otherwise

  --cwd=cwd                          Sets the directory of your existing Serverless project. Defaults to current
                                     directory

  --env=env                          Path to .env file for environment variables that should be installed

  --environment=environment          [default: dev] The environment to list variables for

  --extended-output                  Show an extended set of properties on the output

  --load-system-env                  Uses system environment variables as fallback for variables specified in your .env
                                     file. Needs to be used with --env explicitly specified.

  --password=password                A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --service-sid=service-sid          SID of the Twilio Serverless Service to deploy to

  --to=to                            [Alias for "environment"]

See code: src/commands/serverless/list.js

twilio serverless:list-templates

Lists the available Twilio Function templates

USAGE
  $ twilio serverless:list-templates

OPTIONS
  -o, --output-format=output-format  Output the results in a different format

See code: src/commands/serverless/list-templates.js

twilio serverless:logs

Print logs from your Twilio Serverless project

USAGE
  $ twilio serverless:logs

OPTIONS
  -c, --config=config                Location of the config file. Absolute path or relative to current working directory
                                     (cwd)

  -l, --log-level=log-level          [default: info] Level of logging messages.

  -o, --output-format=output-format  Output the results in a different format

  -p, --profile=profile              Shorthand identifier for your profile.

  -u, --username=username            A specific API key or account SID to be used for deployment. Uses fields in .env
                                     otherwise

  --cwd=cwd                          Sets the directory of your existing Serverless project. Defaults to current
                                     directory

  --env=env                          Path to .env file for environment variables that should be installed

  --environment=environment          [default: dev] The environment to retrieve the logs for

  --function-sid=function-sid        Specific Function SID to retrieve logs for

  --load-system-env                  Uses system environment variables as fallback for variables specified in your .env
                                     file. Needs to be used with --env explicitly specified.

  --password=password                A specific API secret or auth token for deployment. Uses fields from .env otherwise

  --production                       Retrieve logs for the production environment. Overrides the "environment" flag

  --service-sid=service-sid          SID of the Twilio Serverless Service to deploy to

  --tail                             Continuously stream the logs

  --to=to                            [Alias for "environment"]

See code: src/commands/serverless/logs.js

twilio serverless:new [NAMESPACE]

Creates a new Twilio Function based on an existing template

USAGE
  $ twilio serverless:new [NAMESPACE]

ARGUMENTS
  NAMESPACE  The namespace your assets/functions should be grouped under

OPTIONS
  -c, --config=config        Location of the config file. Absolute path or relative to current working directory (cwd)
  -l, --log-level=log-level  [default: info] Level of logging messages.
  --cwd=cwd                  Sets the directory of your existing Serverless project. Defaults to current directory
  --env=env                  Path to .env file for environment variables that should be installed
  --template=template

See code: src/commands/serverless/new.js

twilio serverless:promote

Promotes an existing deployment to a new environment

USAGE
  $ twilio serverless:promote

OPTIONS
  -c, --config=config                      Location of the config file. Absolute path or relative to current working
                                           directory (cwd)

  -l, --log-level=log-level                [default: info] Level of logging messages.

  -o, --output-format=output-format        Output the results in a different format

  -p, --profile=profile                    Shorthand identifier for your profile.

  -u, --username=username                  A specific API key or account SID to be used for deployment. Uses fields in
                                           .env otherwise

  --build-sid=build-sid                    An existing Build SID to deploy to the new environment

  --create-environment                     Creates environment if it couldn't find it.

  --cwd=cwd                                Sets the directory of your existing Serverless project. Defaults to current
                                           directory

  --env=env                                Path to .env file for environment variables that should be installed

  --environment=environment                [default: dev] The environment name (domain suffix) you want to use for your
                                           deployment. Alternatively you can specify an environment SID starting with
                                           ZE.

  --force                                  Will run deployment in force mode. Can be dangerous.

  --from=from                              [Alias for "source-environment"]

  --from-build=from-build                  [Alias for "build-sid"]

  --load-system-env                        Uses system environment variables as fallback for variables specified in your
                                           .env file. Needs to be used with --env explicitly specified.

  --password=password                      A specific API secret or auth token for deployment. Uses fields from .env
                                           otherwise

  --production                             Promote build to the production environment (no domain suffix). Overrides
                                           environment flag

  --service-sid=service-sid                SID of the Twilio Serverless Service to deploy to

  --source-environment=source-environment  SID or suffix of an existing environment you want to deploy from.

  --to=to                                  [Alias for "environment"]

ALIASES
  $ twilio serverless:activate

See code: src/commands/serverless/promote.js

twilio serverless:start [DIR]

Starts local Twilio Functions development server

USAGE
  $ twilio serverless:start [DIR]

ARGUMENTS
  DIR  Root directory to serve local Functions/Assets from

OPTIONS
  -c, --config=config                  Location of the config file. Absolute path or relative to current working
                                       directory (cwd)

  -f, --load-local-env                 Includes the local environment variables

  -l, --log-level=log-level            [default: info] Level of logging messages.

  -p, --port=port                      (required) [default: 3000] Override default port of 3000

  --assets-folder=assets-folder        Specific folder name to be used for static assets

  --cwd=cwd                            Alternative way to define the directory to start the server in. Overrides the
                                       [dir] argument passed.

  --detailed-logs                      Toggles detailed request logging by showing request body and query params

  --env=env                            Path to .env file for environment variables that should be installed

  --[no-]fork-process                  Disable forking function processes to emulate production environment

  --functions-folder=functions-folder  Specific folder name to be used for static functions

  --inspect=inspect                    Enables Node.js debugging protocol

  --inspect-brk=inspect-brk            Enables Node.js debugging protocol, stops execution until debugger is attached

  --legacy-mode                        Enables legacy mode, it will prefix your asset paths with /assets

  --[no-]live                          Always serve from the current functions (no caching)

  --[no-]logs                          Toggles request logging

  --ngrok=ngrok                        Uses ngrok to create a public url. Pass a string to set the subdomain (requires a
                                       paid-for ngrok account).

ALIASES
  $ twilio serverless:dev
  $ twilio serverless:run

See code: src/commands/serverless/start.js

Contributing

This project welcomes contributions from the community. Please see the CONTRIBUTING.md file for more details.

Code of Conduct

Please be aware that this project has a Code of Conduct. The tldr; is to just be excellent to each other ❤️

Contributors

Thanks goes to these wonderful people (emoji key):

Dominik Kundel
Dominik Kundel

💻 📖 🤔
childish-sambino
childish-sambino

💻 🐛
Elmer Thomas
Elmer Thomas

🐛 📖

This project follows the all-contributors specification. Contributions of any kind welcome!

License

MIT