【问题标题】:Notification Service on AWS S3 bucket (prefix) sizeAWS S3 存储桶(前缀)大小的通知服务
【发布时间】:2020-08-13 13:27:30
【问题描述】:
【问题讨论】:
标签:
amazon-s3
amazon-ec2
aws-lambda
amazon-sqs
amazon-sns
【解决方案1】:
将 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
【解决方案2】:
在 Amazon S3 中没有直接获取文件夹大小的方法(因为文件夹实际上并不存在)。
这里有一些想法......
计算总数的周期性 Lambda 函数
创建 Amazon CloudWatch 事件 以在特定时间间隔触发 AWS Lambda 函数。 Lambda 函数将列出具有给定Prefix(实际上是一个文件夹)的所有对象,并汇总大小。如果超过 100TB,Lambda 函数可能会触发清理过程。
但是,如果该文件夹中有数千个文件,这会有点慢。每个 API 调用只能检索 1000 个对象。因此,可能需要多次调用才能计算总数,这将在每个检查间隔进行。
保持运行总计
配置 Amazon S3 事件 以在使用 Prefix 创建新对象时触发 AWS Lambda 函数。 Lambda 函数可以检索增量数据库中的运行总计。如果总量超过 100TB,Lambda 函数可能会触发清理过程。
使用哪个数据库? Amazon DynamoDB 将是最快的,它支持“增量”功能,但您可能会偷偷摸摸地使用 AWS Systems Manager Parameter Store。如果由于没有锁定而快速创建新对象,这可能会导致问题。因此,如果文件每隔几秒或更快就会出现,请务必使用 DynamoDB。
慢动作
您没有说明触发此 100TB 限制的频率。如果它仅在几天后发生,您可以使用 Amazon S3 Inventory,它提供包含存储桶中对象列表的每日 CSV。当然,如果不到一天就达到了 100TB 的限制,则此解决方案将不适用。