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

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包加入部署包:

  1. 本地安装旧版SDK:
npm install aws-sdk
  1. 确保SAM打包时包含node_modules目录(你的模板已设置PackageType: Zip,只要本地安装了依赖,打包时会自动包含)。

⚠️ 注意:旧版v2体积较大,会增加Lambda部署包大小、延长冷启动时间,且官方不再维护新特性,仅作为临时过渡方案。


额外注意事项

  • 你的SAM模板中Lambda运行时为nodejs20.x,部署前需确认依赖已正确打包。
  • 当前模板仅配置了日志权限,需为Lambda执行角色添加ElasticTranscoder的CreateJob权限和S3的相关操作权限,否则会出现权限报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:41:07