Как использовать корзину AWS S3 для размещения статических и медиафайлов в Django

11
компьютеры и технологии 12.webp.webp

Последнее обновление 29.08.2023 — Василий Иванов

Если вы создаете веб-приложение Django, важно эффективно обрабатывать статические ресурсы и загруженные пользователем медиафайлы.

В среде разработки этими файлами управляет Django. Однако в производстве вам захочется изучить дополнительные варианты. Ваша база пользователей может значительно вырасти, и вы можете иметь дело с гораздо большими файлами, такими как аудио и видео.

Корзина Simple Storage Service (S3) Amazon Web Services (AWS) — одна из альтернатив для размещения статических и мультимедийных файлов. Интегрировав S3 с Django, вы можете разгрузить сервер по управлению файлами, снизить нагрузку и обеспечить более быструю и надежную доставку ресурсов.

По теме:  Как проверить загрузку ОЗУ, графического процессора и процессора в Windows 11

Шаг 1. Создайте учетную запись AWS

Если у вас нет учетной записи AWS, перейдите на сайт AWS и создайте новую учетную запись.

Новые учетные записи AWS получают бесплатный доступ к 5 ГБ стандартного хранилища S3 каждый месяц в течение года.

Шаг 2. Создайте корзину S3 для своего проекта

  1. После создания учетной записи AWS войдите в систему и найдите S3 в строке поиска вверху, затем выберите первый вариант.
  2. После выбора первого варианта вы увидите новую страницу. Нажмите кнопку «Создать корзину»:
  3. Затем укажите имя для корзины S3. Вы можете оставить большую часть настроек по умолчанию.
  4. Прокрутите вниз до параметров «Блокировать общий доступ» для этого раздела сегмента, снимите флажок «Блокировать весь общий доступ» и подтвердите появившееся предупреждение.
  5. После этого нажмите кнопку «Создать корзину». Он перенаправит вас на страницу со списком созданных вами корзин S3.

Шаг 3. Создайте пользователя IAM на AWS.

AWS предоставляет услугу под названием IAM (Управление идентификацией и доступом). Это позволяет вам создать отдельную учетную запись для конкретного человека или приложения, которому необходимо взаимодействовать с сервисами AWS.

По теме:  Как использовать собственные шрифты и текстовые эффекты с библиотекой Python Arcade

Вы можете назначать различные уровни разрешений пользователям IAM, представляющим отдельных лиц или приложения, которые взаимодействуют с созданными вами сервисами AWS. Используя пользователей IAM, вы можете гарантировать, что каждый пользователь будет иметь доступ только к тем ресурсам, которые ему нужны, и не более того.

В целях безопасности вам следует создать пользователя IAM для вашего проекта Django, чтобы он мог взаимодействовать с вашей корзиной S3. Выполните следующие действия, чтобы создать пользователя IAM на AWS:

  1. В строке поиска введите IAM и выберите первый вариант. Появится новая страница.
  2. В левой части страницы IAM выберите «Пользователи», затем нажмите кнопку «Добавить пользователей». Откроется еще одна страница для заполнения некоторой информации.
  3. Начните с ввода имени пользователя IAM и нажатия кнопки «Далее» внизу: на следующей странице вы должны выбрать уровни разрешений для пользователя IAM. Следуй этим шагам:
    1. Сначала выберите параметр «Прикрепить политики напрямую» в разделе «Параметры разрешений».
    2. Затем определите политику разрешений для вашего пользователя IAM. Это определит, что может и не может делать пользователь IAM. Поскольку вы хотите, чтобы ваше приложение Django загружало и отправляло файлы, вам следует предоставить ему полный доступ к корзине S3.
    3. В разделе «Политики разрешений» вам следует найти S3FullAccess и выбрать этот параметр. После этого нажмите кнопку Далее.
  4. Затем просмотрите политики для пользователя IAM и нажмите кнопку «Создать пользователя», чтобы создать пользователя IAM.

Шаг 4. Создайте ключ доступа для вашего пользователя IAM

В AWS ключ доступа — это учетные данные, которые вы можете использовать для аутентификации и безопасного доступа к ресурсам AWS программным способом. Ваш проект Django должен предоставить эти учетные данные для доступа к вашей корзине S3.

Следующие шаги помогут вам создать ключ доступа для вашего проекта.

  1. После создания пользователя IAM вы получите предупреждающее сообщение с предложением просмотреть пользователя. Кроме того, вы можете просмотреть пользователя, щелкнув имя пользователя.
  2. Затем выберите вкладку «Учетные данные безопасности», прокрутите вниз, чтобы найти раздел «Ключи доступа», и выберите «Создать ключ доступа».
  3. Вам нужно будет выбрать вариант использования вашего доступа, чтобы AWS могла порекомендовать альтернативный вариант, где это возможно. Это не влияет на ваш ключ доступа. Не стесняйтесь выбирать такой вариант, как «Сторонняя служба» или «Локальный код», и подтвердите всплывающее предупреждение. После этого нажмите кнопку Далее.
  4. На следующей странице введите тег описания для вашего ключа доступа и нажмите кнопку «Создать ключ доступа».
  5. После создания ключа доступа вы можете скопировать свои учетные данные или загрузить их в виде файла CSV. В любом случае, обязательно сохраните эти данные в безопасности.

Шаг 5. Настройте свой проект Django для корзины S3

Чтобы использовать корзину S3 с проектом Django, установите эти пакеты:

  • django-storages: этот пакет поможет вам определить серверное хранилище для ваших файлов.
  • boto3: этот пакет представляет собой пакет разработки программного обеспечения AWS (SDK), который поможет вашему проекту Python взаимодействовать с AWS.

Вы можете установить эти пакеты в свою виртуальную среду Python с помощью менеджера пакетов Pip Python, введя следующую команду в своем терминале:

 pip install django-storages boto3

После успешной установки этих пакетов откройте файл settings.py и добавьте boto3 в установленные приложения.

Последнее, что вам нужно сделать, — это настроить проект Django для использования корзины AWS S3. Вот общая конфигурация для использования:

 AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID '
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
AWS_STORAGE_BUCKET_NAME = 'AWS_STORAGE_BUCKET_NAME'
AWS_S3_SIGNATURE_NAME = 's3v4',
AWS_S3_REGION_NAME = 'AWS_S3_REGION_NAME'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERITY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

Вставьте приведенную выше конфигурацию в файл settings.py и замените значения соответствующим образом. Замените AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY ключом доступа и секретным ключом доступа, который вы скопировали или скачали ранее. Вам также следует изменить AWS_STORAGE_BUCKET_NAME и AWS_S3_REGION_NAME на имена вашего сегмента S3 и региона.

Вы можете получить название региона, перейдя в корзину S3 и скопировав последние значения из столбца региона AWS.

Шаг 6. Проверьте свою конфигурацию AWS

Выполнив вышеуказанные шаги, вы должны быть готовы протестировать свое приложение, загрузив файлы. Следующие примеры кода будут загружать файлы непосредственно из панели администратора, но вы можете загрузить свои файлы из другого места.

Для контекста вы можете иметь модель, которая выглядит следующим образом:

 class Post(models.Model):
    title = models.CharField(max_length=225, blank=False, null=False)
    content = models.TextField('Post Body', blank=False, null=False)
    author = models.CharField(max_length=225, blank=False, null=False)
    date_published = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='posts')

    def __str__(self):
        return self.title

Убедитесь, что вы выполнили необходимые операции, такие как миграция, добавление его в панель администратора, создание представления и другие вещи, необходимые для вашего проекта. Убедитесь, что вы практикуете принцип MVT Django.

Когда вы закончите, перейдите в свою панель администратора или любую другую форму, которую вы создали для загрузки файлов, и загрузите файл изображения.

Перейдите на основной сайт и убедитесь, что изображение есть. Если это так, щелкните изображение правой кнопкой мыши и выберите опцию «Открыть изображение в новой вкладке». На новой вкладке, содержащей изображение, вы заметите, что адресная строка ссылается на корзину S3, созданную вами ранее:

Другой способ убедиться, что ваша конфигурация работает, — перейти к своему сегменту на консоли AWS. Там вы найдете свое изображение:

Шаг 7. Соберите статические файлы в корзину S3

До сих пор вы могли загружать медиафайлы в корзину S3; теперь вам нужно загрузить статические файлы.

Для этого добавьте эти конфигурации в файл settings.py:

 STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'

После этого откройте интерфейс командной строки (CLI) и выполните следующую команду:

 python manage.py collectstatic --noinput

Чтобы убедиться, что все работает, откройте корзину S3 в консоли AWS. Вы увидите папку под названием static.

Используйте AWS S3 Bucket для гораздо большего

Возможности корзин AWS S3 огромны! Вам следует ознакомиться с ним и научиться использовать S3 для других целей, например для размещения статического веб-приложения.

Знание того, как правильно использовать корзины S3, сэкономит вам много времени и поможет создать лучший продукт или решение. Но вы также должны знать, что S3 может подойти не для каждого случая, поэтому перед его использованием рассмотрите требования вашего проекта.