如何使用无服务器模块在本地调试AWS Lambda Node.js?

时间:2018-10-01 09:02:26

标签: node.js windows amazon-web-services aws-lambda serverless

我对AWS和无服务器等设备完全陌生。为了加快开发速度,我希望能够在本地调试应用程序。

在本文Running and Debugging AWS Lambda functions locally之后,我试图做到这一点。

在Visual Studio Code中,当我运行调试配置时,应用程序立即退出而没有错误(在“ content”变量的声明和初始化上设置了一个断点)。我不确定函数名称是否正确。我正在尝试在“ index.js”中定义的主要“处理程序”函数中输入:

exports.handler = (event, context, callBack) =>
{   
    let bIsPostRequest = false, bIsPutRequest = false, bIsGetRequest = false, bIsDelRequest = false;
    let content = "";

...

这是我的“ launch.json”配置文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Debugger",
            "program": 
             "${workspaceFolder}\\node_modules\\serverless\\bin\\serverless",
            "args":[
                "invoke",
                "local",
                "-f",
                "index.handler", // function name
                "--data",
                "{}"
            ],
            "outFiles": [
                "${workspaceFolder}\\index.js"
            ]
        }
    ]
}

此外,我对配置文件中“输出文件”的定义不是100%肯定。我得出的结论是它是我要调试的文件,但是,在这种情况下,“ outfiles”在我看来似乎不是一个合适的名字。

我正在工作的本地环境是Windows。

1 个答案:

答案 0 :(得分:1)

遇到this post之后,我设法使调试器正常工作。这是符合我需求的配置:

symbol name

我在主工作目录中将此文件另存为“ debugLocal.js”。现在,launch.json文件如下所示:

const lambdaLocal = require('lambda-local');
var lambdaFunc = require("./index.js");

lambdaLocal.execute({
lambdaFunc: lambdaFunc, 
lambdaHandler: "handler",
event: {
    context: {
        "resource-path": "/products",
        "http-method": "GET"
    },
    "body-json": {
        name : "ProductA"
    }
 }
}).then(function(done) {
    console.log(done);
}).catch(function(err) {
    console.log(err);
});

到目前为止,一切似乎都可以很好地复制。需要注意的一件事是,包含文件上的文件路径必须稍作更改,即用{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Debugger", "program": "${workspaceFolder}\\debugLocal.js" } ] } 代替require("./js/inc/globalDefines.js");