S3 存储桶:当已经有数百万个文件时,删除所有早于 15 分钟的文件的简便方法

S3 bucket: Easy way to remove all the files older than 15min when there are already millions of files

我正在尝试删除 s3 存储桶中超过 15 分钟的所有文件。下面的 python 脚本只获取文件名。文件数量以百万为单位。

import boto3
import datetime

client = boto3.client('s3')

paginator = client.get_paginator("list_objects_v2")

for page in paginator.paginate(Bucket='raw-data-ingestion-us-west-2-dev'):
    print(page["Contents"])

    for file in page["Contents"]:
        file_name =file.get("Key")
        modified_time = file.get("LastModified").replace(tzinfo=None)
            
        difference_days_delta = today_date_time - modified_time
        difference_minutes = difference_days_delta.seconds/60
        if difference_minutes > 15:
            print("difference_minutes---", difference_minutes)
            print("file more than 15 minutes older : - ", file_name)
        else:
            print("file less than 15 minutes older : - ", file_name)

上面打印早于 15 分钟的文件名的脚本本身需要几个小时。

我必须在中间停止脚本。

想知道如何不间断地完成删除吗。

我存储的文件如下:

DEV001_STEL_FOOTMODE/2022/03/02/03/40/1646192437.755104-1646192439.467863-DEV001_STEL_FOOTMODE

哪里

2022/03/02 (refers date)
03/40 (refers hr and minute)

DEV001_STEL_FOOTMODE 将是某种主要的子文件夹。桶内有很多这样的子文件夹,每个文件每小时都被撕毁,文件也以相同的主子文件夹为后缀

Amazon S3 提供 Object Lifecycle 可以在指定时间段后删除对象。

它将提供最简单的删除对象的方法。但是,解决方案只有一天,删除对象可能需要 24-48 天。

您没有提供有关对象创建方式的任何信息或 'used',因此我的其他建议是:

  • 如果对象未被使用,则不要创建它们。 (简单!)
  • 如果进程是 'using' 文件(例如,创建每个对象时触发 AWS Lambda 函数),那么该进程也可以在完成处理后删除对象。
  • 将对象存储在单独的子目录中,这样您就知道您始终可以删除给定子目录中的对象(例如,每 15-30 分钟使用一个新的子目录)。