首页 > 解决方案 > 每周处理 S3 中的所有文件

问题描述

每周处理 S3 中所有文件的最佳方法是什么?

我的存储桶包含许多 json 文件和我需要的东西:在所有文件上运行(每周一次)并解析这些文件的数据以获取统计报告。例如,按 id 分组并按某些字段计数。结果保存在一个文件中,我将发送给用户。

例子:

输入:

first_json - { id:xxx, messages:["first message", ..., "x message"] }

...

xth_json - { id:xxx, messages:["first message", ..., "x message"] }

...

last_json - { id:yyy, messages:["first message", ..., "x message"]}

json 文件中的消息是包含日期、文本、发件人等的消息对象数组...

输出:

{id:xxx, numOfSentMessages:zzz, numOfReceivedMessages:www}

...

{id:yyy, numOfSentMessages:zzz2, numOfReceivedMessages:www2}

然后为每个用户发送电子邮件,其中包含他的统计信息:发送消息的数量、接收的消息数量、按天/小时计算的频率等......

我认为一周内 json 的数量可能是数百万个文件。

标签: javajsonamazon-web-servicesamazon-s3aws-lambda

解决方案


有很多方法可以做到这一点(取决于你实际上想要做什么!)。

调度

如果您在Amazon EC2 实例上运行代码,则可以使用cron来触发脚本。

如果您将代码作为AWS Lambda 函数运行,则可以向该函数添加计划。

加工

您没有提供有关文件内容以及应如何处理它们的太多信息(例如,是每个文件单独处理,还是多个文件一起处理)。

一些处理选项是:

  • 如果文件可以单独处理,您可以使用S3 Select,它可以对文件运行类似 SQL 的简单命令,而无需下载文件
  • 对于更复杂的查询,包括一起处理多个文件,请使用Amazon Athena
  • 如果需要使用自定义代码处理文件,请在Amazon EC2 实例上运行脚本,或运行AWS Lambda 函数(注意:Lambda 的最长执行时间为 15 分钟)

可以从 Lambda 函数调用 S3 Select 和 Amazon Athena。

存货

如果您有大量文件(数万或更多),使用Amazon S3 Inventory提供每周输入文件列表可能会很有效。然后,您的代码可以使用该列表来执行操作。

实时处理

您还可以考虑在将数据放置在 Amazon S3 中时执行实时处理,而不是每周处理一次数据。您可以配置 Amazon S3 事件以在创建文件时触发 AWS Lambda 函数。

发送给用户

与其将文件发送给用户,不如提供返回文件的链接。您的电子邮件管理员会感谢您!

无论如何,您的 AWS Lambda 函数可以使用Amazon Simple Email Service (SES)发送电子邮件。但是,您需要某种方式来确定谁应该接收此类通知。

一种选择是向Amazon Simple Notification Service (SNS)发送通知,用户可以订阅该消息。它可以将他们指向报告(但也考虑报告的安全性)。


推荐阅读