目前,我正试图将我的无服务器服务分解为多个服务,以克服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...]
我怎样才能消除这个错误呢?我使用的语法是否正确?
谢谢
2条答案
按热度按时间atmip9wb1#
至于这个错误
出现此错误是因为Framework找不到
SLS_AWS_REGION
环境变量。env
变量源不从.env
文件读取,而是从进程的环境变量读取。对于此语法:
这不起作用,因为
env
是正确的变量源,而不是../../env
。您有两个选择:
1.确保导出
.env
文件的内容,以便在运行serverless
命令之前将这些文件中定义的变量实际导出为环境变量。1.在您的
serverless.yml
文件中设置useDotenv: true
,这样.env
文件将自动加载dotenv
。请参阅文档以了解它的工作原理:https://www.serverless.com/framework/docs/environment-variablesfbcarpbf2#
根据插件文档,您应该使用
--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。
我相信插件在这里优先。