Lambda-local
Lambda-local允许您在本地机器上测试nodejsamazon Lambda函数,方法是提供一个简单的API和command-line工具。
它的目标并不是像serverless-offline或docker-lambda那样完美地证明特性,而是保持非常轻(它仍然提供一个完全构建的Context,处理其所有参数和函数,并且所有的东西都可以轻松地定制)。
主要目标是单元测试和本地运行lambda函数。
Install
npm install -g lambda-local
Build
make build
Or
npm install npm install --only=dev npm run build
Usage
- 作为API:也可以在脚本中直接使用Lambda local。例如,为了获得测试覆盖率,在MochaJS测试套件中很有趣。
- 作为命令行工具:可以使用Lambda-local作为命令行工具。
About: API
LambdaLocal
API可通过以下方式访问:
const lambdaLocal = require("lambda-local");
或者在TypeScript上(支持1.7.0+):
import lambdaLocal = require("lambda-local");
lambdaLocal.execute(options)
执行给定options对象的lambda,该对象是一个字典,其中的键可能是:

lambdaLocal.setLogger(logger)
lambdaLocal.getLogger()
这些函数允许访问lambda-local使用的winston记录器。
API examples
在这里的测试文件中可以找到很多例子,尤其是在摩卡中使用的例子
基本用法:使用承诺
const lambdaLocal = require('lambda-local');
var jsonPayload = {
'key': 1,
'another_key': "Some text"
}
lambdaLocal.execute({
event: jsonPayload,
lambdaPath: path.join(__dirname, 'path_to_index.js'),
profilePath: '~/.aws/credentials',
profileName: 'default',
timeoutMs: 3000
}).then(function(done) {
console.log(done);
}).catch(function(err) {
console.log(err);
});
基本用法:使用回调
const lambdaLocal = require('lambda-local');
var jsonPayload = {
'key': 1,
'another_key': "Some text"
}
lambdaLocal.execute({
event: jsonPayload,
lambdaPath: path.join(__dirname, 'path_to_index.js'),
profilePath: '~/.aws/credentials',
profileName: 'default',
timeoutMs: 3000,
callback: function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
},
clientContext: JSON.stringify({clientId: 'xxxx'})
});
About: CLI
Available Arguments
-l, --lambda-path <lambda index path>(必需)指定Lambda函数文件名。
-e, --event-path <event path>(必需)指定事件数据文件名。
-h, --handler <handler name>(可选)Lambda函数处理程序名称。默认为“处理程序”。
-t, --timeout <timeout>(可选)秒,直到lambda函数超时。默认值为3秒。
-r, --region <aws region>(可选)设置AWS区域,默认为us-east-1。
-P, --profile-path <aws profile name>(可选)读取指定的AWS凭据文件。
-p, --profile <aws profile name>(可选)与-P一起使用:读取文件的AWS配置文件。
-E, --environment <JSON {key:value}>(可选)为lambda设置额外的环境变量
--wait-empty-event-loop(可选)Sets callbackitsforemptyeventloop=True=>将在返回之前等待空循环。默认情况下,这是错误的,因为我们的实现并不完美,只“模拟”它。
--envdestroy(可选)关闭时销毁添加的环境。默认为false
-v, --verboselevel <3/2/1/0>(可选)默认值3。级别2消除handler()文本,级别1消除lambda-local文本,级别0也消除结果。
--envfile <path/to/env/file>(可选)从env文件设置额外的环境变量
--inspect [[host:]port](可选)使用NodeJS检查器启动lambda-local(在NodeJS>8.0.0中提供)
-W, --watch [port](可选)在监视模式下启动lambda-local,监听指定的端口[1-65535]。
CLI examples
# Simple usage
lambda-local -l index.js -h handler -e examples/s3-put.js
# Input environment variables
lambda-local -l index.js -h handler -e examples/s3-put.js -E '{"key":"value","key2":"value2"}'
将lambda函数作为HTTP服务器运行
一种简单的方法可以在本地运行lambda函数,而不需要创建任何特殊的模板文件(比如serverlessplugin和SAM所需的),只需添加参数--watch。它将引发一个监听指定端口的http服务器(默认值为8008),然后您可以通过请求体将事件负载传递给处理程序。
lambda-local -l examples/handler_helloworld.js -h handler --watch 8008
curl --request POST \
--url http://localhost:8008/ \
--header 'content-type: application/json' \
--data '{
"event": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}'
About: Definitions
Event data
事件示例数据被放在examples文件夹中-请随意使用此处的文件,或创建您自己的事件数据。事件数据只是导出的JSON对象:
// Sample event data
module.exports = {
foo: "bar"
};
Context
context对象是从在AWS上运行实际Lambda函数时可见的内容中取样的,以及可用的文档,它们可能会更改该对象的内部结构,Lambda-local并不保证与实际上下文对象总是up-to-date。
AWS-SDK
由于Amazon Lambda可以在不安装的情况下加载AWS-SDKnpm,Lambda-local还将AWS-SDK打包在其依赖项中。如果您想使用这个,请在aws凭证文件中使用-p或-P选项(或它们的API对应项)。更多信息请点击:http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-config-files