Amazon web services 将归档文件提取到S3

Amazon web services 将归档文件提取到S3,amazon-web-services,Amazon Web Services,我需要下载zip档案,将其解压缩并加载到S3。我曾考虑过使用Lambda来处理下载和取消归档,但它有磁盘大小限制 这样做最好的服务是什么?我不能使用我的本地机器,因为我希望作业能运行几天。一个可能的解决方案是:以非常便宜的价格获取EC2 nano实例。。附加EBS卷。。编写一个小bash脚本,使用wget/curl下载文件,并使用AWS CLI将文件上载到S3。如果您认为AWS Lambda不适合此任务,则是正确的。500MB磁盘大小限制将不允许您扩展zip文件 无论如何,您还需要编写一个管理层

我需要下载zip档案,将其解压缩并加载到S3。我曾考虑过使用Lambda来处理下载和取消归档,但它有磁盘大小限制


这样做最好的服务是什么?我不能使用我的本地机器,因为我希望作业能运行几天。

一个可能的解决方案是:以非常便宜的价格获取EC2 nano实例。。附加EBS卷。。编写一个小bash脚本,使用wget/curl下载文件,并使用AWS CLI将文件上载到S3。如果您认为AWS Lambda不适合此任务,则是正确的。500MB磁盘大小限制将不允许您扩展zip文件

无论如何,您还需要编写一个管理层来生成Lambda任务,这实际上是更复杂的任务

操作中最困难的部分是跟踪进度,以确保所有文件都已转换和上载,同时考虑到过程中可能发生的随机故障

我想推荐以下几点:

一,。获取源文件列表

不知何故,您需要一个要转换的源zip文件列表。如果更多的文件总是出现,这可能会很复杂,例如如果它是一个实时系统。对于出现的其他文件,您始终可以在之后进行第二次运行

二,。创建一个工作跟踪器

您需要以某种方式跟踪工作,以便系统知道哪些文件已被处理,哪些文件正在进行中,尤其是在并行工作的情况下。虽然您没有说明输入文件的数量,但它似乎有几万个

一个非常可靠的方法是为要处理的每个文件创建一个AmazonSQS消息。然后工人们将从这个队列中退出,看下一步。或者,使用一个简单的数据库来存储信息

三,。做这项工作

最简单的方法是使用以下脚本启动Amazon EC2实例:

通过从SQS中提取消息或查询数据库来确定要处理的下一个文件 作品下载、解压、上传吗 将工作标记为已完成或将其标记为错误,以便稍后在单独的过程中重新尝试 从一个小文件列表开始,确认流程正常运行,然后增加数量

为了充分利用带宽和CPU,可以在实例上运行多个进程。每个人都将作为一名独立的工人工作

使用AmazonEC2SPOT实例来降低处理成本。尝试各种实例类型以找到最佳组合-有些实例存储提供非常快速的本地存储,特别是那些带有SSD的实例存储。使用某种形式的日志记录将帮助您跟踪进度,并确定哪些实例类型的性能最好,以及在每个worker上运行的并行进程的最佳数量

通过跟踪SQS或数据库中的工作,可以停止/启动流程,而不会丢失进度。它还可以跨多个实例进行缩放,每个实例具有多个辅助对象

四,。处理错误

问题将出现在坏的zip文件、网络故障、随机错误,因此您需要再次尝试并调查特定错误。您的系统需要跟踪这些问题,以便重新处理它们

五,。审计结果

假设您希望处理所有文件,您应该执行最后一个步骤,将源文件列表与上载文件的最终列表进行比较

该方法将取决于您如何将文件上载到S3-如果S3对象是基于其源命名的,那么这项工作将容易得多,例如A01.zip的源文件将扩展为A01/file1、A01/file2等


一句话:你正在做的工作很简单。跟踪工作将比实际工作花费更多的精力。

您从哪里下载zip存档?解压后的文件有多大?Lambda的临时磁盘空间限制为500MB。当您上传到S3时,文件是压缩的还是解压缩的?有多少数据是MB、GBs、TBs?每个zip存档大约有500-700 MB。我想把解压后的内容上传到S3。总大小约为40TB。另外:可能也适合这种类型的工作。