You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript开发AWS Lambda运行报错找不到@aws-sdk/client-dynamodb模块

问题原因

  1. tsc 本身仅负责TypeScript到JavaScript的语法转译与类型校验,没有打包第三方依赖的功能,你的tsconfig.json配置没有错误,不存在遗漏配置的问题。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:39:03