2017-05-11 68 views
2

我使用无服务器和无服务器本地进行本地开发。在serverless.yml中设置来自外部文件的环境变量

我有一个外部文件,它保存了我在我的应用程序中从node.env中检索到的环境变量的引用。

据我了解,我应该能为我设置环境变量,比如

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

,并有通过我的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}} 

然后在命令行,我称之为

serverless offline --stage dev --port 9000

我认为这会在我的应用中包含正确的变量,但它不起作用。这不是它应该如何工作?我在这里做错了什么?

回答

1

docs

你可以设置一个外部文件的内容到一个变量:

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

,以后你可以使用这个新变量来存取文件中的变量。

secret: file.dev.SECRET 

或者你也可以直接使用的文件:

secret: ${file(./serverless-env.yml):dev.SECRET} 
+0

文档是不完整的,虽然它可以按照您描述的那样完成,但是比所需的更冗长。将值直接传递给yaml中的环境条目确实起作用,我只是在文件指向的位置出现错误,这显然不会导致yaml中的错误。 – pedalpete

3

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

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

实施例:

serverless.yml

service: serverless-async-vars 

provider: 
    name: aws 
    runtime: nodejs6.10 

custom: 
    secret: ${file(./vars.js):fetchSecret} # JS file running async/promised 

vars.js

module.exports.fetchSecret =() => { 
    // async code 
    return Promise.resolve('SomeSecretKey'); 
} 
0

我有这个正确的,但我错误地引用该文件。

我没有在文档中看到这个,但是传递一个文件到environment将包含文件yaml文件,并且上述结构可以工作。