Node.js 使用aws lambda将大数据流上载到S3

Node.js 使用aws lambda将大数据流上载到S3,node.js,amazon-web-services,amazon-s3,aws-lambda,node-streams,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Node Streams,当我尝试使用aws lambda函数读取数据并上传到数据流时,当流大小为250 mb或300 mb时,zip文件上传成功一分钟,但流大小为400 mb或500 mb时,函数超时,不进行上传 我的示例代码是 let upload = new AWS.S3.ManagedUpload({ partSize: 10 * 1024 * 1024, queueSize: 2, params: {Bucket: process.env.BUCKET_NAME, Key

当我尝试使用aws lambda函数读取数据并上传到数据流时,当流大小为250 mb或300 mb时,zip文件上传成功一分钟,但流大小为400 mb或500 mb时,函数超时,不进行上传

我的示例代码是

    let upload = new AWS.S3.ManagedUpload({
        partSize: 10 * 1024 * 1024, queueSize: 2,
        params: {Bucket: process.env.BUCKET_NAME, Key: `${correlationId}.zip`, Body: zipStream}
    });

    upload.on('httpUploadProgress', function (evt) {
        if (evt) {
            console.log('Completed ' + (evt.loaded * 100 / evt.total).toFixed() + '% of upload');
        }
    }).send((error, data) => {
        if (error) {
            console.error(`error creating stream to s3 ${error.name} ${error.message} ${error.stack}`);
        }
        console.log(`image zip file now sending ${data}`)
    });

    await upload.promise();

AWS SDK中所有请求的默认超时为2分钟。您可以使用以下方法增加超时:

AWS.config.httpOptions.timeout = 300000; // or 0 to disable timeout

还要确保增加Lambda超时。

基于Vpc的Lambda支持15分钟超时。这需要时间的原因是请求是通过互联网发送的。如果为S3创建vpc端点,速度应该更快


我尝试了,但没有工作:(,我的lamda函数执行超时是5分钟这是什么时候超时的?多少分钟后,你会得到什么错误?cloudwatch日志显示“任务在300.10秒后超时”嗯,你的Lambda超时了…增加Lambda超时。如果脚本花费的时间比你的Lambda超时时间长,那么代码中没有什么可以修改的,增加Lambda超时,现在我增加到10分钟,然后重试,但是为什么执行太长只有100 mb,300 mb上传一分钟,但500 mb需要超时?增加将与Lambda关联的RAM大小设为测试的最大值。这将相应增加CPU和其他资源,包括潜在的网络资源。这会改善情况吗?顺便问一下,这(从一个地方下载大文件并将其上载到另一个地方)可能不是Lambda的理想用例。这里没有提到VPC,VPC端点的主要用例是安全性(通过专用网络)。是的,而且请求不会离开AWS网络,因此显然您将获得更好的网络延迟。