【发布时间】:2021-12-30 10:45:30
【问题描述】:
我似乎没有找到任何关于根据对象大小删除 S3 对象的文档。例如,如果对象大小小于 5B,则将其删除。
【问题讨论】:
-
这是一次性任务,还是每次创建对象时都想这样做?
-
每次上传对象时我都需要这样做。
标签: amazon-web-services amazon-s3 aws-cli aws-java-sdk
我似乎没有找到任何关于根据对象大小删除 S3 对象的文档。例如,如果对象大小小于 5B,则将其删除。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli aws-java-sdk
从您的 cmets 看来,如果对象小于给定大小,您似乎想在创建后立即删除它们。
要做到这一点,你会:
Lambda 函数将传递刚刚创建的对象的 Bucket 和 Key。然后它可以调用HeadObject 来获取对象的大小。如果它小于所需大小,则可以调用DeleteObject。确保遍历所有传入的记录,因为可以使用多个输入对象调用一个 Lambda 函数。
如果您有现有对象希望对其执行此操作,并且由于您提到有“超过 100 万个对象”,您可以使用Amazon S3 Inventory,它可以提供每日或每周 CSV 文件列出所有对象,包括它们的大小。您可以编写一个程序,使用此文件作为输入并调用DeleteObjects 来一次删除最多 1000 个对象。
【讨论】:
是的,可以根据大小删除 S3 对象。
一种解决方法是通过 AWS CLI(您可以使用 cli 或 boto3)获取 S3 存储桶的对象大小并执行 cron 作业,该作业将在 true 时执行该条件strong> 如果对象大小小于 5B。
【讨论】:
DeleteObject() API 调用不接受 Size 或 ModifiedDate 等参数。
相反,您必须提供要删除的对象列表。
如果您希望根据对象的大小删除对象,典型的模式是:
ListObjets() 以获取存储桶中的对象列表(以及可选的给定前缀)Key(文件名)添加到数组中DeteleObject(),传递要删除的Keys数组【讨论】: