twilio-labs / plugin-serverless

Twilio CLI plugin to work with Serverless
MIT License
21 stars 14 forks source link
cli twilio twilio-cli twilio-functions

@twilio-labs/plugin-serverless

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

npm (scoped) npm GitHub All Contributors Code of Conduct PRs Welcome


This plugin adds functionality to the [Twilio CLI](https://github.com/twilio/twilio-cli) to locally develop, debug and deploy to Twilio Serverless. It's a part of the [Serverless Toolkit](https://github.com/twilio-labs/serverless-toolkit) and wraps [twilio-run](https://github.com/twilio-labs/twilio-run) and [create-twilio-function](https://github.com/philnash/create-twilio-function). ## Requirements ### Install the Twilio CLI Via `npm` or `yarn`: ```sh-session $ npm install -g twilio-cli $ yarn global add twilio-cli ``` Via `homebrew`: ```sh-session $ brew tap twilio/brew && brew install twilio ``` ## Usage ```sh-session $ 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. ```sh-session export TWILIO_SERVERLESS_API_CONCURRENCY=1 export TWILIO_SERVERLESS_API_RETRY_LIMIT=0 ``` ## Commands * [`twilio serverless:deploy`](#twilio-serverlessdeploy) * [`twilio serverless:init NAME`](#twilio-serverlessinit-name) * [`twilio serverless:list [TYPES]`](#twilio-serverlesslist-types) * [`twilio serverless:list-templates`](#twilio-serverlesslist-templates) * [`twilio serverless:logs`](#twilio-serverlesslogs) * [`twilio serverless:new [NAMESPACE]`](#twilio-serverlessnew-namespace) * [`twilio serverless:promote`](#twilio-serverlesspromote) * [`twilio serverless:start [DIR]`](#twilio-serverlessstart-dir) ## `twilio serverless:deploy` Deploys existing functions and assets to Twilio ``` USAGE $ twilio serverless:deploy OPTIONS -c, --config=config [default: .twilio-functions] Location of the config file. Absolute path or relative to current working directory (cwd) -l, --logLevel=logLevel [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 -p, --profile=profile Shorthand identifier for your profile. -u, --account-sid=account-sid A specific 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 --auth-token=auth-token Use a specific auth token for deployment. Uses fields from .env otherwise --cwd=cwd Sets the directory from which to deploy --env=env Path to .env file. If none, the local .env in the current working directory is used. --environment=environment [default: dev] The environment name (domain suffix) you want to use for your deployment --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. --production Please prefer the "activate" command! Deploys to the production environment (no domain suffix). Overrides the value passed via the environment flag. ``` _See code: [src/commands/serverless/deploy.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/src/commands/serverless/deploy.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](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/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 [default: .twilio-functions] Location of the config file. Absolute path or relative to current working directory (cwd) -l, --logLevel=logLevel [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 -p, --profile=profile Shorthand identifier for your profile. -u, --account-sid=account-sid A specific account SID to be used for deployment. Uses fields in .env otherwise --auth-token=auth-token Use a specific auth token for deployment. Uses fields from .env otherwise --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. --service-sid=service-sid Specific Serverless Service SID to run list for ``` _See code: [src/commands/serverless/list.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/src/commands/serverless/list.js)_ ## `twilio serverless:list-templates` Lists the available Twilio Function templates ``` USAGE $ twilio serverless:list-templates OPTIONS -l, --logLevel=logLevel [default: info] Level of logging messages. ``` _See code: [src/commands/serverless/list-templates.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/src/commands/serverless/list-templates.js)_ ## `twilio serverless:logs` Print logs from your Twilio Serverless project ``` USAGE $ twilio serverless:logs OPTIONS -c, --config=config [default: .twilio-functions] Location of the config file. Absolute path or relative to current working directory (cwd) -l, --logLevel=logLevel [default: info] Level of logging messages. -o, --output-format=output-format Output the log in a different format -p, --profile=profile Shorthand identifier for your profile. -u, --account-sid=account-sid A specific account SID to be used for deployment. Uses fields in .env otherwise --auth-token=auth-token Use a specific auth token for deployment. Uses fields from .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. --service-sid=service-sid Specific Serverless Service SID to retrieve logs for --tail Continuously stream the logs ``` _See code: [src/commands/serverless/logs.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/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 -l, --logLevel=logLevel [default: info] Level of logging messages. --template=template ``` _See code: [src/commands/serverless/new.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/src/commands/serverless/new.js)_ ## `twilio serverless:promote` Promotes an existing deployment to a new environment ``` USAGE $ twilio serverless:promote OPTIONS -c, --config=config [default: .twilio-functions] Location of the config file. Absolute path or relative to current working directory (cwd) -f, --source-environment=source-environment SID or suffix of an existing environment you want to deploy from. -f, --build-sid=build-sid An existing Build SID to deploy to the new environment -l, --logLevel=logLevel [default: info] Level of logging messages. -p, --profile=profile Shorthand identifier for your profile. -t, --environment=environment The environment suffix or SID to deploy to. -u, --account-sid=account-sid A specific account SID to be used for deployment. Uses fields in .env otherwise --auth-token=auth-token Use a specific auth token for deployment. Uses fields from .env otherwise --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 --force Will run deployment in force mode. Can be dangerous. --load-system-env Uses system environment variables as fallback for variables specified in your .env file. Needs to be used with --env explicitly specified. --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 ALIASES $ twilio serverless:activate ``` _See code: [src/commands/serverless/promote.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/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 [default: .twilio-functions] Location of the config file. Absolute path or relative to current working directory (cwd) -e, --env=env Loads .env file, overrides local env variables -f, --load-local-env Includes the local environment variables -l, --logLevel=logLevel [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 --experimental-fork-process Enable 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 executioin 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 and outfacing url ALIASES $ twilio serverless:dev $ twilio serverless:run ``` _See code: [src/commands/serverless/start.js](https://github.com/twilio-labs/plugin-serverless/blob/v1.8.0/src/commands/serverless/start.js)_ ## Contributing This project welcomes contributions from the community. Please see the [`CONTRIBUTING.md`](CONTRIBUTING.md) file for more details. ### Code of Conduct Please be aware that this project has a [Code of Conduct](https://github.com/twilio-labs/.github/blob/master/CODE_OF_CONDUCT.md). The tldr; is to just be excellent to each other ❤️ ### Contributors Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Dominik Kundel
Dominik Kundel

💻 📖 🤔
childish-sambino
childish-sambino

💻 🐛
Elmer Thomas
Elmer Thomas

🐛 📖
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! ## License MIT