Aws lambda 本地测试中的无服务器变量
serverless为在运行时函数代码以及Lambda函数和API网关路由的AWS配置中使用变量提供了一个很好的工作流。这在和中描述 当我使用Aws lambda 本地测试中的无服务器变量,aws-lambda,serverless-framework,Aws Lambda,Serverless Framework,serverless为在运行时函数代码以及Lambda函数和API网关路由的AWS配置中使用变量提供了一个很好的工作流。这在和中描述 当我使用sls function run-s stage在本地测试Lambda函数时,我很难理解如何分配变量。当我通过包含-d选项在Lambda上运行测试时,该函数运行良好,但如果没有它,该函数将失败,因为尚未分配必要的变量。serverless提供以下消息: Serverless: WARNING: This variable is not defined: r
sls function run-s stage
在本地测试Lambda函数时,我很难理解如何分配变量。当我通过包含-d
选项在Lambda上运行测试时,该函数运行良好,但如果没有它,该函数将失败,因为尚未分配必要的变量。serverless提供以下消息:
Serverless: WARNING: This variable is not defined: region
Serverless: WARNING: This variable is not defined: appEnv
我使用的是链接中描述的干变量。具体而言:
s-variables-aguldman-useast1.json:
{
"appEnv": "qa"
}
functions/fn1/s-function.json:
{
...
"environment": {
"NODE_ENV": "${appEnv}"
}
...
}
函数/fn1/handler.js:
...
var foo = process.env.NODE_ENV;
...
有什么建议吗
谢谢 我必须在这里做一些猜测,因为我缺少你问题中的一些信息。因此,我假设:
- 您正在尝试输出一个名为region的变量
- 您有一个s-function.json文件,其中包含以下内容:
“环境”:{ “myEnvironmentVar”:“${myEnvironmentVar}” }
- 您正在尝试使用lambda函数中的以下代码访问区域变量的内容:
process.env.myEnvironmentVar;
无服务器:警告:未定义此变量:区域
若是这种情况,那个么问题是您并没有定义这两个文件中的任何一个:
- _meta/variables/s-variables-common.json
- _meta/variables/s-variables-stage.json
另外,如果您将值添加到s-variables-common.json中,然后再将其添加到s-variables-stage.json中,那么s-variables-stage.json将覆盖s-variables-common.json的值,因为我没有从您的问题中获得一些信息,所以我不得不在这里进行一些猜测。因此,我假设:
- 您正在尝试输出一个名为region的变量
- 您有一个s-function.json文件,其中包含以下内容:
“环境”:{ “myEnvironmentVar”:“${myEnvironmentVar}” }
- 您正在尝试使用lambda函数中的以下代码访问区域变量的内容:
process.env.myEnvironmentVar;
无服务器:警告:未定义此变量:区域
若是这种情况,那个么问题是您并没有定义这两个文件中的任何一个:
- _meta/variables/s-variables-common.json
- _meta/variables/s-variables-stage.json
另外,如果在s-variables-common.json中添加该值,然后再将其添加到s-variables-stage.json中,则s-variables-stage.json将覆盖s-variables-common.json的值如果我将
-r us-east-1
选项添加到无服务器函数运行
中,则其工作正常。有趣的是,serverless在远程运行时不需要-r选项(如果项目中只有一个区域),但在本地运行时需要-r选项
总结如下:
serverless function run -s stage -r us-east-1
已成功从相应的s-variables文件中读取变量,但
serverless function run -s stage
没有。相比之下
serverless function run -s stage -d
在没有明确指定区域的情况下工作正常,可能是因为我的项目中只有一个区域。如果我将
-r us-east-1
选项添加到无服务器函数运行
中,则工作正常。有趣的是,serverless在远程运行时不需要-r选项(如果项目中只有一个区域),但在本地运行时需要-r选项
总结如下:
serverless function run -s stage -r us-east-1
已成功从相应的s-variables文件中读取变量,但
serverless function run -s stage
没有。相比之下
serverless function run -s stage -d
无需显式指定区域即可正常工作,可能是因为我的项目中只有一个区域。首先运行以下命令,在_meta文件夹中创建stage/regions的变量json文件
sls stage create
然后提供阶段名称和区域(您必须提供amazon访问密钥和密钥)。然后将创建以下json文件
_meta/variables/s-variables-{your_region}-{your_stage}.json
ie. _meta/variables/s-variables-us-east-1-dev.json
如果要手动添加变量,可以按如下操作。这些变量将被添加到上面的s-variables-{your_region}-{your_stage}.json文件中
sls variables set
然后在一行中给出键和值或,如下所示
sls variables set -k appEnv -v dev
希望这有帮助。首先运行以下命令,在_meta文件夹中创建stage/regions的变量json文件
sls stage create
然后提供阶段名称和区域(您必须提供amazon访问密钥和密钥)。然后将创建以下json文件
_meta/variables/s-variables-{your_region}-{your_stage}.json
ie. _meta/variables/s-variables-us-east-1-dev.json
如果要手动添加变量,可以按如下操作。这些变量将被添加到上面的s-variables-{your_region}-{your_stage}.json文件中
sls variables set
然后在一行中给出键和值或,如下所示
sls variables set -k appEnv -v dev
希望这有帮助。对,对。对不起,这个糟糕的问题。我只是改进了它,而且(可以预见)在这样做的过程中能够回答我自己的问题。谢谢你的帮助!对,对。对不起,这个糟糕的问题。我只是改进了它,而且(可以预见)在这样做的过程中能够回答我自己的问题。谢谢你的帮助!