Использовать хранилище Django для хранения результатов Celery в Google Cloud

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Тот, кто подключает Celery к Django, использует как правило, пакет django-celery-results для использования таблицы специальной модели Django в качестве хранилища результатов выполнения задач Celery.

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

Как известно всем продвинутым разработчикам под Django, в этой системе реализована концепция независимого от бакенда хранилища для файлов.

Подробности про хранилище

Базовый класс, декларирующий интерфейс такого хранилища, это django.core.files.storage.Storage.Сама Django предлагает ровно одну реализацию, django.core.files.storage.FileSystemStorage, однако этот недостаток легко ликвидируется использованием пакета django-storages. Изначальная такое хранилище используется для сохранения содержимого FileField и его наследников.

Пакет django-storages реализует файловое хранилище для большинства систем облачного хранения файлов, таких как Amazon AWS S3, Google Cloud, или Microsoft Azure. Я хочу воспользоваться этим пакетом, чтобы Celery могла хранить результаты в облачном хранилище Google Cloud.

Celery и сама умеет в облако

Действительно, в документации имеется раздел о бакендах, в том числе, облачных. К сожалению, бакенд для Google Cloud отсутствует, так что использование Django Storage для подключения такого хранилища, является полезной опцией.

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

Именно этим занимается пакет Django Storage Celery Results, который я написал.

После установки пакета

pip install django-storage-celery-results

укажите его в списке использованных в файле settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'django_storage_celery_results',
    ...
]

Настройте Celery для использования пакета

CELERY_RESULT_BACKEND = 'django-storage'

Теперь, нужно указать, какой именно бакенд Django Storage нужно использовать. Я хочу использовать Google Storage, поэтому напишу:

CELERY_RESULT_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'

Я хочу задать индивидуальную конфигурацию для Google Cloud, которая будет использована только для хранения результатов, поэтому напишу конфигурацию, которая будет использована только для этой цели:

А как еще можно?

Еще можно написать часть или всю конфигурацию, которая будет использована не только для хранения результатов, но и для хранения файлов FileField. Для этого вы можете воспользоваться переменными settings.py, описанными в документации для указанного хранилища файлов. Например, для Google Cloud, вы можете указать общий файл авторизации сервисного аккаунта, который будет использован и для размещения результатов, и для размещения файлов соответствующих FileField:

GS_CREDENTIALS = Credentials.from_service_account_file('google_service_secrets.json')

Тогда размещать ссылку на этот же файл в переменной ниже, уже не будет необходимости

from google.oauth2.service_account import Credentials

CELERY_RESULT_STORAGE_CONFIG = {
    'credentials': Credentials.from_service_account_file('google_service_secrets.json'),
    'bucket_name': 'celery-results',
    'location': 'celery-results/develop'
}

В этом коде подразумевается, что файл, в который вы сохранили параметры входа при создании сервисного аккаунта, называется google_service_secrets.json.

Не забудьте установить нужные библиотеки для доступа в Google Cloud

Доступ в Google Cloud из пакета django-storages обеспечивается установкой пакета https://pypi.org/project/google-cloud-storage/:

pip install google-cloud-storage

Источник: https://habr.com/ru/post/716202/


Интересные статьи

Интересные статьи

Огромный объем информации окружает пользователей повсюду. Создание и развитие современных персональных компьютерных устройств, в основной своей массе представленных стационарными персонал...
Сегодня у нас на эдаком обзоре и вперемешку отзыве телефон, который покорил всех далеко не своим дизайном - Google Pixel 3. Поехали!
В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
JWT (JSON Web Token) — это замечательный стандарт, основанный на формате JSON, позволяющий создавать токены доступа, обычно используемые для аутентификации в клиент-серверных приложен...
Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».