lambda-local, 在本地机器上,命令行工具运行 Amazon Lambda函数

分享于 

9分钟阅读

GitHub

  繁體 雙語
Commandline tool to run Amazon Lambda function on local machines.
  • 源代码名称:lambda-local
  • 源代码网址:http://www.github.com/ashiina/lambda-local
  • lambda-local源代码文档
  • lambda-local源代码下载
  • Git URL:
    git://www.github.com/ashiina/lambda-local.git
    Git Clone代码到本地:
    git clone http://www.github.com/ashiina/lambda-local
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ashiina/lambda-local
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    本地

    Build Status

    local local允许你在本地机器上使用示例事件数据测试 Amazon Lambda函数。 Lambda函数的context 已经加载,所以你不必担心它。 你可以根据需要传递任何 event JSON对象。

    安装

    npm install -g lambda-local

    用法

    作为 命令行 工具

    你可以将lambda本地用作 命令行 工具。

    # Simple usagelambda-local -l index.js -h handler -e examples/s3-put.js# Input environment variableslambda-local -l index.js -h handler -e examples/s3-put.js -E '{"key":"value","key2":"value2"}'

    在另一个 node.js-脚本中

    你也可以在脚本中直接使用Lambda本地。 例如在 MochaJS 测试套件中,为了获得测试覆盖,它很有趣。

    有关更多信息,请参见 API

    : CLI

    命令

    • -l,--lambda-path ( 必选) 指定Lambda函数文件名。
    • -e,--event-path ( 必选) 指定事件数据文件名。
    • -h,--handler ( 可选) Lambda函数处理程序名称。 默认值为"处理程序"。
    • -t,--timeout ( 可选) 秒直到lambda函数超时。 默认值为 3秒。
    • -n,--no-force-callback ( 可选) 强调函数在调用处理函数后停止,即使 context.done/succeed/fail 没有调用。
    • R,--region ( 可选) 设置AWS区域,默认值为 us-east-1.
    • -P,--profile-path ( 可选) 读取指定的AWS凭据文件。
    • -P,--profile ( 可选),使用英镑: 读取文件的AWS概要文件。
    • -E,--environment <JSON {key:value}> ( 可选) 为lambda设置额外的环境变量
    • --envdestroy ( 可选) 在关闭时销毁了环境。 默认为 false
    • -v,--verboselevel <3/2/1/0>'。( 可选) ) 默认 3。 级别 2关闭 handler() 文本,级别 1关闭lambda本地文本和水平 0消除结果。
    • --envfile <path/to/env/file> ( 可选) 从环境文件中设置额外的环境变量

    事件数据

    事件示例数据放置在 examples 文件夹中- 请随意使用这里的文件,或者创建你自己的事件数据。 事件数据只是导出的JSON对象:

    // Sample event datamodule.exports= {
     foo:"bar"};

    命令行上下文

    当运行一个实际的Lambda函数时,可以从源直接从源中提取 context 对象。 他们可能会改变这个对象的内部,lambda本地并不保证这将始终与实际上下文对象一起更新。

    aws

    由于 Amazon Lambda可以无需安装而加载,所以Lambda本地还在它的依赖关系中打包,。 如果要使用这里选项,请将"-p"选项与aws凭据文件一起使用。 更多信息:http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-config-files

    : API

    LambdaLocal

    execute(options)

    在给定键的options 对象的情况下执行一个 lambda:

    • event - 请求的事件作为json对象
    • lambdaPath - lambda函数的请求路径
    • lambdaFunc - 传递lambda函数。 你不能同时使用它作为 lambdaPath
    • profilePath - 可选,你的AWS凭证文件路径
    • profileName - 可选,aws配置文件名称。 必须与
    • lambdaHandler - 可选处理程序名称,默认为 handler
    • region - 可选,AWS区域,默认为 us-east-1
    • callbackWaitsForEmptyEventLoop - 可选,默认为 true。 将它设置为 false 将在你的代码完成时调用回调,然后在完成lambda本地
    • timeoutMs - 可选,超时,默认为 3000毫秒
    • environment - 可选,用于lambda的额外 环境变量
    • envfile - 可选,在引导前加载环境文件
    • envdestroy - 可选,在关闭时销毁附加的环境,默认为 false
    • verboseLevel - 可选,默认 3。 级别 2关闭 handler() 文本,级别 1关闭lambda本地文本和水平 0消除结果。
    • callback 可选,lambda第三个参数回调函数。 当遗漏一个承诺时
    setLogger(logger)

    如果你使用的是 ,这将会传递温斯顿记录器而不是控制台。

    API示例用法

    基本:在另一个 node.js-脚本中
    constlambdaLocal=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);
     }
     }
    });
    使用 promise
    constlambdaLocal=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);
    });

    使用lambda局部来模拟

    你可以使用Lambda本地模拟你的Lambda,然后运行它,使用 MochaJSSinonJS。

    在本示例中,我们假设你得到了这样的测试函数:

    /* * Lambda function used to test mocking.*/exports.getData=functiongetData(){
     return"WrongData";
    }exports.handler=function(event, context) {
     context.done(null, exports.getData()); 
    };

    然后,你将能够在 test.js mocha 文件中使用,如下所示:

    //An empty eventvar jsonPayload = {
     }
     var done, err;
     before(function (cb) {
     var lambdalocal =require('lambda-local');
     lambdalocal.setLogger(your_winston_logger);
     var lambdaFunc =require("path_to_test-function.js");
     //For instance, this will replace the getData contentsinon.mock(lambdaFunc).expects("getData").returns("MockedData"); 
     //see on sinonjs page for more optionslambdalocal.execute({
     event: jsonPayload,
     lambdaFunc: lambdaFunc, //We are directly passing the lambda function lambdaHandler:"handler",
     callbackWaitsForEmptyEventLoop:true,
     timeoutMs:3000,
     callback:function (_err, _done) { //We are storing the results and finishing the before() call => one lambda local call for multiple tests err = _err;
     done = _done;
     cb();
     },
     verboseLevel:1//only prints a JSON of the final result });
     });
     describe("Your first test", function () {
     it("should return mocked value", function () {
     assert.equal(done, "MockedData");
     });
     });
     ... Other tests

    插件开发

    • 运行 make 以安装npm模块。 ( 需要开发&测试lambda本地)
    • 运行 make test 以执行 mocha 测试。

    许可证

    这个库是在MIT许可下发布的。


    COM  tool  COMM  mac  FUNC  函数  
    相关文章