NodeJS AWS S3 Lambda触发器无法将大于5 mb的视频文件从源复制到目标存储桶

vu8f3i0k  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(112)

我有一个AWS S3 Bucket,事件触发器,选择了“所有对象创建事件”选项。当一个小于5mb的视频文件通过NODE JS SDK lambda进入源存储桶时,它会成功复制到目标存储桶。但当大小超过5 MB时,复制失败。
云监视日志:与“开始”、“结束”和“报告”一起显示良好。对于成功复制,我有一个控制台日志“成功复制”,它不会出现失败的复制。
我的记忆设置是记忆:256 MB和Epherimal存储:1024 MB。
复制操作由Node js完成:

if ((event.Records[0].eventName) === "ObjectCreated:Put" ){
            await s3.copyObject(
            params, function (copyErr, copyData) {
                if (copyErr) {
                    console.log("Error: " + copyErr.stack);
                } else {
                    console.log(`succesfully copied);
                }
            }).promise();

注意:s3源存储桶的上传是通过NODEJS SDK s3.upload完成的
此外,奇怪的是,尝试手动上传到AWS S3源桶,它可以用于复制。
有什么建议吗?
已尝试手动上传到AWS S3源存储桶,该存储桶可用于复制。

xzabzqsa

xzabzqsa1#

根据文档s3.upload“上传任意大小的缓冲区、blob或流,如果有效负载足够大,则使用智能并发处理部分。”
这意味着,如果对象足够大,则将分部分上传,当所有部分都上传时,Amazon S3将组装这些部分并创建对象。
在此场景中,对应的事件将是“ObjectCreated:CompleteMultipartUpload”,而不是“ObjectCreated:Put”。
你可以尝试在if语句中考虑两个事件,看看它是否有效。
Class:AWS.S3 upload:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property:~:text=Uploads%20an%20arbitrarily%20sized%20buffer%2C%20blob%2C%20or%20stream%2C%20using%20intelligent%20concurrent%20handling%20of%20parts%20if%20the%20payload%20is%20large%20enough.%20You%20can%20configure%20the%20concurrent%20queue%20size%20by%20setting%20options.%20Note%20that%20this%20is%20the%20only%20operation%20for%20which%20the%20SDK%20can%20retry%20requests%20with%20stream%20bodies。
S3多部分上传:https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#:~:text=A%20CompleteMultipartUpload%20call%20to%20finish%20the%20process。

相关问题