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

AWS S3 Lambda触发器无法复制5MB以上视频文件问题排查

问题原因与解决方案

核心问题1:事件类型不匹配

当使用AWS SDK的s3.upload接口上传文件时,文件大小超过5MB会自动触发分块上传(Multipart Upload),此时S3发送的事件是ObjectCreated:CompleteMultipartUpload,而非你代码中判断的ObjectCreated:Put。你的Lambda仅处理了Put类型事件,导致大文件上传后复制逻辑根本没有执行,自然不会输出任何成功/错误日志。

而手动上传大文件时,若使用的是单段上传方式(比如部分工具或控制台针对特定大小文件的默认行为),触发的是ObjectCreated:Put事件,因此代码可以正常执行。

核心问题2:代码写法错误

你混合使用了回调函数与Promise(await ...promise()),这种写法会导致回调被直接忽略;同时未用try/catch捕获Promise异常,一旦复制操作出错,Lambda会静默失败且无日志输出。另外你的成功日志存在语法错误(模板字符串未闭合)。


修复步骤

1. 修改事件判断逻辑

同时处理所有对象创建类型的事件,覆盖单段上传和分块上传的场景:

const eventName = event.Records[0].eventName;
// 匹配所有ObjectCreated开头的事件
if (eventName.startsWith('ObjectCreated:')) {
  // 执行复制逻辑
}

2. 修正代码的Promise使用方式

去掉冗余回调,用try/catch捕获异常,同时修复语法错误:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
  const eventName = event.Records[0].eventName;
  if (eventName.startsWith('ObjectCreated:')) {
    const sourceBucket = event.Records[0].s3.bucket.name;
    const sourceKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    const targetBucket = '你的目标存储桶名称';
    const targetKey = sourceKey; // 可自定义目标路径

    const params = {
      Bucket: targetBucket,
      CopySource: `${sourceBucket}/${sourceKey}`,
      Key: targetKey
    };

    try {
      const copyData = await s3.copyObject(params).promise();
      console.log(`Successfully copied object: ${JSON.stringify(copyData)}`);
    } catch (copyErr) {
      console.error("Copy failed:", copyErr.stack);
      // 抛出异常,让Lambda标记为执行失败(可选,根据业务需求调整)
      throw copyErr;
    }
  }
};

3. 调整Lambda超时时间

大文件复制需要更长执行时间,默认3秒超时可能导致静默失败。建议将Lambda超时调整为30秒(或根据文件大小进一步延长)。

4. 确认IAM权限(可选)

确保Lambda执行角色拥有以下权限:

  • 源存储桶的s3:GetObject权限
  • 目标存储桶的s3:PutObject权限

(小文件复制成功说明权限基本正常,若仍有问题可检查权限策略是否覆盖分块上传相关对象)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:42