如何在本地测试 aws lambda 函数

How to test aws lambda functions locally

我有一个使用 node.js express 开发的移动应用程序后端。我尝试将其部署为 lambda 服务。为此,我创建了一个无服务器框架项目 (https://github.com/serverless)。之前我通过启动 express 后端应用程序在本地测试移动应用程序。现在我找不到在没有本地后端的情况下在本地测试我的移动应用程序的方法。 jaws run 命令只有 运行 一旦我调用它。

有什么方法可以将 lambda 函数作为 Web 服务来启动吗?或者有无服务器框架的替代方案吗?

目前看来没有办法做到这一点,但 1.4.0 版即将发布,除此之外,它应该包含一个新命令 "jaws serve",它应该可以解决您的问题问题。

这是公关:https://github.com/jaws-framework/JAWS/pull/269

更新:您现在可以为此使用新的 serverless-serve 插件。

更新 2:serverless-serve 已经有一段时间没有更新了,看起来 serverless-offline 现在是模拟 Lambda 函数的更好选择。

由于 1.4 尚未发布...

上周我需要完全相同的东西。因此我创建了一个可以在本地 运行 的小型模拟服务器: https://github.com/martinlindenberg/JawsLocalServer

  • 所有 headers 和参数都被复制到传递给处理程序的 event-object。
  • 上下文 object 是一个简单的 object,它将数据转发到响应 object

我不确定这个问题是否仍然相关,但我正在使用 DEEP Framework 在本地测试代码 and/or 将其部署在 AWS Lambda 上。看看这个:

npm install deepify -g

deepify run-lambda --help

  run-lambda@1.6.8 - Run Lambda function locally 

  Usage example: deepify run-lambda path/to/the/lambda -e='{"Name":"John Doe"}' 

  Arguments:  
    path: The path to the Lambda (directory of handler itself) 

  Options:  
    --event|-e: JSON string used as the Lambda payload 
    --skip-frontend-build|-f: Skip picking up _build path from the microservices Frontend 
    --db-server|-l: Local DynamoDB server implementation (ex. LocalDynamo, Dynalite) 
    --version|-v: Prints command version 
    --help|-h: Prints command help 

披露:我是该框架的贡献者之一

自此 post 之日起,您可以 运行 通过执行 sls function run [name-of-function] 在本地运行。在函数的 event.json 中使用的任何 json 都将传递到函数中。

为了测试您的端点,您还可以使用 Serverless Offline,它是 serverless-serve 项目的一个分支。

Bespoken sevrerless plugin 使您的本地 Lambda 可以从外部访问。它对于使用 Postman 进行本地测试以及基于 Webhook 的服务(如 Alexa、Slack、Twilio 等)都非常有用。

架构如下所示:

要使用它,只需安装插件,然后运行:

sls proxy

然后您可以开始向本地服务发送请求:

我们认为这是一个非常有用的无服务器测试工具。

这可能为时已晚..但现在您可以尝试 Serverless-Offline (https://www.npmjs.com/package/serverless-offline) 效果很好

这也是它的 github 页面 (https://github.com/dherault/serverless-offline)

您现在可以使用 lambda-local

这样安装:

sudo -H npm install -g lambda-local

将您的参数作为 JSON 对象添加到文件中,在本示例中为 event.json,然后像这样调用 index.js 文件:

lambda-local -l index.js -h handler -e event.json

The serverless framework now provide a way to invoke functions locally

有了它,您可以在 json 个文件中创建查询,例如

{
  "body": "{\"hello\":\"world\"}",
  "pathParameters": {
    "id": "foo"
  },
  "queryStringParameters": {
    "bar": "42"
  }
  "requestContext": {
    "identity": {
      "cognitoIdentityId": "cognito-id"
    }
  }
}

如果您的函数在 serverless.yml 文件中有描述,您可以在本地使用

调用它
serverless invoke local --function yourFunction --path path/to/your/mock.json

Python

一个例子lambda_function.py:

def lambda_handler(*args, **kwargs):
    return 'hello'

本地 lambda 函数调用示例:

pip install python-lambda-local
echo '{}' >> event.json
python-lambda-local -t 15 -f lambda_handler lambda_function.py event.json