serverless提供了一个很好的工作流程,可以在运行时功能代码中使用变量,也可以在Lambda函数和API网关路由的AWS配置中使用变量。这在http://docs.serverless.com/docs/templates-variables和How to define variables in a DRY way进行了描述。
当我使用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
我正在使用链接2中描述的DRY变量。具体做法是:
S-变量 - aguldman-useast1.json:
{
"appEnv": "qa"
}
功能/ FN1 / S-function.json:
{
...
"environment": {
"NODE_ENV": "${appEnv}"
}
...
}
功能/ FN1 / handler.js:
...
var foo = process.env.NODE_ENV;
...
有什么建议吗?
谢谢!
答案 0 :(得分:0)
我必须在这里做一些猜测,因为我缺少你问题的一些信息。所以我会假设:
你有一个s-function.json文件,里面有这个:
"environment": {
"myEnvironmentVar":"${myEnvironmentVar}"
}
process.env.myEnvironmentVar;
如果这是您收到的警告:
Serverless: WARNING: This variable is not defined: region
如果是这种情况,那么问题是你没有在这两个文件中定义任何这个变量:
此外,如果在s-variables-common.json中添加值,然后将其添加到s-variables-stage.json,则s-variables-stage.json将覆盖s-variables-common.json的值
答案 1 :(得分:0)
如果我将-r us-east-1
选项添加到serverless function run
,那么它可以正常工作。有趣的是,无服务器在远程运行时(如果项目中只有一个区域)不需要-r选项,但在本地运行时则不需要-r选项。
总结:
serverless function run -s stage -r us-east-1
成功从相应的s变量文件中读取变量,但
serverless function run -s stage
没有。相比之下,
serverless function run -s stage -d
在没有明确指定区域的情况下工作正常,可能是因为我的项目中只有一个区域。
答案 2 :(得分:0)
首先运行以下命令在_meta文件夹中创建舞台/区域变量json文件
sls stage create
然后提供您的舞台名称和区域(您必须提供您的亚马逊访问密钥和密钥)。然后将创建以下json文件。
_meta/variables/s-variables-{your_region}-{your_stage}.json
ie. _meta/variables/s-variables-us-east-1-dev.json
如果要手动添加变量,可以按照以下方式执行。这些变量将被添加到上面的s变量 - {your_region} - {your_stage} .json文件
sls variables set
然后给出键和值或在一行中如下
sls variables set -k appEnv -v dev
希望这有帮助。