从serverless.yml中的外部文件设置环境变量

ped*_*ete 6 yaml environment-variables serverless-framework

我正在使用无服务器和无服务器本地进行本地开发。

我有一个外部文件,其中包含对我node.env在应用程序中检索到的环境变量的引用。

据我了解,我应该能够设置环境变量,例如

dev:
   AWS_KEY: 'key',
   SECRET: 'secret
test:
   AWS_KEY: 'test-key',
   SECRET: 'test-secret',
etc:
   ...
Run Code Online (Sandbox Code Playgroud)

并通过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}}
Run Code Online (Sandbox Code Playgroud)

然后在命令行中,我打电话

serverless offline --stage dev --port 9000

我以为这会在我的应用程序中包含正确的var,但是它不起作用。这不是应该的工作方式吗?我在这里做错什么了吗?

Dav*_*lls 7

您现在还可以在无服务器框架中使用远程异步值。见https://serverless.com/blog/serverless-v1.13.0/

这意味着您可以从 s3 或远程数据库等调用值。

例子:

无服务器.yml

service: serverless-async-vars

provider:
  name: aws
  runtime: nodejs6.10

custom:
  secret: ${file(./vars.js):fetchSecret} # JS file running async / promised
Run Code Online (Sandbox Code Playgroud)

vars.js

service: serverless-async-vars

provider:
  name: aws
  runtime: nodejs6.10

custom:
  secret: ${file(./vars.js):fetchSecret} # JS file running async / promised
Run Code Online (Sandbox Code Playgroud)


Zan*_*non 6

文档

您可以将外部文件的内容设置为变量:

file: ${file(./serverless-env.yml)}
Run Code Online (Sandbox Code Playgroud)

稍后您可以使用这个新变量来访问文件变量。

secret: file.dev.SECRET
Run Code Online (Sandbox Code Playgroud)

或者您可以直接使用该文件:

secret: ${file(./serverless-env.yml):dev.SECRET}
Run Code Online (Sandbox Code Playgroud)


ril*_*ian 5

这是您可以通过不同阶段分隔环境的方法:

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.*
Run Code Online (Sandbox Code Playgroud)

.env.test.yml

VARIABLE1: value1
VARIABLE2: value2
Run Code Online (Sandbox Code Playgroud)

在部署期间,通过--stage=prod或跳过,test项目将被部署。然后在您的 JS 代码中,您可以使用process.env.VARIABLE1.