【问题标题】:Transferring a very large image from the web to S3 using AWS Lambda使用 AWS Lambda 将非常大的图像从 Web 传输到 S3
【发布时间】: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


【解决方案1】:

s3 大大简化了事情。

创建一个 lambda 以生成用于分段上传的预签名 url。

创建分段上传:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createMultipartUpload-property

使用上述分段上传密钥创建签名 URL:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property

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

希望对你有帮助。

EDIT1:

您可以将文件分成 1 到 10,000 个之间的块并并行上传。

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

如果您只上传一个文件,您可以在 cli 而不是 lambda 中生成 signedurl 和 multipart。

如果你经常做,你可以通过 lambda 生成它们。

当你读取要上传的文件时,如果你是通过HTTP读取的,则分块读取,分段上传。

如果你是在本地读取文件,你可以为每个chunk获取文件的起点,然后用multipart上传。

希望对你有帮助。

【讨论】:

  • 对于分段上传,这是否假设图像存储在本地某个地方?或者上述解决方案可以在作为源的远程图像 URL 上工作吗?只需确保因为我使用的是完全独立的 lambda(内存有限且受超时限制),同时仅与 Internet 上某处的图像 URL(包含 20 GB 图像)和 S3 交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2021-12-17
  • 2018-07-13
  • 2018-07-12
  • 1970-01-01
  • 2019-09-13
  • 2021-01-19
相关资源
最近更新 更多