每周处理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的数量可以达到数百万个文件。
答案 0 :(得分:1)
有很多方法可以做到这一点(取决于您实际要执行的操作!)。
计划
如果您在 Amazon EC2实例上运行代码,则可以使用cron
来触发脚本。
如果您将代码作为 AWS Lambda函数运行,则可以向该函数添加时间表。
正在处理
您没有提供太多有关文件内容以及应如何处理的信息(例如,是否单独处理每个文件,或者是否一起处理多个文件)。
一些处理选项是:
可以从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),用户可以订阅消息。它可以将他们指向报告(但也要考虑报告的安全性)。