# 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. Создайте бакет

  1. Перейдите на главную страницу каталога
  2. Зайдите в сервис Object storage
  3. Создайте бакет
  4. Сохраните имя, чтобы позже настроить подключение к нему

# 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/
    
    1
    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/....