首页 > 解决方案 > 监视 S3 存储桶在过去 x 小时内丢失新文件的最佳策略是什么?

问题描述

我有一个用例,其中某个进程每 6 小时将一个文件放入 S3 存储桶。这个存储桶中已经有数千个文件,如果在过去 7 小时内没有添加新文件,我想生成一个 sns 警报或其他东西。什么是合理的方法?谢谢

标签: amazon-web-servicesamazon-s3aws-lambdaputamazon-cloudwatch-metrics

解决方案


有几种可能的方法:

  • 每隔几分钟检查一次水桶
  • 跟踪最后一个新文件
  • 使用 Amazon CloudWatch 警报

每隔几分钟检查一次存储桶

配置 Amazon CloudWatch Events 以每隔几分钟触发一次 AWS Lambda 函数(取决于您希望它报告的速度),该函数获取存储桶列表并检查添加最后一个对象的时间戳。如果超过 7 小时,请发送警报。

这种方法非常简单,但每隔几分钟就会做很多工作,包括在添加对象后的 7 小时内。另外,如果您有很多对象,这可能会消耗大量 Lambda 时间和 API 调用。

跟踪最后一个新文件

  • 在 Amazon S3 存储桶上配置一个事件,以在将新文件添加到存储桶时触发 AWS Lambda 函数。将当前时间存储在 DynamoDB 表中(或者,如果您真的想节省成本,请将其存储在 Systems Manager Parameter Store 或另一个存储桶中的 S3 对象中)。每当添加新文件时,这将更新日期。
  • 配置 Amazon CloudWatch Events 以每隔几分钟触发一个 AWS Lambda 函数(取决于您希望它报告的速度),该函数检查 DynamoDB(或它的存储位置)中的“最后更新日期”。如果超过 7 小时,则触发警报。

虽然这种方法有更多的组件,但它实际上是一个更简单的解决方案,因为它不需要查看 S3 中的对象列表。相反,它只记得添加最后一个对象的时间。

你可以想出一个更聪明的方法,而不是每隔几分钟检查一次,而是在 7 小时内安排一个警报功能。每当添加新文件时,它都会更改计划以再次将其放置 7 小时。这就像不断推迟牙医预约一样。:)

使用 Amazon CloudWatch 警报

这是一种更简单的方法,它使用 CloudWatch 警报来触发通知。

  • 将 S3 存储桶配置为在添加对象时触发 Lambda 函数。Lambda 函数将自定义指标发送到 Amazon CloudWatch。
  • SUM创建 CloudWatch 警报以在过去 6 小时内自定义指标为零时触发通知。还将其配置为在警报进入INSUFFICIENT_DATA状态时触发,以便在没有发送数据时正确触发(这比零指标更有可能,因为 Lambda 函数在没有创建对象时不会发送数据)。

唯一的缺点是警报周期只有几个选项。可以设置6小时,但我觉得不能设置7小时。

如何提醒

至于如何提醒某人,向 Amazon SNS 主题发送消息是一个好主意。人们可以通过电子邮件、短信和其他各种方式订阅。


推荐阅读