This Serverless plugin allows to define environment variable configuration files for stages.
It exposes a new variable resolver ($esc
) that automatically picks the correct value based on the selected stage.
For development stages (local
, dev
, development
), the variables will default to the system’s environment variables.
pnpm add -D serverless-plugin-env-stage-config
plugins:
- serverless-plugin-env-stage-config
For non-development stages, the variables will be retrieved from a serverless.env.${stage}.yml
file, alongside the serverless.yml
.
Let’s consider the following serverless.yml
:
name: my-service
useDotenv: true
resources:
Resources:
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: some-queue
provider:
name: aws
environment:
MYSQL_HOST: ${esc:MYSQL_HOST}
MYSQL_PORT: ${esc:MYSQL_PORT}
functions:
run-something:
handler: handler.run
environment:
QUEUE_URL: ${esc:QUEUE_URL}
SECRET_TOKEN: ${esc:SECRET_TOKEN}
In a local environment, the variables resolved with the esc:
prefix will be equivalent to using env:
. Using useDotenv: true
alongside a .env
file will alow you to define your environement variables.
The supported local stages are:
local
dev
development
If you need to define a different source for the environement variables for your prod
stage, you can define a serverless.env.prod.yml
to redefine the variables.
For example, if you’re using AWS SSM Parameter Store, you could create the following file:
MYSQL_HOST: ${ssm:/my-service/prod/MYSQL_HOST}
QUEUE_URL: !Ref MyQueue
SECRET_TOKEN: ${ssm:/my-service/prod/SECRET_TOKEN}
Any variable that is not included in the serverless.env.prod.yml
file will produce a warning and fallback to using env:
.
In this case, you will get the following warning:
Serverless: env-stage-config: WARNING: the MYSQL_PORT variable is not defined in serverless.env.prod.yml, defaulting to ${env:MYSQL_PORT, null}.
If a variable is not defined in the stage environment configuration file, or the environment (process.env
), it will default to null
.
MIT
╚⊙ ⊙╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝