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

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

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

最佳答案

有几种可能的方法:

  • 每隔几分钟检查一次桶
  • 跟踪上一个新文件
  • 使用 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。
  • 创建 CloudWatch 警报以在自定义指标的 SUM 在过去 6 小时内为零时触发通知。还将其配置为在警报进入 INSUFFICIENT_DATA 状态时触发,以便在未发送数据时正确触发(这比指标为零的可能性更大,因为 Lambda 函数在未创建对象时不会发送数据)。

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

    如何提醒

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

    关于amazon-web-services - 监视 S3 存储桶在过去 x 小时内丢失新文件的最佳策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959737/

    相关文章:

    amazon-web-services - lambda 层与 Go 兼容吗?

    amazon-web-services - 包含 Spot 实例的 CloudFormation LaunchTemplate AutoScaling 组

    python - 使用 boto3 从 S3 存储桶中读取多个 csv 文件

    amazon-web-services - AWS 无服务器图像处理程序 - Lambda 错误

    python-3.x - Python3 Boto创建S3桶已存在错误

    aws-lambda - next-i18next 的错误和在 Vercel 上的部署(最近)

    amazon-web-services - 在 AWS 上转发客户端的 IP 地址

    amazon-web-services - Terraform:如果目标是 aws_sfn_state_machine,则 aws_api_gateway_integration 的 uri 参数是什么

    mysql - 从 pt-query-digest 获取详细结果

    amazon-web-services - 使用 AWS CDK 捆绑 lambda docker 而不是 esbuild/debian WSL2