无服务器调用本地啥都不做

Posted

技术标签:

【中文标题】无服务器调用本地啥都不做【英文标题】:Serverless invoke local does nothing无服务器调用本地什么都不做 【发布时间】:2018-11-08 22:03:36 【问题描述】:

我正在尝试在本地运行一个节点 lambda 来调试它。我在 vsCode 中使用 Serverless 和这个启动配置


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

当我运行调试模式时,它什么也不做。 Serverless 不会抛出任何错误,我只是无法进入函数内部。

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

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

我不知道他们在这里指的是什么,如果我们调用一个函数来运行 lambda 或调用 lambda 时调用它的函数。在这种情况下,我导出的函数是“处理程序”,但它也不起作用。

提前致谢。

【问题讨论】:

造成这种情况的原因是从无服务器服务目录外部运行 sls 命令。确保您在正确的目录中。 【参考方案1】:

我已经使用了这种方法,它对我有用:

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

不好的是,由于更大的无服务器社区,我想使用无服务器而不是 lambda-local 包。不过 Lambda-local 的作用就像是魅力一样,所以我从这里向它的创建者致以一个大大的拥抱。

仍然非常欢迎回答第一个问题。

编辑:好的,我想通了。

Serverless 作为框架,当我们需要添加一些配置时使用 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

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

希望这对某人有所帮助。

【讨论】:

【参考方案2】:

在本地服务器上运行无服务器既矛盾又烦人......

对像 Rookout 这样的实时 lambda 表达式使用调试解决方案怎么样? 它适用于 SAM 本地,但效果更好 - 它适用于 AWS 中的实时功能!

【讨论】:

想要在本地测试你的代码并查看它是否运行肯定是一个有效的用例。当然,这也可以使用测试框架来完成,但无需低估无需部署即可运行代码的价值。 我的建议适用于(本地和远程部署)...所以双赢...

以上是关于无服务器调用本地啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

NSPersistentContainer, performBackgroundTask, 调用 perform 啥都不做

如何修复“警告:useLayoutEffect 在服务器上啥都不做”?

如何在 Windows 服务中实现啥都不做 ExecuteAsync?

在 C# IIS 中调用 bat 文件啥都不做

python ftp 服务器显示“150 文件状态正常。即将打开数据连接。”啥都不做

从 Java 调用在 cmd 中执行 .bat 啥都不做