使用boto3生成bucket中最新对象的预签名s3 URL



我有一个带有多个文件夹的s3存储桶。如何使用aws中的python boto3为用户询问的每个文件夹生成最新对象的s3预签名URL?

您可以执行类似的操作

import boto3
from botocore.client import Config
import requests
bucket = 'bucket-name'
folder = '/' #you can add folder path here don't forget '/' at last
s3 = boto3.client('s3',config=Config(signature_version='s3v4'))
objs = s3.list_objects(Bucket=bucket, Prefix=folder)['Contents']     
latest = max(objs, key=lambda x: x['LastModified'])
print(latest)
print (" Generating pre-signed url...")
url = s3.generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': bucket,
'Key': latest['Key']
}
)
print(url)
response = requests.get(url)
print(response.url)

在这里,它将提供整个bucket中最近一次修改的文件,但您可以根据需要更新登录名和前缀值。

如果您使用Kubernetes POD、VM或任何可以传递环境变量的东西,或者在需要时使用python dict存储最新密钥。

如果它是一个小bucket,则递归地列出bucket,并根据需要使用前缀。按时间戳对结果进行排序,并创建最新的预签名URL。

如果它是一个非常大的bucket,那么效率会非常低,您应该考虑其他方法来存储最新文件的密钥。例如:在上传对象时触发Lambda函数,并将该对象的键写入DynamoDB(或其他持久存储(中的LATEST项。

最新更新