是否可以根据对象大小删除 AWS S3 对象

Posted

技术标签:

【中文标题】是否可以根据对象大小删除 AWS S3 对象【英文标题】:Is it Possible to Delete AWS S3 Objects Based on Object Size 【发布时间】:2021-12-30 10:45:30 【问题描述】:

我似乎没有找到任何关于根据对象大小删除 S3 对象的文档。例如,如果对象大小小于 5B,则将其删除。

【问题讨论】:

这是一次性任务,还是每次创建对象时都想这样做? 每次上传对象时我都需要这样做。 【参考方案1】:

从您的 cmets 看来,如果对象小于给定大小,您似乎想在创建后立即删除它们。

要做到这一点,你会:

创建 AWS Lambda 函数 将 S3 存储桶配置为在创建对象时触发 Lambda 函数

Lambda 函数将传递刚刚创建的对象的 Bucket 和 Key。然后它可以调用HeadObject 来获取对象的大小。如果它小于所需大小,则可以调用DeleteObject。确保遍历所有传入的记录,因为可以使用多个输入对象调用一个 Lambda 函数。

如果您有现有对象希望对其执行此操作,并且由于您提到有“超过 100 万个对象”,您可以使用Amazon S3 Inventory,它可以提供每日或每周 CSV 文件列出所有对象,包括它们的大小。您可以编写一个程序,使用此文件作为输入并调用DeleteObjects 来一次删除最多 1000 个对象。

【讨论】:

我正在考虑相同的过程,但我是 AWS 的新手,这确实有助于确认我在像您这样的专家的正确轨道上。谢谢楼主!【参考方案2】:

是的,可以根据大小删除 S3 对象。

一种解决方法是通过 AWS CLI(您可以使用 cli 或 boto3)获取 S3 存储桶的对象大小并执行 cron 作业,该作业将在 true 时执行该条件strong> 如果对象大小小于 5B。

【讨论】:

这将需要遍历存储桶中的所有对象。我需要的是检查唯一新上传对象的大小。基于@John Rotenstein,看起来这是不可能的。【参考方案3】:

DeleteObject() API 调用不接受 Size 或 ModifiedDate 等参数。

相反,您必须提供要删除的对象列表。

如果您希望根据对象的大小删除对象,典型的模式是:

调用ListObjets() 以获取存储桶中的对象列表(以及可选的给定前缀) 在您的代码中,循环遍历返回的信息和对象大小示例。如果大小小于/大于所需大小,请将 Key(文件名)添加到数组中 调用DeteleObject(),传递要删除的Keys数组

【讨论】:

列出一个包含超过 100 万个对象的存储桶不是要花很多钱吗?我一直在寻找仅在新上传的对象而不是整个存储桶上触发的东西。 您从未提及您的存储桶的大小。您也没有提到您希望它在新上传时触发。如果您在问题中提供完整的信息,将会很有帮助。 你是对的。我应该在这个问题上提到这些细节。

以上是关于是否可以根据对象大小删除 AWS S3 对象的主要内容,如果未能解决你的问题,请参考以下文章

java AWS S3从版本存储桶中删除所有对象

如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?

AWS Lambda 无法删除 Amazon S3 对象

AWS Lambda无法删除Amazon S3对象

S3 存储桶和对象访问

从AWS S3获取对象作为流