我可以从我们想在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中上传。
如果您在本地读取文件,则可以为每个块的文件的起点,并使用多部分上传。
希望它有帮助。