AWS Lambda报错:无法找到模块‘aws-sdk’,附代码与配置
解决AWS Lambda中“无法找到模块‘aws-sdk’”的问题
你在使用Node.js 20.x运行时的Lambda函数中遇到了无法找到模块‘aws-sdk’的错误,核心原因是Node.js 18及以上版本的Lambda运行时不再预装旧版AWS SDK for JavaScript v2(即aws-sdk包),以下是两种可行的解决办法:
方案1:迁移到AWS SDK for JavaScript v3(官方推荐)
新版v3采用模块化设计,体积更小、性能更优,是Lambda的官方推荐方案。
步骤1:安装所需模块(本地开发环境)
npm install @aws-sdk/client-s3 @aws-sdk/client-elastic-transcoder
步骤2:修改函数代码
替换原有的v2调用逻辑,改用v3的命令式调用模式:
'use strict'; const { S3Client } = require("@aws-sdk/client-s3"); const { ElasticTranscoderClient, CreateJobCommand } = require("@aws-sdk/client-elastic-transcoder"); // 初始化客户端 const s3 = new S3Client({ apiVersion: '2012-09-25' }); const eltr = new ElasticTranscoderClient({ apiVersion: '2012-09-25', region: 'ap-south-1' }); exports.handler = async (event, context) => { console.log('执行Elastic Transcoder'); const bucket = event.Records[0].s3.bucket.name; const key = event.Records[0].s3.object.key; const pipelineId = '1****************'; if (bucket !== '*****') { return context.fail('输入Bucket不正确'); } const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); const newKey = key.split('.')[0]; const fk= "400K"; const sk= "600K"; const om= "1.5M"; const tm= "2M"; const th= "Thumb"; const params = { PipelineId: pipelineId, OutputKeyPrefix: newKey + '/', Input: { Key: srcKey, FrameRate: 'auto', Resolution: 'auto', AspectRatio: 'auto', Interlaced: 'auto', Container: 'auto' }, Outputs: [{ Key: `${fk}/hls4K-${newKey}.ts`, ThumbnailPattern: `${th}/thumbs4K-{count}`, PresetId: '***************',//HLS v3 400K码率 SegmentDuration:"5" }, { Key: `${sk}/hls6K-${newKey}.ts`, ThumbnailPattern: `${th}/thumbs6K-{count}`, PresetId: '**********', //HLS v3 600K码率 SegmentDuration:"5" }, { Key: `${om}/hls1.5M-${newKey}.ts`, ThumbnailPattern: `${th}/thumbs1.5M-{count}`, PresetId: '***************', //HLS v3 1.5M码率 SegmentDuration:"5" }, { Key: `${tm}/hls2M-${newKey}.ts`, ThumbnailPattern: `${th}/thumbs2M-{count}`, PresetId: '*****************', //HLS v3 2M码率 SegmentDuration:"5" }], Playlists: [{ Format: 'HLSv3', Name: `hls-${newKey}`, OutputKeys: [`${fk}/hls4K-${newKey}.ts`, `${sk}/hls6K-${newKey}.ts`, `${om}/hls1.5M-${newKey}.ts`, `${tm}/hls2M-${newKey}.ts`] }] }; console.log('启动任务'); try { const data = await eltr.send(new CreateJobCommand(params)); console.log(data); return context.succeed('任务执行完成'); } catch (err) { console.log(err); return context.fail(err); } };
方案2:手动打包旧版aws-sdk v2(不推荐)
如果暂时不想迁移到v3,可以手动将旧版aws-sdk包加入部署包:
- 本地安装旧版SDK:
npm install aws-sdk
- 确保SAM打包时包含
node_modules目录(你的模板已设置PackageType: Zip,只要本地安装了依赖,打包时会自动包含)。
⚠️ 注意:旧版v2体积较大,会增加Lambda部署包大小、延长冷启动时间,且官方不再维护新特性,仅作为临时过渡方案。
额外注意事项
- 你的SAM模板中Lambda运行时为
nodejs20.x,部署前需确认依赖已正确打包。 - 当前模板仅配置了日志权限,需为Lambda执行角色添加ElasticTranscoder的
CreateJob权限和S3的相关操作权限,否则会出现权限报错。
内容的提问来源于stack exchange,提问作者Muhammad Muazzam
相关产品推荐
相关产品推荐

