18.03.2025

Подключениe к S3-совместимому хранилищу через Amazon S3 API на Ubuntu с предварительной установкой Python

В данной статье мы разберем, как подключиться к S3-совместимому облачному хранилищу, используя API Amazon S3 в среде Ubuntu. Рассмотрим установку необходимых инструментов, настройку Python-скрипта для работы с хранилищем, а также выполним основные операции: просмотр списка бакетов, загрузку и скачивание файлов. Все шаги подробно описаны, чтобы даже начинающий пользователь смог успешно настроить подключение.

Установка Python и pip

Сначала обновляем систему и устанавливаем Python 3 вместе с менеджером пакетов pip:

sudo apt update
sudo apt install python3 python3-pip
python3 -m pip install --upgrade pip

Установка библиотеки boto3

Для взаимодействия с S3 используем библиотеку boto3, устанавливаем её следующим образом:

pip3 install boto3

Написание Python-скрипта

Перед этим шагом обозначим, что такое бакет:
Бакет (bucket) — это контейнер для хранения файлов в S3-совместимом хранилище. Он выполняет роль каталога, в котором можно организовывать и управлять объектами (файлами).

Создаем новый файл s3_client.py в текстовом редакторе:

nano s3_client.py

Вставляем код, заменяя ВАШ_КЛЮЧ_ДОСТУПА,ВАШ_СЕКРЕТНЫЙ_КЛЮЧ и https://ваш.endpoint.url на ваши реальные данные:

import boto3
from botocore.client import Config

# Данные для подключения
access_key = 'ВАШ_КЛЮЧ_ДОСТУПА'
secret_key = 'ВАШ_СЕКРЕТНЫЙ_КЛЮЧ'
endpoint_url = 'https://ваш.endpoint.url'

# Создание клиента S3
s3_client = boto3.client(
's3',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
endpoint_url=endpoint_url,
config=Config(signature_version='s3')
)

# Получение списка бакетов
try:
response = s3_client.list_buckets()
print("Список бакетов:")
for bucket in response['Buckets']:
print(f" - {bucket['Name']}")
except Exception as e:
print(f"Ошибка: {e}")

Сохраняем файл и закрываем редактор (Ctrl + X, затем Y и Enter).

Запуск скрипта

Для проверки подключения запускаем скрипт:

python3 s3_client.py

Если всё настроено правильно, появится список доступных бакетов.

Дополнительные операции с хранилищем

Создание тестового файла

Перед загрузкой файла создадим его:

echo "Тестовый контент" > local_file.txt

Загрузка файла в хранилище

Добавляем в скрипт следующий код:

s3_client.upload_file('local_file.txt', 'bucket_name', 'remote_file.txt')

Где:

Скачивание файла

Для скачивания файла используем:

s3_client.download_file('bucket_name', 'remote_file.txt', 'local_file.txt')

Где:

Проверка зависимостей

При возникновении ошибок стоит проверить зависимости. Например, можно обновить botocore>:

pip3 install --upgrade botocore

Примечания

FAQ (Часто задаваемые вопросы)

Как исправить ошибку "Access Denied" при подключении к S3?

Проверьте правильность введённых ключей доступа и убедитесь, что у пользователя есть разрешения на чтение/запись объектов в хранилище.

Что делать, если не удаётся установить boto3?

Убедитесь, что у вас установлены последние версии pip и setuptools, а также попробуйте запустить команду:

python3 -m pip install --upgrade pip setuptools

Можно ли использовать этот скрипт для Amazon S3?

Да, если указать endpoint_url='https://s3.amazonaws.com', скрипт будет работать с официальным сервисом Amazon S3.