通过无服务器脱机在本地运行时加载环境变量



我想从。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, ''}"

您可以根据您的用例更改它。