如何在本地测试AWS Lambda函数
我有一个用 Node.js 和 Express 开发的移动应用后台。我尝试把它部署成一个 Lambda 服务。为此,我创建了一个 Serverless Framework 项目(https://github.com/serverless)。之前我是在本地启动 Express 后台应用来测试移动应用的。现在我找不到方法在没有本地后台的情况下测试我的移动应用。jaws run
命令只能在我调用它的时候运行一次。
有没有什么方法可以把 Lambda 函数当作一个网络服务来启动?或者有没有其他的替代 Serverless Framework 的方案?
相关文章:
- 暂无相关问题
9 个回答
Bespoken无服务器插件可以让你在本地开发的Lambda函数变得可以被外部访问。这对于使用Postman进行本地测试以及处理基于Webhook的服务(比如Alexa、Slack、Twilio等)非常有用。
它的架构如下所示:

使用这个插件很简单,你只需要安装它,然后运行:
sls proxy
接着,你就可以开始向你的服务发送本地请求了:
我们认为这是一个非常有用的工具,适合用来进行无服务器的测试。
现在,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
我不确定这个问题现在是否还适用,但我正在使用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
声明:我是这个框架的贡献者之一
现在你可以使用 lambda-local 这个工具了。
安装的方法如下:
sudo -H npm install -g lambda-local
把你的参数以 JSON 格式放到一个文件里,这里举个例子叫做 event.json
,然后像这样调用 index.js
文件:
lambda-local -l index.js -h handler -e event.json
现在似乎没有办法做到这一点,不过版本1.4.0快要发布了,里面会有一个新命令“jaws serve”,这个命令应该能解决你的问题。
这是相关的链接: https://github.com/jaws-framework/JAWS/pull/269
更新:你现在可以使用新的 serverless-serve 插件来实现这个功能。
更新2:serverless-serve已经有一段时间没更新了,现在看起来 serverless-offline 是一个更好的选择,可以用来模拟Lambda函数。