Генерация предварительно назначенного URL-адреса s3 последнего объекта в корзине с помощью boto3 - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть ведро s3 с несколькими папками. Как я могу создать предварительно назначенный URL-адрес s3 для последнего объекта, используя python boto3 в aws для каждой папки, запрашиваемой пользователем?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Если это небольшая корзина, то рекурсивно перечислите корзину с префиксом по мере необходимости. Сортируйте результаты по отметке времени и создайте предварительно подписанный URL-адрес для последних.

Если это очень большой сегмент, это будет очень неэффективно, и вам следует рассмотреть другие способы хранения ключа последнего файла. Например: вызвать лямбда-функцию всякий раз, когда объект загружен, и записать ключ этого объекта в последний элемент в DynamoDB (или другом постоянном хранилище).

0 голосов
/ 23 апреля 2020

Вы можете сделать что-то вроде

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)

, здесь он даст последний последний измененный файл из всей корзины, однако вы можете обновить логин и обновить значение префикса по мере необходимости.

если вы используете Kubernetes POD, VM или все, что можете передать переменным окружения или использовать python dict для хранения самого последнего ключа, если требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...