【问题标题】:serverless variables in local tests本地测试中的无服务器变量
【发布时间】:2016-08-19 14:52:55
【问题描述】:

无服务器提供了一个很好的工作流程,可以在运行时函数代码以及 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 选项在 Lambda 上运行测试时,该函数运行良好,但没有它它会失败,因为尚未分配必要的变量。无服务器提供这些消息:

Serverless: WARNING: This variable is not defined: region  
Serverless: WARNING: This variable is not defined: appEnv

我正在使用链接 2 中描述的 DRY 变量。具体来说:

s-variables-aguldman-useast1.json:

{
  "appEnv": "qa"
}

functions/fn1/s-function.json:

{
...
  "environment": {
    "NODE_ENV": "${appEnv}"
  }
...
}

functions/fn1/handler.js:

...
var foo = process.env.NODE_ENV;
...

有什么建议吗?

谢谢!

【问题讨论】:

    标签: aws-lambda serverless-framework


    【解决方案1】:

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

    • 您正在尝试输出一个名为 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 的值

    【讨论】:

    • 对对对。对不起这个糟糕的问题。我只是改进了它,并且(可以预见地)在这样做的过程中能够回答我自己的问题。感谢您的帮助!
    【解决方案2】:

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

    总结一下:

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

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

    serverless function run -s stage
    

    没有。相比之下,

    serverless function run -s stage -d
    

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

    【讨论】:

      【解决方案3】:

      首先运行以下命令在 _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
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 2014-10-18
        • 2017-05-31
        相关资源
        最近更新 更多