无服务器调用本地不执行任何操作

时间:2018-05-30 06:51:23

标签: javascript node.js debugging lambda serverless-framework

我试图在本地运行一个节点lambda来调试它。我在vsocode中使用无服务器和启动配置

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceRoot}/node_modules/.bin/sls",
      "args": [
        "invoke",
        "local",
        "--function",
        "hello",
        "--data",
        "hello world"
      ]
    }
  ]
}

我的export.handler看起来像这样:

module.exports.handler = (event, context, callback) => {
  if (event.triggerSource === CONSTANTS.TRIGGER_SOURCE) {
    console.log("event = " + JSON.stringify(event));
    const uri = process.env.SCT_URL_BASE;
    const country = process.env.SCT_COUNTRY;

    const username = 
event.request.userAttributes[CONSTANTS.USER_ATTRIBUTES];
    const codeP = event.request.codeParameter;
    console.log("URI = " + url);
    console.log("Code:" + codeP);

    getUrlData(uri, country, username, codeP);
  } else {
    context.done(null, event);
  }
};

当我运行de debug模式时,它什么都不做。无服务器不会抛出任何错误,我只是无法进入函数内部。

另外,还有一件我无法理解的事情。在无服务器文档中,它说:

- function或-f要在本地调用的服务中的函数的名称。必需的。

我不知道他们在这里引用了什么,如果我们调用运行lambda的函数或者在调用lambda时调用它的函数。在这种情况下,我导出的函数是" handler"但它也不起作用。

提前致谢。

2 个答案:

答案 0 :(得分:3)

在本地服务器上无服务器运行既令人厌烦又烦人...

如何为Rookout这样的实时lambda使用调试解决方案? 它可以在SAM本地运行,但效果更好-它可以在AWS的实时功能中运行!

答案 1 :(得分:0)

我使用过这种方法,它对我有用:

https://standardofnorms.wordpress.com/2017/12/03/locally-debugging-aws-lambdas-written-in-node-js/

糟糕的是,由于更大的无服务器社区,我想使用无服务器而不是lambda-local软件包。 Lambda-local的作品就像魅力一样,所以我从这里给它的创作者一个大抱抱。

第一个问题的答案仍然非常受欢迎。

编辑:好的,我想出来了。

当我们需要添加一些配置时,作为框架的无服务器使用serverless.yml文件。在那里,我不得不创建我将使用无服务器命令运行的函数,然后将其指向我拥有处理程序的文件。这是我的serverles.yml现在:

service: serverless-simple

frameworkVersion: ">=1.1.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs4.3

functions:
  lambdaHandler:
    handler: src/customMessageLambda.handler
    events:
      - http:
          path: ping

当然,我必须对此文件进行更多研究,但我已经解决了我的问题。

希望这有时会对某人有所帮助。