如何在本地测试AWS Lambda函数

27 投票
9 回答
22396 浏览
提问于 2025-05-10 23:26

我有一个用 Node.js 和 Express 开发的移动应用后台。我尝试把它部署成一个 Lambda 服务。为此,我创建了一个 Serverless Framework 项目(https://github.com/serverless)。之前我是在本地启动 Express 后台应用来测试移动应用的。现在我找不到方法在没有本地后台的情况下测试我的移动应用。jaws run 命令只能在我调用它的时候运行一次。

有没有什么方法可以把 Lambda 函数当作一个网络服务来启动?或者有没有其他的替代 Serverless Framework 的方案?

相关文章:

  • 暂无相关问题
暂无标签

9 个回答

2

Bespoken无服务器插件可以让你在本地开发的Lambda函数变得可以被外部访问。这对于使用Postman进行本地测试以及处理基于Webhook的服务(比如Alexa、Slack、Twilio等)非常有用。

它的架构如下所示:

这里是图片描述

使用这个插件很简单,你只需要安装它,然后运行:

sls proxy

接着,你就可以开始向你的服务发送本地请求了:

这里是图片描述

我们认为这是一个非常有用的工具,适合用来进行无服务器的测试。

3

现在,serverless框架提供了一种在本地调用函数的方法

通过这个方法,你可以在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
3

我不确定这个问题现在是否还适用,但我正在使用DEEP框架来在本地测试代码或者把它部署到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 

声明:我是这个框架的贡献者之一

4

现在你可以使用 lambda-local 这个工具了。

安装的方法如下:

sudo -H npm install -g lambda-local

把你的参数以 JSON 格式放到一个文件里,这里举个例子叫做 event.json,然后像这样调用 index.js 文件:

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

现在似乎没有办法做到这一点,不过版本1.4.0快要发布了,里面会有一个新命令“jaws serve”,这个命令应该能解决你的问题。

这是相关的链接: https://github.com/jaws-framework/JAWS/pull/269

更新:你现在可以使用新的 serverless-serve 插件来实现这个功能。

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

撰写回答