【发布时间】:2020-03-19 12:17:34
【问题描述】:
我正在尝试使用我用 python 编写的 lambda (aws) 完成分段上传。下面是我正在使用的代码。大约有 120 个部分,总大小为 30GB。以下操作似乎没有在 5 分钟内完成,因此 lambda 关闭并且上传似乎没有完成。 S3 是否提供异步多部分上传功能?我相信这将确保文件得到合并,而不管 lambda 关闭。
resp = s3.complete_multipart_upload(Bucket=bucket_name, Key=result_filename, UploadId=upload_id, MultipartUpload={'Parts': parts_mapping})
【问题讨论】:
-
所以你运行了很多 Lambda,每个上传一个部分,然后一个最终的 Lambda 来完成分段上传?
-
是的,没错。
-
您有两种选择:减小每个部分的大小或增加内存大小(这会增加网络带宽)或两者兼而有之。我很好奇你为什么选择 Lambda 来实现这个功能。
-
@JohnHanley 谢谢。 Lambda 的内存大小为最大值。我有 122 个部分,每个部分只有 100 MB 的数据。我想当我进行多部分上传时,一切都发生在 S3 的幕后,我假设 S3 需要 5 分钟以上的时间来处理。这是一个现有的过程,它适用于具有大约 10 Gb 数据的其他文件,因此尝试重用相同的文件。在使用完整的分段上传 api 将所有详细信息传递给 S3 后,S3 不支持异步处理吗?
-
我在 boto3 SDK(或更一般地在 S3 REST API 中)中看不到任何支持异步完成分段上传的内容。鉴于它可能需要“几分钟”才能完成并且您显然超过了 Lambda 5m 超时,您可能需要寻找另一个选项(例如带有调用 complete_multipart_upload() 的 userdata 脚本的 EC2,一旦完成,就会关闭EC2 实例)。
标签: python amazon-web-services amazon-s3 aws-lambda boto3