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

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

【问题讨论】:

  • 这是一次性任务,还是每次创建对象时都想这样做?
  • 每次上传对象时我都需要这样做。

标签: amazon-web-services amazon-s3 aws-cli aws-java-sdk


【解决方案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 万个对象的存储桶不是要花很多钱吗?我一直在寻找仅在新上传的对象而不是整个存储桶上触发的东西。
  • 您从未提及您的存储桶的大小。您也没有提到您希望它在新上传时触发。如果您在问题中提供完整的信息,将会很有帮助。
  • 你是对的。我应该在这个问题上提到这些细节。
猜你喜欢
  • 1970-01-01
  • 2019-05-14
  • 2020-03-27
  • 1970-01-01
  • 2020-04-10
  • 2015-04-09
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多