NodeJS 我如何才能摆脱“警告:在serverless.yml中遇到无效配置“”?

fumotvh3  于 2023-02-03  发布在  Node.js
关注(0)|答案(2)|浏览(238)

目前,我正试图将我的无服务器服务分解为多个服务,以克服cloudFormation资源限制。
我目前的项目结构如下:

aws-backend
  functions
    workers
      serverless.yml // workers service
.env.local
.env.dev
serverless.yml // Rest of the functions in here

在我的worker服务中,我尝试使用变量引用根文件夹中的. env. * 文件。
我的问题是在使用以下语法时
${env:SLS_AWS_REGION}
我得到一个

Error:Cannot resolve serverless.yml: Variables resolution errored with:
 - Cannot resolve variable at "provider.region": Value not found at "env" source

但是当我使用下面的语法时${../../env:SLS_AWS_REGION}
它工作,但我得到一个警告:

Warning: Invalid configuration encountered
  at 'package.individually': must be boolean
  at 'provider.region': must be equal to one of the allowed values [use-east-1, etc...]

我怎样才能消除这个错误呢?我使用的语法是否正确?
谢谢

atmip9wb

atmip9wb1#

至于这个错误

Error:Cannot resolve serverless.yml: Variables resolution errored with:
 - Cannot resolve variable at "provider.region": Value not found at "env" source

出现此错误是因为Framework找不到SLS_AWS_REGION环境变量。env变量源不从.env文件读取,而是从进程的环境变量读取。
对于此语法:

${../../env:SLS_AWS_REGION}

这不起作用,因为env是正确的变量源,而不是../../env
您有两个选择:
1.确保导出.env文件的内容,以便在运行serverless命令之前将这些文件中定义的变量实际导出为环境变量。
1.在您的serverless.yml文件中设置useDotenv: true,这样.env文件将自动加载dotenv。请参阅文档以了解它的工作原理:https://www.serverless.com/framework/docs/environment-variables

fbcarpbf

fbcarpbf2#

根据插件文档,您应该使用--stage--env运行sls deploy(在Serverless〉=3.0.0中已弃用)或对应于.env文件名的NODE_ENV。如果您运行它时没有这些标志,它将默认为development,插件将查找名为.env,.env.development,.环境.发展.地方
注意Serverless Framework .env files resolution的工作方式与插件不同。
框架在服务目录中查找.env和. env.{stage}文件,然后尝试使用dotenv加载它们。如果找到. env.{stage},则不会加载.env。如果未显式定义stage,则默认为dev。
我相信插件在这里优先。

相关问题