# Object storage (S3)
Object storage (opens new window) – масштабируемый сервис хранения файлов. В Amazon Web Services аналогичный сервис называется S3 (Simple Storage Service). Максимальный объем хранимых файлов не ограничивается, оплата идет за фактически занимаемое место и количество запросов к файлам.
Бакет - место, в котором хранятся файлы одного проекта. Бакет может быть
- публичным, когда файлы доступны всем по прямым ссылкам, и
- приватным, когда доступ к файлам осуществляется по специально сформированным ссылкам, а прямой доступ запрещен.
Правила и стоимость хранения файлов устанавливаются классом хранения. Есть стандартное хранение, предназначеное для хранения файлов, которыми пользуются достаточно часто. Более "холодные" классы предназначены для хранения файлов, доступ к которым осуществляется не так часто (например, резервные копии и архивы данных). Чем "холоднее" класс, тем дешевле его хранение и дороже операции с данными. Подробнее про классы хранения (opens new window).
Подключиться к хранилищу можно из больщинства современных фреймворков. Управлять файлами можно в веб-интерфейсе, а также с помощью программ для компьютера. Подробнее про инструменты (opens new window).
Далее мы разребем примеры использования Object Storage.
Презентация из видео (opens new window)
# Подготовка
# 1. Создайте бакет
- Перейдите на главную страницу каталога
- Зайдите в сервис Object storage
- Создайте бакет
- Сохраните имя, чтобы позже настроить подключение к нему
# 2. Создайте access key и secret key
Создайте статический ключ доступа, чтобы получить access key и secret key. Эти данные потребуются в дальнейшем для подключения к бакету.
# Подключение хранилища файлов к проекту на Django
Хранение файлов в Django работает с помощью Storage Backends (opens new window). Мы подключим бекенд, который будет загружать файлы в Object Storage. В хорошо написанном проекте больших изменений в коде не потребуется.
Уберите прямое взаимодействие с файловой системой
Если в проекте есть прямое взаимодействие с файловой системой через os
или open
, могут возникнуть проблемы при изменении способа хранения файлов. Используйте инструменты Django (opens new window) для работы с файлами.
# 1. Установите django-storages
В django-storages (opens new window) реализован бекенд для загрузки в Object Storage (opens new window).
Установите модуль:
# 2. Установите переменные окружения
Установите переменные окружения для подключения к Object storage
AWS_ACCESS_KEY_ID=access key
AWS_SECRET_ACCESS_KEY=secret key
AWS_DEFAULT_REGION=ru-central1
AWS_STORAGE_BUCKET_NAME=название бакета
AWS_S3_ENDPOINT_URL=https://storage.yandexcloud.net/
2
3
4
5
# 3. Укажите storage backend в настройках
Добавьте следующие строки в файл settings.py
.
Хранение файлов по умолчанию убдет происходить на том же сервере, где и запущено приложение. Если будет установлена переменная окружения AWS_ACCESS_KEY_ID
, файлы будут загружаться в Object Storage. Это поможет локально проверять работу сайта без дополнительной интеграции с Object Storage, а на сервере настроить загрузку файлов реальных пользователей в Object Storage.
# 4. Проверьте загрузку файлов
Попробуйте загрузить файл в любом месте на сайте. Он должен загрузиться в Object Storage, а ссылка при просмотре файла должна вести на https://storage.yandexcloud.net/...
.