如何选择S3中最后创建的对象

问题描述 投票:0回答:1

我在S3中有这条路径:

object1/object2/object3/object4/

Object4/
我有一个对象列表,例如:

object1/object2/object3/object4/2022-30-09-15h21/

object1/object2/object3/object4/2023-20-12-12h30/

object1/object2/object3/object4/2022-31-12-09h34/

object1/object2/object3/object4/2023-12-08-14h56/

我想选择并返回

object4/
中最后创建的对象。

我写了这个脚本来做到这一点:

import boto3
from datetime import datetime 

session_root = boto3.Session(region_name='eu-west-3', profile_name='my_profile')
s3_client = session_root.client('s3') 

bucket_name = 'my_bucket' 

prefix = 'object1/object2/object3/object4/'

# List objects in the bucket 
response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix) 

# Extract the object names and convert them to datetime objects 

objects_with_dates = [(obj['Key'], datetime.strptime(obj['LastModified'].strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) for obj in response.get('Contents', [])] 
# Find the latest created object 

latest_object = max(objects_with_dates, key=lambda x: x[1]) 

print("Last created S3 object:", latest_object[0]) # the returned value is: object1/object2/object3/object4/2023-20-12-12h30/my_file.csv

我的脚本选择

object4/
中最后创建的对象并下载里面的文件,我的脚本的结果是:
object1/object2/object3/object4/2023-20-12-12h30/my_file.csv

但我只想选择并返回

object4/
中最后创建的对象,例如:

object1/object2/object3/object4/2023-20-12-12h30/

您知道如何修改我的脚本以仅选择并返回最后创建的对象而不返回其中的文件吗?

谢谢

python-3.x amazon-s3 boto3
1个回答
0
投票

将最后创建的对象选择到 S3 存储桶中的一种方法是创建 DynamoDB 并使用带有 S3 对象 Lambda 的 Lambda 将目录保存到 DynamoDB 中并将索引放在修改/更改时间上。

Ofc,您可以使用 DynamoDB 以外的其他数据库,但 DynamoDB 的启动成本非常便宜,稍后您可以考虑更改数据库有何意义,DynamoDB 仅在您使用该选项时才产生成本。

这比您要求的要复杂一点,但是如果您的 S3 中有 100.000.000 个对象,您将需要为每次列表扫描和对象查找付费,因此如果您犯错误,可能会非常昂贵,所以我会推荐您使用 S3 对象 Lambda ( https://aws.amazon.com/s3/features/object-lambda/ )

© www.soinside.com 2019 - 2024. All rights reserved.