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

Is it Possible to Delete AWS S3 Objects Based on Object Size

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

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

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

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

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

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

  • 调用 ListObjets() 获取存储桶中的对象列表(以及可选的给定前缀)
  • 在您的代码中,遍历返回的信息并举例说明对象大小。如果大小比预期的 smaller/larger,请将 Key(文件名)添加到数组
  • 调用DeteleObject(),传递要删除的Keys数组

根据您的评论,如果对象小于给定大小,您似乎希望在对象创建后立即将其删除。

为此,您需要:

  • 创建一个 AWS Lambda 函数
  • 配置 S3 存储桶以在创建对象时触发 Lambda 函数

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

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