Пакетная загрузка файлов в AWS S3 с использованием заранее заданных URL
Введение
В этой статье объясняется, как загружать несколько файлов в AWS S3 партиями, используя предварительно подписанные URL-адреса.
В конце этой статьи вы сможете сделать следующее
- Создавать партии из списка файлов
- Загрузить в AWS S3 с помощью предварительно подписанных URL-адресов
- Реализация параллелизма для загрузок.
- Отображение индикатора выполнения ваших загрузок с помощью tqdm
Что такое предварительно подписанный URL?
Из документов Amazon: «Предварительно подписанный URL-адрес дает вам доступ к объекту, указанному в URL-адресе, при условии, что создатель предварительно подписанного URL-адреса имеет разрешения на доступ к этому объекту. То есть, если вы получили заранее подписанный URL-адрес для загрузки объекта, вы можете загрузить объект только в том случае, если создатель предварительно подписанного URL-адреса имеет необходимые разрешения для загрузки этого объекта ».
Почему предварительно подписанные URL-адреса?
Все объекты и сегменты в AWS S3 по умолчанию являются частными. Предварительно подписанные URL-адреса полезны, если вы хотите, чтобы ваш пользователь / клиент мог загружать определенный объект в вашу корзину, но при этом не требуете, чтобы у них были учетные данные или разрешения безопасности AWS.
Поскольку предварительно подписанные URL-адреса недолговечны, этот подход безопасен и является наиболее рекомендуемым подходом AWS для передачи файлов.
Создание предварительно подписанных URL-адресов
В этой статье не рассматривается создание предварительно подписанных URL-адресов, поскольку это отдельная статья. Чтобы узнать, как сгенерировать предварительно подписанные URL-адреса, перейдите здесь.
Создать пакеты загрузки
Первым шагом в загрузке файлов в S3 является создание пакетов файлов для загрузки. Следовательно, нам нужно получить исходный путь к файлам. Кроме того, нам нужно знать количество файлов, которые нужно загрузить. Почему? Потому что мы используем предварительно подписанные URL-адреса для загрузки, и для каждого файла требуется собственный URL-адрес для загрузки. Если нужно загрузить 1000 файлов, нам понадобится 1000 предварительно подписанных URL-адресов.
Чтобы узнать о различных способах разделения списка на более мелкие подсписки, ознакомьтесь с этой статьей.
Сгенерируйте предварительно подписанные URL-адреса для файлов в пакетах:
Теперь, когда мы создали наши пакеты, следующим шагом будет создание предварительно подписанного URL-адреса. Мы предполагаем, что служба генерации предварительно подписанных URL-адресов запущена и работает, и URL-адрес у нас есть. Для простоты я просто генерирую предварительно подписанные URL-адреса для одного списка файлов.
Итак, в приведенном выше коде мы запрашиваем предварительно подписанные URL-адреса для всех наших файлов, которые будут загружены в виде списка в API. Предварительно подписанные URL-адреса будут основаны на имени, которое мы предоставляем API.
Поэтому убедитесь, что мы предоставляем только имена файлов для службы генерации предварительно подписанных URL-адресов. Если вы укажете абсолютный путь, имена загруженных файлов будут соответствующими абсолютными путями.
Теперь, когда у нас есть предварительно подписанные URL-адреса, мы загрузим их в корзину s3.
Подготовка загрузки
Итак, теперь, когда мы подготовили все наши файлы для загрузки, остается только задача отправки файлов с использованием предварительно подписанных URL-адресов.
Загрузка на S3 с использованием предварительно подписанного URL-адреса
def post_to_s3(self, endpoint, file_name, data, files): # POST to S3 presigned url http_response = requests.post(endpoint, data=data, files=files) if http_response.status_code in [204, 201]: print(f" Upload success for : {file_name}")
Если вы хотите отображать индикатор выполнения загрузки, перейдите здесь.
использованная литература
Https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html
Первоначально опубликовано на https://dock2learn.com 8 сентября 2021 г.