使用AWS lambda将非常大的图像从网络传输到S3



我可以从我们想在S3上保存的网络中访问20 GB的图像文件。

可以使用AWS lambda做到这一点吗?从我的理解方式来看,局限似乎如下:

  • lambda内存(无法将整个图像加载到内存中)

现在,如果我们决定从网络流式传输到s3(例如使用 requests.get(image_url, stream=True)或smart_open ..

  • lambda达到了超时限制,..
  • S3不支持附加到S3对象。因此,成功的lambda运行以继续在S3上"组装"图像(在此之前删除的图像)将必须加载S3上已经已经存在的部分图像,然后才能开始附加更多数据并上传结果,并上传最大的部分图像。到S3。

我也听说过其他建议使用多部分上传的人。但是我很高兴知道这与流媒体不同,以及如何克服上面列出的限制。

谢谢!

用S3简化了事情。

创建一个lambda以生成预签名的URL以进行多部分上传。

创建多部分上传:

http://docs.aws.amazon.com/awsjavascriptsdk/latest/aws/aws/s3.html#createmultipartipartupload-property

使用上述多部分上传密钥创建签名的URL:

http://docs.aws.amazon.com/awsjavascriptsdk/latest/aws/aws/s3.html#getsignedurl-property

使用该URL并行上传文件的多个部分。您也可以使用S3加速器进行高速上传。

希望它有帮助。

edit1:

您可以在1至10,000之间将文件分开并上传。

http://docs.aws.amazon.com/amazons3/latest/dev/mpuoverview.html

如果您仅执行一个文件上传,则可以在CLI而不是Lambda中生成签名和多部分。

如果您定期进行,则可以通过lambda生成它们。

读取要上传的文件时,如果您通过HTTP读取它们,请在块中读取它们,然后在Multipart中上传。

如果您在本地读取文件,则可以为每个块的文件的起点,并使用多部分上传。

希望它有帮助。

最新更新