TypeScript开发AWS Lambda运行报错找不到@aws-sdk/client-dynamodb模块
问题原因
tsc本身仅负责TypeScript到JavaScript的语法转译与类型校验,没有打包第三方依赖的功能,你的tsconfig.json配置没有错误,不存在遗漏配置的问题。- AWS Lambda的Node.js运行环境仅预装了AWS SDK v2版本,你代码中引入的
@aws-sdk/client-dynamodb属于AWS SDK v3的独立包,运行时默认不提供,因此触发了模块找不到的报错。
可行解决方案
- 方案1:部署时打包所有依赖
编译完成后,在输出的dist目录下执行npm install @aws-sdk/client-dynamodb aws-lambda安装生产依赖,再将dist目录下的所有文件(包括node_modules文件夹)一起打包成zip上传到Lambda即可。 - 方案2:改用预装的AWS SDK v2
直接使用Lambda运行环境自带的v2版本SDK,无需额外打包依赖,代码调整如下:import { APIGatewayProxyResult, SQSEvent } from "aws-lambda"; import * as AWS from 'aws-sdk' const { DynamoDbSchemaTable } = process.env; const dbClient = new AWS.DynamoDB({ region: "ap-southeast-2" }); export const lambdaHandler = async ( event: SQSEvent ): Promise<APIGatewayProxyResult> => { const payload = JSON.parse(event.Records[0].body); const params = { TableName: DynamoDbSchemaTable, Key: { FormGuid: { N: "7dabb5b8-a404-44a1-97f7-aeaca1dffb3a" }, }, }; try { const data = await dbClient.getItem(params).promise(); console.log(data); // process data. } finally { // finally. } return { statusCode: 200, body: `Queries: ${payload.formGuid}`, }; }; - 方案3:使用Lambda层托管依赖
将AWS SDK v3的相关依赖单独打包为Lambda层,挂载到当前函数即可,不需要每次部署都重复上传依赖。
内容的提问来源于stack exchange,提问作者codenode
相关产品推荐
相关产品推荐

