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