本地测试中的无服务器变量

时间:2016-04-26 01:13:43

标签: aws-lambda serverless-framework

serverless提供了一个很好的工作流程,可以在运行时功能代码中使用变量,也可以在Lambda函数和API网关路由的AWS配置中使用变量。这在http://docs.serverless.com/docs/templates-variablesHow 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;
...

有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

我必须在这里做一些猜测,因为我缺少你问题的一些信息。所以我会假设:

  • 您正在尝试输出名为region
  • 的变量
  • 你有一个s-function.json文件,里面有这个:

    "environment": { "myEnvironmentVar":"${myEnvironmentVar}" }

  • 您正尝试使用lambda函数中的此代码访问region变量的内容: process.env.myEnvironmentVar;

如果这是您收到的警告: Serverless: WARNING: This variable is not defined: region

如果是这种情况,那么问题是你没有在这两个文件中定义任何这个变量:

  • _meta /变量/ s的变量-common.json
  • _meta /变量/ s的变量-stage.json

此外,如果在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

希望这有帮助。