AWS S3 存储桶(前缀)大小上的通知服务

Notification Service on AWS S3 bucket (prefix) size

我有一个特定的用例,我们有大量数据不断流入 AWS 存储桶。

我们需要针对特定​​文件夹的 s3 存储桶 的通知服务,如果文件夹达到特定大小(例如 100 TB),则应通过(SNS, AWS 拉姆达)

我已经查看了 AWS 文档。关于这个问题,我没有找到 Aws 的任何直接支持。 https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

我们计划有一个脚本会定期 运行 检查 s3 对象的大小并启动​​ AWS lambda。

有没有什么优雅的方法来处理这种情况。非常感谢任何建议或意见。

将 s3 触发事件附加到 lambda 函数,只要有任何文件添加到 S3 存储桶,该函数就会被触发。

然后在 lambda 函数中检查文件大小。这将消除 运行 定期检查大小的脚本。

下面是将 S3 触发器添加到 lambda 函数的示例代码。

s3_trigger:
 handler: lambda/lambda.s3handler
 timeout: 900
 events:
   - s3:
       bucket: ${self:custom.sagemakerBucket}
       event: s3:ObjectCreated:*
       existing: true
       rules:
         - prefix: csv/
         - suffix: .csv

Amazon S3 中没有直接获取文件夹大小的方法(因为文件夹实际上并不存在)。

这里有一些想法...

用于计算总数的周期性 Lambda 函数

创建一个 Amazon CloudWatch 事件 以在特定时间间隔触发 AWS Lambda 函数。 Lambda 函数将列出具有给定 Prefix(实际上是一个文件夹)的所有对象并计算总大小。如果超过 100TB,Lambda 函数可能会触发清理过程。

但是,如果该文件夹中有数千个文件,这会有点慢。每个 API 调用只能检索 1000 个对象。因此,可能需要多次调用来计算总数,并且这将在每个检查间隔完成。

保持 运行 总计

配置 Amazon S3 事件 以在使用 Prefix 创建新对象时触发 AWS Lambda 函数。 Lambda 函数可以检索数据库中 运行 总数的增量。如果总数超过 100TB,Lambda 函数可能会触发清理过程。

使用哪个数据库? Amazon DynamoDB 是最快的,它支持 'increment' 功能,但您可能会偷偷摸摸地使用 AWS Systems Manager Parameter Store。如果由于没有锁定而快速创建新对象,这可能会导致问题。因此,如果文件每隔几秒或更快地传入一次,一定要使用 DynamoDB。

慢动作

您没有说明这个 100TB 限制可能触发的频率。如果它仅在几天后发生,您可以使用 Amazon S3 Inventory,它提供包含存储桶中对象列表的每日 CSV。当然,如果在不到一天的时间内达到 100TB 限制,则此解决方案将不适用。