在过去的x个小时内,监视S3存储桶是否丢失新文件的最佳策略是什么?

时间:2018-06-21 02:59:52

标签: amazon-web-services amazon-s3 aws-lambda put amazon-cloudwatch-metrics

我有一个用例,其中某个进程每6小时将一个文件放入一个S3存储桶。这个存储桶中已经有成千上万个文件,如果最近7个小时内未添加任何新文件,我想生成一个sns警报或其他信息。什么是合理的方法? 谢谢

2 个答案:

答案 0 :(得分:6)

有一些潜在的方法:

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

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

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

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

跟踪最新文件

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

尽管这种方法具有更多的组件,但实际上它是一种更简单的解决方案,因为它不必浏览S3中的对象列表。取而代之的是,它只记住何时添加了最后一个对象。

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

使用Amazon CloudWatch警报

这是使用CloudWatch警报触发通知的更简单的方法。

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

唯一的缺点是警报时段只有几个选项。可以将其设置为6个小时,但我认为不能将其设置为7个小时。

如何提醒

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

答案 1 :(得分:0)

@John Rotenstein描述的Amazon CloudWatch Alarm方法绝对是大多数用例中最简单的选项,并且效果很好。仅需注意的一件事:CloudWatch Alarms每个指标具有24小时限制(EvaluationPeriods *周期必须小于等于86400s)。因此,如果您希望您的存储桶每天收到的文件少于一次,则需要使用其他方法。