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

daw*_*wit 3 put amazon-s3 amazon-web-services aws-lambda amazon-cloudwatch-metrics

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

Joh*_*ein 9

有几种可能的方法:

  • 每隔几分钟就检查一下水桶
  • 跟踪上一个新文件
  • 使用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 Alarm触发通知的简单方法.

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

唯一的缺点是报警期只有几个选项.它可以设置为6小时,但我不认为它可以设置为7小时.

如何提醒

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