每周处理S3中的所有文件

时间:2019-07-20 08:19:17

标签: java json amazon-web-services amazon-s3 aws-lambda

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

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

示例:

输入:

first_json-{id:xxx,消息:[“第一条消息”,...,“ x消息”]}

...

xth_json-{id:xxx,消息:[“第一条消息”,...,“ x消息”]}

...

last_json-{id:yyy,消息:[“第一条消息”,...,“ x条消息”]}

json文件中的消息是带有日期,文本,发件人等的消息对象数组...

输出:

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

...

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

然后将为每个用户发送带有其统计信息的电子邮件:已发送的消息数,已接收的消息数,按天/小时的频率等...

我认为一周内json的数量可以达到数百万个文件。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点(取决于您实际要执行的操作!)。

计划

如果您在 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),用户可以订阅消息。它可以将他们指向报告(但也要考虑报告的安全性)。