Environment variables 从serverless.yml中的外部文件设置环境变量
我使用无服务器和无服务器本地进行本地开发 我有一个外部文件,其中包含对环境变量的引用,我从我的应用程序中的Environment variables 从serverless.yml中的外部文件设置环境变量,environment-variables,yaml,serverless-framework,Environment Variables,Yaml,Serverless Framework,我使用无服务器和无服务器本地进行本地开发 我有一个外部文件,其中包含对环境变量的引用,我从我的应用程序中的node.env中检索到这些变量 据我所知,我应该能够设置环境变量,例如 dev: AWS_KEY: 'key', SECRET: 'secret test: AWS_KEY: 'test-key', SECRET: 'test-secret', etc: ... 并通过myserverless.yml中的以下行将这些环境变量包含在我的应用程序中 provid
node.env
中检索到这些变量
据我所知,我应该能够设置环境变量,例如
dev:
AWS_KEY: 'key',
SECRET: 'secret
test:
AWS_KEY: 'test-key',
SECRET: 'test-secret',
etc:
...
并通过myserverless.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}}
然后在命令行中,我调用
无服务器脱机--后台开发--端口9000
我以为这会在我的应用程序中包含正确的变量,但它不起作用。这不是它应该如何工作的吗?我做错什么了吗?来自:
可以将外部文件的内容设置为变量:
file: ${file(./serverless-env.yml)}
稍后,您可以使用这个新变量访问文件变量
secret: file.dev.SECRET
或者您可以直接使用该文件:
secret: ${file(./serverless-env.yml):dev.SECRET}
您现在还可以在无服务器框架中使用远程异步值。看 这意味着您可以从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=()=>{
//异步代码
返回承诺。解决('SomeSecretKey');
}
我的回答是正确的,但我引用的文件不正确
我在文档中没有看到这一点,但是将文件传递到
环境将包括yaml文件,并且上面的结构可以工作。从JSON文件设置Lambda环境变量(使用AWS CLI)
aws lambda更新函数配置--配置文件mfa--函数名测试api--cli输入jsonfile://dev.json这是您如何将环境按不同阶段分开的方法:
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.*
VARIABLE1: value1
VARIABLE2: value2
.env.test.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.*
VARIABLE1: value1
VARIABLE2: value2
部署期间,将部署通过--stage=prod
或跳过测试项目。然后,在JS代码中,您可以使用process.ENV.VARIABLE1
访问环境变量,文档是不完整的,尽管可以按照您所描述的那样“完成”,但这比需要的更详细。将值直接传递到yaml中的环境条目确实有效,我只是在文件指向的位置出现了一个错误,这显然不会导致yaml中的错误。此外,您可以将${self:custom.${opt:stage,'test'}.project}
替换为${self:custom.${self provider.stage}.project}
,我尝试了您的方法,效果很好。但是问题是我遇到了这样一个错误,无法在字符串“${file….etc”文件路径上创建属性“PORT”
知道吗?