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