定期轮询具有大量文件的 AWS S3 存储桶中的新文件?

Posted

技术标签:

【中文标题】定期轮询具有大量文件的 AWS S3 存储桶中的新文件?【英文标题】:Poll periodically for new files in AWS S3 buckets having a lot of file? 【发布时间】:2016-07-05 08:12:59 【问题描述】:

我遇到需要轮询 AWS S3 存储桶以获取新文件的情况。 此外,它不仅仅是一个桶。大约有 1000 多个存储桶,这些存储桶可能有很多文件。 这种用例的常用策略/设计是什么。我需要在每次民意调查中使用新文件。我无法从存储桶中删除文件。

【问题讨论】:

您能否提供有关您的用例的更多信息?也就是说,为什么需要这样做?可能有更好的替代方法来实现您的目标。 【参考方案1】:

您应该订阅 S3 事件通知,而不是轮询:http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

这些可以传送到 SNS 主题、SQS 队列或触发 Lambda 函数。

【讨论】:

【参考方案2】:

嗯,为了最好地回答这个问题,我们需要知道什么样的应用程序/架构正在执行轮询和消费,但是“AWS”的方法是让 S3 在创建时发送 S3 通知每个文件的。 S3 通知包含对 S3 文件的引用,可以发送到 SNS 或 SQS 甚至更好的 Lambda,然后触发应用程序启动、使用文件然后关闭。

现在,如果您要拥有大量文件,所有这些 SNS/SQS 通知可能会变得昂贵,有些人可能会开始考虑使用 S3 SDK/CLI 持续轮询 S3,但是您需要保持请注意,还有与轮询相关的成本,您应该寻找减少文件数量的方法。例如,如果您使用 Kinesis Firehose 转储到 S3,请查看批处理。或者您可以批量处理 SQS。尽量坚持使用事件通知,它更有弹性。

【讨论】:

以上是关于定期轮询具有大量文件的 AWS S3 存储桶中的新文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring 集成轮询 S3 存储桶以获取文件

列出具有公共读取权限的 S3 对象(在私有存储桶中)

将对象保存在具有公共访问权限的 AWS S3 存储桶中

如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?

AWS:将 IAM 用户限制在 S3 存储桶中的特定文件夹

如何让 AWS S3 存储桶中的 Angular 应用程序对 AWS Elastic Beanstalk 中的服务进行 API 调用