我想从。env文件中加载env变量,当本地运行时,这是我的无服务器。yaml文件,
functions:
health:
handler: src/api/health.check
name: ${self:provider.stackName}-health
environment:
USER_POOL_APP_CLIENT_ID: !Ref UserPoolClient
您可以看到,它将在资源部分创建的用户池id作为环境变量设置为lambda。当按预期部署时,这工作得非常好。
然而,当我尝试通过无服务器离线在本地运行它时,无论我如何设置环境变量,通过dotenv或手动,它似乎被无服务器覆盖,在这种情况下,我所看到的是"[object object]"
我看到的其他工作流,从文件中加载所有的环境变量,如下所示
functions:
health:
handler: src/api/health.check
name: ${self:provider.stackName}-health
environment:
USER_POOL_APP_CLIENT_ID: {env:USER_POOL_APP_CLIENT_ID}
但是这难道不需要我们拥有所有阶段的变量,以文件的形式存储在本地吗?
我希望只在本地存储开发版本,并从无服务器文件本身获取所有剩余的内容,自动通过!Ref
,如开头所示。
那么,当我在本地运行时,我如何防止无服务器填充/污染我的环境变量,同时坚持第一种格式?
或者有其他更好的方法来处理这个问题?在新版本的serverless-offline (v12.0.4)中发生了这种情况。
我的解决方案是使用:https://www.serverless.com/plugins/serverless-plugin-ifelse
请看下面的例子:
serverlessIfElse:
- If: '"${env:NODE_ENV}" == "development"'
Set:
functions.health.environment.USER_POOL_APP_CLIENT_ID: "${env:USER_POOL_APP_CLIENT_ID, ''}"
您可以根据您的用例更改它。