1

serverless 提供了一个很好的工作流程,可以在运行时函数代码以及 Lambda 函数和 API Gateway 路由的 AWS 配置中使用变量。这在http://docs.serverless.com/docs/templates-variablesHow to define variables in a DRY way 中有描述。

当我在本地使用sls function run -s stage. 当我通过包含该选项在 Lambda 上运行测试时,该函数运行良好-d,但没有它会失败,因为尚未分配必要的变量。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;
...

有什么建议吗?

谢谢!

4

3 回答 3

0

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

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

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

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

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

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

  • _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 的值

于 2016-04-26T09:28:12.093 回答
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-variables-{your_region}-{your_stage}.json 文件中

sls variables set

然后在一行中给出键和值或如下

sls variables set -k appEnv -v dev

希望这可以帮助。

于 2016-11-23T07:01:45.863 回答
0

如果我添加-r us-east-1选项,serverless function run那么它工作正常。有趣的是,无服务器在远程运行时不需要 -r 选项(如果项目中有单个区域),但在本地运行时需要。

总结一下:

serverless function run -s stage -r us-east-1

成功地从适当的 s-variables 文件中读取变量,但是

serverless function run -s stage

才不是。相比之下,

serverless function run -s stage -d

在没有明确指定区域的情况下工作正常,大概是因为我的项目中只有一个区域。

于 2016-04-26T14:41:37.117 回答