我需要下载压缩档案,解压缩它们并加载到S3。我考虑过使用Lambda来处理下载和未存档,但它有磁盘大小限制。
做这件事最好的服务是什么?我不能使用我的本地机器,因为我希望这项工作能运行几天。
发布于 2017-12-04 21:36:17
您是正确的,AWS Lambda不适合此任务。500 to的磁盘大小限制将不允许您展开zip文件。
无论如何,您还需要编写一个“管理层”来生成Lambda任务,这实际上是更复杂的任务。
操作中最困难的部分将是跟踪进度,以确保所有文件都已被转换和上传,同时考虑到沿途可能发生的随机故障。
我推荐一些类似这样的东西:
1.获取源文件列表
不知何故,您需要一个要转换的源文件列表。这可能是复杂的,如果更多的文件总是出现(例如,如果它是一个活的系统)。对于出现的其他文件,以后始终可以执行第二次运行。
2.创建工作跟踪器
您需要以某种方式跟踪工作,以便系统知道哪些文件已被处理,哪些文件正在进行中(特别是在并行工作时)。虽然您没有说明输入文件的数量,但它似乎有数万个。
一个非常可靠的方法是为要处理的每个文件创建一个Amazon消息。然后,工人们将从这个队列中撤出(参见下一步)。或者,使用一个简单的数据库来存储信息。
3.工作
最简单的方法是使用以下脚本启动Amazon实例:
从一个小的文件列表开始,以确认这个过程是否正常,然后增加数量。
为了充分利用带宽和CPU,您可以在实例上运行多个进程。每个人都是一个独立的工人。
使用 EC2 Spot实例来降低处理成本。尝试各种实例类型以找到最佳组合--有些实例存储提供非常快速的本地存储(特别是那些带有SSD的实例存储)。拥有某种形式的日志记录将帮助您跟踪进度,并确定哪些实例类型的性能最好,以及在每个工作人员上运行的并行进程的最佳数量。
通过跟踪SQS或数据库中的工作,可以在不丢失进度的情况下停止/启动进程。它还可以跨多个实例进行缩放,每个实例有多个工作人员。
4.处理错误
会出现问题(糟糕的压缩文件、网络故障、随机错误),因此您需要再试一次,并调查特定的错误。您的系统需要跟踪这些问题,以便重新处理它们。
5.审计结果
假设您希望处理所有文件,则应该进行最后一次传递,将源文件列表与上传文件的最终列表进行比较。
该方法将取决于您如何将文件上载到S3 --如果S3对象是根据其源命名的(例如A01.zip的源文件将扩展到A01/file1、A01/file2等),那么这项工作就容易得多。
的底线是:你正在做的工作非常简单。跟踪这项工作要比实际工作花费更多的精力。
发布于 2017-12-04 08:30:11
一个可能的解决方案是:获得一个EC2纳米实例(非常便宜)。附上EBS卷。编写一个使用wget/curl下载文件并使用AWS上传到S3的bash脚本
https://stackoverflow.com/questions/47627409
复制相似问题