Amazon Lambda中的函数错误 TypeScript - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Lambda中的函数错误 TypeScript

如果转换后的 TypeScript 代码中出现异常 JavaScript,请使用源映射文件来确定错误发生的位置。源映射文件允许调试器将编译后的 JavaScript 文件映射到 TypeScript 源代码。

例如,以下代码导致一个错误:

export const handler = async (event: unknown): Promise<unknown> => { throw new Error('Some exception'); };

Amazon Lambda 将捕获该错误,并生成一个 JSON 文档。但是,此 JSON 文档指的是编译后的 JavaScript 文件 (app.js),而不是 TypeScript 源文件。

{ "errorType": "Error", "errorMessage": "Some exception", "stack": [ "Error: Some exception", " at Runtime.p [as handler] (/var/task/app.js:1:491)", " at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)" ] }
获取映射到您的 TypeScript 源文件的错误响应
注意

以下步骤对 Lambda@Edge 函数无效,因为 Lambda@Edge 不支持环境变量。

  1. 使用 esbuild 或其他 TypeScript 编译器生成源映射文件。例如:

    esbuild app.ts —sourcemap —outfile=output.js
  2. 将该源映射添加到您的部署中。

  3. 通过将 --enable-source-maps 添加到您的 NODE_OPTIONS,打开 Node.js 运行时的源映射。

例 对于 Amazon Serverless Application Model (Amazon SAM)
Globals: Function: Environment: Variables: NODE_OPTIONS: '--enable-source-maps'

确保 template.yaml 文件中的 esbuild 属性包含 Sourcemap: true。例如:

Metadata: # Manage esbuild properties BuildMethod: esbuild BuildProperties: Minify: true Target: "es2020" Sourcemap: true EntryPoints: - app.ts
例 Amazon Cloud Development Kit (Amazon CDK) 的示例

要在Amazon CDK应用程序中使用源映射,请将以下代码添加到包含该NodejsFunction 构造的文件中。

const helloFunction = new NodejsFunction(this, 'function',{ bundling: { minify: true, sourceMap: true }, environment:{ NODE_OPTIONS: '--enable-source-maps', } });

当您在代码中使用源映射时,您会收到类似于以下内容的错误响应。此响应显示错误发生在 app.ts 文件中的第 2 行、第 11 列。

{ "errorType": "Error", "errorMessage": "Some exception", "stack": [ "Error: Some exception", " at Runtime.p (/private/var/folders/3c/0d4wz7dn2y75bw_hxdwc0h6w0000gr/T/tmpfmxb4ziy/app.ts:2:11)", " at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)" ] }