Generally we recommend using Twilio Functions' "Environments" feature to deal with multiple deployments of your Functions project — for example, to verify your changes in a development or staging environment.
However, if you are using Functions in combination with Flex, for example, the chances are high that you are using independent Twilio projects with separate Account SIDs for each environment. The following guide shows you how you can make the most of this scenario.
This guide expects you to have a minimum @twilio-labs/plugin-serverless
version of 2.0.0 or twilio-run
version of 3.0.0.
You can find your plugin-serverless
version by running twilio plugins
.
You can find your twilio-run
version by running npx twilio-run --version
inside your project directory.
While some of the following steps can be achieved with twilio-run
, we recommend using the Twilio CLI and @twilio-labs/plugin-serverless
when working with multiple projects. An exception is making deployments using a Continuous Delivery (CD) system. If you are doing that, please check out this guide instead.
The Twilio CLI supports using several authentication profiles. You can see which profiles you currently have by running:
twilio profiles:list
Create one for each of the Twilio Projects/Accounts that you want to deploy to by running:
twilio profiles:create
You'll be asked to provide a name for your profile. You can use that name later on in any Twilio CLI command to tell the CLI to use those credentials by using the -p <YOUR_PROFILE_NAME>
option.
We'll use my-profile
and team-profile
as examples.
If you don't already have an existing project using the Serverless Toolkit, go ahead and create one by following the instructions in our Getting Started guide. Otherwise, keep reading.
Once you have set up your project and your profiles, you can deploy to the respective profiles by running:
twilio serverless:deploy -p <YOUR_PROFILE_NAME>
For example, I would run:
twilio serverless:deploy -p my-profile
You'll see a file in your project called .twiliodeployinfo
that gets updated after each deployment. This file makes sure that switching between different accounts is effortless. By default this file is added to your .gitignore
file to prevent it from being tracked in your version control system.
If you are working alone on your project and you don't want different environment variables or similar configuration between the different accounts, you are set.
If you are sharing your project with other developers and you all deploy to the same accounts and/or Function services, you should configure the following settings.
Start by creating a .twilioserverlessrc
file at the root of your project — if you don't have one in your project already — and add this to it:
1{2"projects": {34}5}
Inside the projects
key you'll place configuration objects specific to an individual Account SID. This is where we can specify the respective Service SIDs that map to our Account SIDs.
You can actually copy the information from your .twiliodeployinfo
file. Copy the file once you are done deploying for the first time, rename the copy .twilioserverlessrc
, and delete the lastBuildSid
rows.
Your .twilioserverlessrc
file should look something like this:
1{2"projects": {3"AC11111111111111111111111111111111": {4"serviceSid": "ZS11111111111111111111111111111111"5},6"AC22222222222222222222222222222222": {7"serviceSid": "ZS22222222222222222222222222222222"8}9}10}
Whenever you run any twilio serverless:
command it will look up the Account SID here and apply the configuration you specified for that Account.
You might want to configure the use of different environment variables for each Account SID. You can do that by creating a configuration similar to this:
1{2"projects": {3"AC11111111111111111111111111111111": {4"serviceSid": "ZS11111111111111111111111111111111",5"env": ".env.dev"6},7"AC22222222222222222222222222222222": {8"serviceSid": "ZS22222222222222222222222222222222",9"env": ".env.production"10}11}12}
In this case if I deploy using twilio serverless:deploy -p my-profile
, which maps to AC11111111111111111111111111111111
, it will use the .env.dev
file. When I run twilio serverless:deploy -p team-profile
instead, it will use my .env.production
file.
There are many things you can configure here. In general you can specify in the configuration anything that you can pass as a flag to the CLI. Check out our Configuration and Meta Files documentation to learn more about it.