【问题标题】:Typescript AWS Lambda + serverless debugging and tracing with VCodeTypescript AWS Lambda + 使用 VCode 进行无服务器调试和跟踪
【发布时间】:2021-06-03 12:09:24
【问题描述】:

我创建了一个带有 serverless framework 的 AWS Lambda,并使用他们的模板创建了一个 lambda: sls create --template aws-nodejs-typescript

当我尝试在本地环境中运行默认的 'hello' 函数时,它工作得很好:

Serverless: Compiling with Typescript...
Serverless: Typescript compiled.
{
    "statusCode": 200,
    "body": "{\"message\":\"Hello {\\\"headers\\\":{\\\"Content-Type\\\":\\\"application/json\\\"},\\\"body\\\":{\\\"name\\\":\\\"Frederic\\\"}}, welcome to the exciting Serverless world!\",\"event\":{\"headers\":{\"Content-Type\":\"application/json\"},\"body\":{\"name\":\"Frederic\"}}}"
}
✨  Done in 7.37s.

但是,我最初的目标是弄清楚如何在我的本地环境中调试/跟踪这个 lambda,并能够放置刹车点。当我尝试运行它 F5 时,我收到一个错误:

[offline] Loading handler... (/Users/mickey/vault/github/backend-work/merlin-lambdas/be-ts-sponsored/.build/.webpack/service/src/functions/hello/handler)
[offline] _____ HANDLER RESOLVED _____
offline: Failure: Cannot find module '/Users/mickey/vault/github/backend-work/merlin-lambdas/be-ts-sponsored/.build/.webpack/service/src/functions/hello/handler'
Require stack:
- /Users/mickey/vault/github/backend-work/merlin-lambdas/be-ts-sponsored/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js

我的问题是我将如何跟踪/调试这个 lambda,考虑到它是用 webpack 设置的。 有没有办法调试/跟踪它,或者我必须删除 webpack 才能调试?

感谢您的帮助。

PS: 我的 vcode launch.json 包含:

 {
  "type": "node",
  "request": "launch",
  "name": "DEBUG",
  "runtimeExecutable": "npm",
  "cwd": "${workspaceRoot}",
  "runtimeArgs": [
    "run-script",
    "debug"
  ],
  "console": "integratedTerminal",
  "restart": true,
  "internalConsoleOptions": "neverOpen",
  "port": 9229
}

package.json:

"scripts": {
"start": "serverless offline -s dev",
"build": "yarn tsc",
"tsc": "tsc --project tsconfig.json",
"debug": "export SLS_DEBUG=* && node --inspect ./node_modules/.bin/serverless offline -s dev",
"test": "echo \"Error: no test specified\" && exit 1"

},

【问题讨论】:

    标签: typescript amazon-web-services webpack lambda serverless


    【解决方案1】:

    当您在本地使用无服务器框架运行您的函数时,您无法跟踪放置断点,相反,您几乎没有选择:

    将您的代码与无法在本地复制的 aws 服务(使用笑话模拟)隔离,例如 DynamoDB、SQS、SNS、S3...

    像使用任何节点应用程序一样运行您的代码(我大部分时间都使用 jest),这样您就可以独立于 aws 服务进行调试和放置断点。

    • 使用 sst 框架而不是无服务器框架,它提供了一种在其 aws 上下文中本地运行 lambda 的解决方案(它不是官方解决方案,而是一种 hack)

    https://docs.serverless-stack.com/working-locally https://docs.serverless-stack.com/debugging-with-vscode

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 2021-06-11
      • 2021-10-19
      • 2019-04-17
      • 2020-10-22
      • 2018-01-21
      • 2018-08-06
      • 2018-02-21
      • 1970-01-01
      相关资源
      最近更新 更多