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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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

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

答案

您现在还可以使用无服务器框架的远程异步值。见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');
}
另一答案

来自docs

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

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

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

secret: file.dev.SECRET

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

secret: ${file(./serverless-env.yml):dev.SECRET}
另一答案

从JSON文件设置Lambda环境变量(使用AWS CLI)

aws lambda update-function-configuration --profile mfa --function-name test-api --cli-input-json file://dev.json

另一答案

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

我没有在文档中看到这一点,但将文件传递给environment将包含文件yaml文件,并且上述结构确实有效。

以上是关于在serverless.yml中设置外部文件的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

在 CLion 和 Cmake 中设置外部头文件和链接器库的问题 [重复]

如何在 Xcode 4.2 中设置外部编辑器

如何在 serverless.yml 文件中获取 AccountId 作为变量?

如何使用外部 RDS 数据库在 AWS Elastic Beanstalk 中设置 Laravel 应用程序

我们如何使用 serverless.yml 创建 AWS S3 存储桶并向其中添加文件?

无法解析“serverless.yml”:映射条目的缩进错误