【发布时间】:2018-03-11 19:40:11
【问题描述】:
我可以从网络访问一个 20 GB 的图像文件,我们希望将其保存在 S3 上。
是否可以使用 AWS Lambda 做到这一点?从我对这种情况的理解来看,限制似乎如下:
- lambda 内存(无法将整个图像加载到内存中)
现在,如果我们决定从网络流式传输到 S3(比如使用 requests.get(image_url, stream=True) 或 smart_open..
- lambda 达到其超时限制,以及..
- S3 不支持附加到 S3 对象。因此,后续的 lambda 运行以继续“组装”S3 上的图像(之前的图像停止)必须将 S3 上已经存在的部分图像加载到内存中,然后它才能开始附加更多数据并上传生成的更大的部分图像到 S3。
我还听说其他人建议使用分段上传。但我很高兴知道这与流式传输有何不同,以及如何克服上述限制。
谢谢!
【问题讨论】:
-
您需要使用分段上传,因为您的文件超过 5GB。 aws.amazon.com/blogs/aws/amazon-s3-multipart-upload 我个人不会考虑为此使用 Lambda,尤其是如果它只是一次性的。我只需启动一个临时 EC2 服务器并从那里运行一个脚本将文件复制到 S3。
-
@MarkB 您不能为此目的使用 Lambda,原因是 API Gateway 上传数据的限制仅为 6MB。启动 EC2 服务器不是一个可扩展的解决方案,文件需要从 Web 上传到 S3。启动 EC2 服务器需要更多配置以实现高可用性。
-
@Kannaiyan 没有人说他们正在将文件上传到 Lambda 或使用 API Gateway。 Lambda 将下载我假设的文件。但我也说过 Lambda 是一个糟糕的解决方案,所以我同意你不应该使用 Lambda 的观点。关于 EC2,您没有看到我在哪里说“如果它只是一次性的”吗?如果这个文件只需要复制到 S3 一次,那么临时 EC2 服务器是一个完美的解决方案。不需要“高可用性”。如果这是一个不断重复的任务,那么这个问题需要更多细节。
-
@MarkB 如果只做一次,我们已经考虑过 EC2。但这更像是处理 GB 级图像的重复性常规任务。
-
多久一次?您当然可以按需启动和关闭 EC2 实例来处理此类事情。
标签: python-3.x amazon-s3 stream aws-lambda large-files