Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set environment variables from external file in serverless.yml

I'm using serverless and serverless-local for local development.

I've got an external file which holds references to environment variables which I retrieve from node.env in my app.

From what I understand, I should be able to set my environment variables such as

dev:
   AWS_KEY: 'key',
   SECRET: 'secret
test:
   AWS_KEY: 'test-key',
   SECRET: 'test-secret',
etc:
   ...

and have those environment variables included in my app through the following line in my serverless.yml

provider:
  name: aws
  runtime: nodejs4.3
  stage: ${opt:stage, self:custom.default_stage}
  deploymentBucket: serverless-deploy-packages/${opt:stage, self:custom.default_stage}
  environment: 
    ${file(./serverless-env.yml):${opt:stage, self:custom.default_stage}}

then in the commandline, I call

serverless offline --stage dev --port 9000

I thought this would include the correct vars in my app, but it isn't working. Is this not how it is supposed to work? Am I doing something wrong here?

like image 467
pedalpete Avatar asked May 11 '17 07:05

pedalpete


2 Answers

This is how you can separate your environments by different stages:

serverless.yml:

custom:
  test:
    project: xxx
  prod:
    project: yyy

provider:
  ...
  stage: ${opt:stage, 'test'}
  project: ${self:custom.${opt:stage, 'test'}.project}
  environment:
    ${file(.env.${opt:stage, 'test'}.yml):}

package:
  exclude:
    - .env.*

.env.test.yml:

VARIABLE1: value1
VARIABLE2: value2

During deploy, pass --stage=prod or skip and test project will be deployed. Then in your JS code you can access ENV variables with process.env.VARIABLE1.

like image 195
rilian Avatar answered Sep 19 '22 13:09

rilian


From docs:

You can set the contents of an external file into a variable:

file: ${file(./serverless-env.yml)}

And later you can use this new variable to access the file variables.

secret: file.dev.SECRET

Or you can use the file directly:

secret: ${file(./serverless-env.yml):dev.SECRET}
like image 21
Zanon Avatar answered Sep 19 '22 13:09

Zanon