Använd Typescript sourcemaps i AWS Lambda och AWS Cloudwatch


Jag använder AWS Lambdas med Typescript byggt av ESBuild

ESBuild samlar all nödvändig kod i en enda index.js-byggfil vilket gör kallstarten ganska snabb och säkerställer att ingen onödig kod skickas. Det kan också generera sourcemaps.

Vet du hur jag kan få Cloudwatch att bli medvetet om sourcemaps för att få stackspår relaterade till min faktiska källkod och inte bygget?

Svar #1

Jag hittade svaret här: NodeJS stöder sourcemaps, och Lambda stöder node-alternativ.

Generera dina sourcemaps på Typescript och lägg bara till denna miljövariabel till lambdan:

NODE_OPTIONS=--enable-source-maps

nu när en stacktrace loggas, pekar den på den ursprungliga filen och raden

{
  "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)"
  ]
}

Relaterade artiklar