在 AWS Lambda 和 AWS Cloudwatch 中使用 Typescript 源映射

max*_*ime 6 amazon-cloudwatch typescript aws-lambda

我正在使用 AWS Lambda 和ESBuild构建的 Typescript

ESBuild 将所有必要的代码聚合在一个 index.js 构建文件中,这使得冷启动非常快,并确保不会发送不必要的代码。它还可以生成源映射

您知道如何让Cloudwatch 了解源映射,以便获取与我的实际源代码而不是构建相关的堆栈跟踪吗?

max*_*ime 11

我在这里找到了答案:NodeJS 支持源映射,Lambda 支持节点选项。

在 Typescript 上生成源映射,然后将此环境变量添加到 lambda:

NODE_OPTIONS=--enable-source-maps
Run Code Online (Sandbox Code Playgroud)

现在,当记录堆栈跟踪时,它指向原始文件和行

{
  "errorType": "Error",
  "errorMessage": "Missing process.env.TABLE_EVENT",
  "trace": [
    "Error: Missing process.env.TABLE_EVENT",
    "    at /var/task/index.js:12496:11",
    "        -> /backend/service/userService/lib/dynamodb.js:6:9",
    "    at /var/task/index.js:4:5",
    "    at /var/task/index.js:16979:18",
    "        -> /backend/service/userService/lib/handlers/publishReminders.js:4:26",
    "    at /var/task/index.js:4:5",
    "    at /var/task/index.js:17121:33",
    "        -> /backend/service/userService/lib/handlers/index.js:1:43",
    "    at /var/task/index.js:4:5",
    "    at Object.<anonymous> (/var/task/index.js:17136:16)",
    "        -> /backend/service/userService/lib/index.js:16:26",
    "    at Module._compile (internal/modules/cjs/loader.js:999:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
    "    at Module.load (internal/modules/cjs/loader.js:863:32)"
  ]
}
Run Code Online (Sandbox Code Playgroud)