Environment Vars Not Deploying?
Serverless-Dotenv-Plugin
Both --Stage And --Env
sls deploy --stage prod --env prod
sls offline start --port 5001 --stage local --env local
Writings about one coder's stories & experiences.
Recently I have been working on some AWS Lambda functions, and I am using the serverless framework to help build and deploy them. However, once I wanted to have multiple stages with different environment variables I was not sure the best way to do it. Here are some things I tried and the command I ended up going with in the end.
Environment Vars Not Deploying?
Initially I tried implementing a solution similar to the one found in this article. Initially, I thought, "wow, this is excellent because all I have to do is use the '--stage' flag and my environment variables will be taken care of for me since they are included as custom variables in the serverless.yaml config file". However, for some reason when I deployed my variables would never show up in the AWS Lambda console, and more importantly they weren't being loaded into the functions when they were run!
Serverless-Dotenv-Plugin
After some digging into forums and stack overflow posts the only working solution I was able to come up with was to use the serverless-dotenv-plugin. This nifty little npm package allows you to send a "--env" flag with your serverless commands and it will read from that corresponding .env.<environment> file. The annoying thing here is that you need to have a bunch of these .env files for each environment, but I guess it's probably safer to have your secret keys in there than being pushed up to git in your serverless.yaml file.
Both --Stage And --Env
With the serverless-dotenv-plugin we need to pass the "--env" flag, and this is to specify from which .env file we want it to pull the environment variables. Although the "--stage" flag is no longer needed for environment variables, the serverless framework by default concatenates it onto the end of the function name and uses it for a few other things so I like to pass it in as a command line flag. So, Here are examples of how I would run serverless commands with this setup:
sls deploy --stage prod --env prod
^ Deploys function to AWS with environment variables located in the .env.prod file.
sls offline start --port 5001 --stage local --env local
^ Starts a local server hosting your lambda functions with environment variables from .env.local file.
0 Comments
Your comment will be posted after it is approved.
Leave a Reply. |
AuthorThe posts on this site are written and maintained by Jim Lynch. About Jim...
Categories
All
Archives
March 2023
|