2017-05-11 99 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文件,並且上述結構可以工作。