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

使用AWS SDK Codemod迁移Lambda至V3后仍遇模块找不到错误

解决AWS SDK V2转V3后Lambda报错"Cannot find module 'aws-sdk'"的问题

问题原因

报错的核心是代码中仍保留了AWS SDK V2的全局依赖导入和配置逻辑,但V3已经完全摒弃了全局AWS对象的设计,且Lambda运行时默认不再预装V2版本的aws-sdk包,导致找不到模块。同时,代码里的AWS.config.update()配置在V3中完全无效,属于冗余代码。

解决方案

1. 删除V2 SDK的导入语句

直接移除第一行const AWS = require("aws-sdk");,V3采用独立服务客户端导入模式,你已经通过const { Connect } = require("@aws-sdk/client-connect");导入了所需的客户端,无需全局AWS对象。

2. 移除全局配置代码块

删除整个AWS.config.update()代码段,V3不支持全局配置,所有客户端配置都需要直接传递给对应的服务实例(你的Connect客户端已经单独配置了httpOptions)。

3. 清理Connect客户端的冗余参数

移除Connect构造函数中的apiVersion: "2017-08-08",V3客户端默认使用最新API版本,该参数已被废弃。

4. 确保依赖包正确打包部署

Lambda运行时不预装AWS SDK V3的客户端包,需要手动安装依赖并打包:

npm install @aws-sdk/client-connect proxy-agent --save

将node_modules目录与代码一起打包上传到Lambda。

修正后的完整代码

const { Connect } = require("@aws-sdk/client-connect");
const proxy = require("proxy-agent");
const { TIME_FRAME, PROXY_URL } = process.env;

const padLeft = (num) => (num < 10 ? `0${num}` : num);
const fixMinutes = (num) => Math.floor(num / 5) * 5;
const formatDate = (y, mon, d, h, m) => `${y}-${mon}-${d}T${h}:${m}`;
const extractDate = () => {
    const now = new Date();
    const minute = fixMinutes(now.getMinutes());
    return {
        year: now.getFullYear(),
        month: padLeft(now.getMonth() + 1),
        day: padLeft(now.getDate()),
        hour: padLeft(now.getHours()),
        minute: padLeft(minute),
    };
};

exports.handler = async (event, context, callback) => {
    const { ARN } = event["Details"]["ContactData"]["Queue"];
    const cleanedIds = ARN.split("instance/")[1].split("/queue/");
    const InstanceId = cleanedIds[0];
    const QueueId = cleanedIds[1];
    
    const connect = new Connect({
        httpOptions: {
            agent: proxy(PROXY_URL),
        },
    });
    
    const { year, month, day, hour, minute } = extractDate();
    const formattedEndDateTime = formatDate(year, month, day, hour, minute);
    const formattedStartDateTime = formatDate(year, month, day, hour, "00");
    const EndTime = new Date(formattedEndDateTime);
    const StartTime = new Date(formattedStartDateTime);
    StartTime.setMinutes(minute - TIME_FRAME);
    
    const params = {
        EndTime,
        StartTime,
        InstanceId,
        MaxResults: 10,
        Filters: {
            Channels: ["VOICE"],
            Queues: [QueueId],
        },
        HistoricalMetrics: [
            {
                Name: "QUEUE_ANSWER_TIME",
                Statistic: "AVG",
                Unit: "SECONDS",
            },
        ],
    };
    
    const { MetricResults } = await connect.getMetricData(params);
    const { Collections } = MetricResults[0];
    let waitTime = 15;
    if (Collections.length !== 0) {
        waitTime = Math.ceil(Collections[0].Value / 60);
    }
    
    return callback(null, { waitTime });
};

内容的提问来源于stack exchange,提问作者FrontPageRob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:45:14