是否可以根据对象大小删除 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 对象的主要内容,如果未能解决你的问题,请参考以下文章