Как программно работать с облачным хранилищем AWS S3 в Python

Ответ

Для взаимодействия с AWS S3 из Python используется официальный SDK — библиотека boto3. Она позволяет выполнять все основные операции с объектами и бакетами.

Ключевые операции:

  • Загрузка файлов (upload_file)
  • Скачивание файлов (download_file)
  • Получение списка объектов (list_objects_v2)

Пример использования boto3

import boto3

# Рекомендуется настраивать доступ через переменные окружения или IAM-роли,
# а не передавать ключи напрямую в код.
s3_client = boto3.client('s3')

BUCKET_NAME = 'my-unique-bucket-name'

# 1. Загрузка файла
s3_client.upload_file(
    Filename='local_document.txt', 
    Bucket=BUCKET_NAME, 
    Key='documents/remote_document.txt' # Имя объекта в бакете
)

# 2. Скачивание файла
s3_client.download_file(
    Bucket=BUCKET_NAME, 
    Key='documents/remote_document.txt', 
    Filename='downloaded_document.txt'
)

# 3. Генерация presigned URL
# Временная ссылка для доступа к приватному объекту
url = s3_client.generate_presigned_url(
    'get_object',
    Params={'Bucket': BUCKET_NAME, 'Key': 'documents/remote_document.txt'},
    ExpiresIn=3600 # Ссылка действительна 1 час
)
print(f"Presigned URL: {url}")

Почему это важно? Программный доступ к облачным хранилищам является основой для автоматизации бэкапов, построения конвейеров обработки данных (data pipelines) и раздачи статического контента в веб-приложениях.

Ответ 18+ 🔞

Да ты посмотри, какие времена настали! Раньше файлы на дискетах таскали, а теперь, блядь, в облаках их хранят. Ну, в облаках... в этих, как их... AWS S3, ёпта. А чтобы с этим чудом техники общаться из Python, есть официальная такая штука — boto3. Библиотека, которая, по сути, твой личный раб для всех операций с бакетами и объектами. Хочешь залить, хочешь скачать, хочешь список получить — всё ей похуй, она сделает.

Что она умеет, эта мартышлюшка:

  • Загрузить файл наверх (upload_file)
  • Стянуть файл обратно (download_file)
  • Посмотреть, что там вообще валяется (list_objects_v2)

Смотри, как это выглядит в деле

import boto3

# Самый правильный способ — не пихать ключи в код, как последний распиздяй,
# а использовать переменные окружения или IAM-роли. Безопасность, мать её.
s3_client = boto3.client('s3')

BUCKET_NAME = 'my-unique-bucket-name' # Название своего бакета сюда

# 1. Закинуть файл на сервер
s3_client.upload_file(
    Filename='local_document.txt', # Что с компа
    Bucket=BUCKET_NAME, # Куда
    Key='documents/remote_document.txt' # Под каким именем там будет лежать
)

# 2. Оттяпать файл обратно
s3_client.download_file(
    Bucket=BUCKET_NAME, # Откуда
    Key='documents/remote_document.txt', # Что именно
    Filename='downloaded_document.txt' # Куда на комп сохранить
)

# 3. Сгенерить временную ссылку (presigned URL)
# Это если файл приватный, но нужно на часок дать доступ какому-нибудь левому челу.
url = s3_client.generate_presigned_url(
    'get_object',
    Params={'Bucket': BUCKET_NAME, 'Key': 'documents/remote_document.txt'},
    ExpiresIn=3600 # Живет ровно час, потом — хуй с горы
)
print(f"Вот твоя одноразовая ссылка, не потеряй: {url}")

А нахуя это всё? Да чтобы не быть конченым динозавром, вот зачем! На этом строится, блядь, вся автоматизация: бекапы сами делаются, данные между сервисами текут как по маслу, а статика для сайтов раздаётся с космической скоростью. В общем, без этого сейчас — просто пиздец, а не разработка.