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

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

serverless为在运行时函数代码以及Lambda函数和API网关路由的AWS配置中使用变量提供了一个很好的工作流。这在和中描述

当我使用
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

希望这有帮助。

对,对。对不起,这个糟糕的问题。我只是改进了它,而且(可以预见)在这样做的过程中能够回答我自己的问题。谢谢你的帮助!对,对。对不起,这个糟糕的问题。我只是改进了它,而且(可以预见)在这样做的过程中能够回答我自己的问题。谢谢你的帮助!