【问题标题】:How to debug AWS Lambda Node.js locally using serverless module?如何使用无服务器模块在本地调试 AWS Lambda Node.js?
【发布时间】:2020-10-04 20:53:41
【问题描述】:

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

在这篇文章Running and Debugging AWS Lambda functions locally 之后,我试图实现这一目标。

在 Visual Studio Code 中,当我运行调试配置时,应用程序会立即退出而不会出错(在“内容”变量的声明和初始化上设置了断点)。我不确定我的函数名是否正确。我正在尝试在“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 环境。

【问题讨论】:

  • 试试serverless-offline 无服务器插件
  • 我试过了,但没有运气。我现在已经发布了对我有用的解决方案。感谢您抽出宝贵时间回复

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


【解决方案1】:

在遇到this post 之后,我设法让调试器正常工作。这是满足我需要的配置:

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);
});

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

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Debugger",
            "program": "${workspaceFolder}\\debugLocal.js"
        }
    ]
}

到目前为止,一切似乎都被很好地复制了。需要注意的一件事是 include 上的文件路径必须稍微更改,即 require("./js/inc/globalDefines.js"); 而不是 require("js/inc/globalDefines.js");

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 2017-10-07
    • 2019-01-21
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2018-01-21
    • 2021-11-04
    相关资源
    最近更新 更多