Package for starting Celery worker inside Yandex Cloud Serverless Container
Project description
Celery Yandex Serverless
Модуль, позволяющий запустить celery-worker внутри Yandex Cloud Serverless Container.
Классический подход с отдельно запущенным воркером
- Бекенд отправляет задачу в очередь.
- Отдельный процесс воркера забирает задачу из очереди и выполняет ее.
Serverless-подход
В Serverless подходе предполагается, что нет никаких запущенных постоянно процессов приложения. Эти процессы запускаются либо по запросу пользователя, либо по различным тригерам облаком.
Модуль celery-yandex-serverless
помогает запустить воркер следующим образом:
- Бекенд отправляет задачу в очередь
- После попадания задачи в очередь срабатывает триггер, который делает http-запрос serverless-контейнеру.
- Serverless-контейнер запускает код задачи, который ранее выполнялся в воркере.
Использование
Подключение Celery к Yandex Message Queue
- Перейдите на страницу каталога в Яндекс.Облаке
- Зайдите в раздел Сервисные аккаунты
- Посмотрите название сервисного аккаунта в каталоге Яндекс.Облака
- Сгенерируйте
ACCESS_KEY
иSECRET_KEY
с помощью команды (заменитеSERVICE_ACCOUNT_NAME
на название сервисного аккаунта):
yc iam access-key create --service-account-name SERVICE_ACCOUNT_NAME
Команда вернет следующую информацию. Сохраните ее, она пригодится в будущем.
access_key:
id: aje...
service_account_id: aje...
created_at: "2023-03-24T17:49:01.555836400Z"
key_id: YCAJ... # <- Это access key
secret: YCPM... # <- Это secret key
Настройка
Укажите переменные окружения с использованием только что полученных данных:
AWS_ACCESS_KEY_ID="access key, скопированный выше"
AWS_SECRET_ACCESS_KEY="secret key, скопированный выше"
AWS_DEFAULT_REGION="ru-central1"
CELERY_BROKER_URL=sqs://message-queue.api.cloud.yandex.net:443
CELERY_BROKER_IS_SECURE=True
В файле settings.py
укажите:
CELERY_BROKER_URL = os.environ.get("CELERY_BROKER_URL")
CELERY_BROKER_TRANSPORT_OPTIONS = {
'is_secure': os.environ.get("CELERY_BROKER_IS_SECURE", 'false').lower() == 'true'
}
После этого отправьте celery-задачу, чтобы в Яндекс.Облаке появилась очередь.
Подключение модуля
pip install celery-yandex-serverless
- установите модуль- В urls.py (
projectname
замените на название проекта):
from django.urls import path
from celery_yandex_serverless.django import worker_view_factory
from projectname.celery import app
urlpatterns = [
# другие адреса...
path("worker/<str:key>/", worker_view_factory(app)),
]
- Установите переменную окружения
CELERY_YANDEX_SERVERLESS_KEY
со случайным ключом. Он предотвратит нежелательные запуски воркеров по прямому обращению к URL.
Создание триггера в Яндекс.Облаке
В консольной команде ниже сделайте замены и выполните ее:
YANDEX_MESSAGE_QUEUE_ARN
- ARN очередиSERVICE_ACCOUNT_NAME
- название сервисного аккаунтаSERVERLESS_CONTAINER_NAME
- название serverless-контейнераCELERY_YANDEX_SERVERLESS_KEY
- ключ, созданный ранее
yc serverless trigger create message-queue \
--name celery \
--queue YANDEX_MESSAGE_QUEUE_ARN \
--queue-service-account-name SERVICE_ACCOUNT_NAME \
--invoke-container-name SERVERLESS_CONTAINER_NAME \
--invoke-container-service-account-name SERVICE_ACCOUNT_NAME \
--invoke-container-path /worker/CELERY_YANDEX_SERVERLESS_KEY \
--batch-size 1 \
--batch-cutoff 10s
Включение логирования
Добавьте в settings.py
:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"loggers": {
"celery_yandex_serverless.django": {
"level": "INFO",
},
},
}
Уровни:
INFO
- инфорация о начале и окончании обработки задачиDEBUG
- печать содержимого аргументов celery-таска
Статьи в Яндекс.Облаке
Автор
Лицензия MIT.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file celery_yandex_serverless-0.1.1.tar.gz
.
File metadata
- Download URL: celery_yandex_serverless-0.1.1.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.0 CPython/3.11.1 Darwin/22.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d88ac7bd8d07a823ac6bf890605606ee6a5fd1dc509f7d5511c89bcd1c6362e |
|
MD5 | e124985801fbc075026c95a011b59e66 |
|
BLAKE2b-256 | 22c93ba49c1815e374c5e4c746d45b6e117f596c1ecac6f5c824cad054e0620d |
File details
Details for the file celery_yandex_serverless-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: celery_yandex_serverless-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.0 CPython/3.11.1 Darwin/22.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cdeafb0b00b08c777bd076dd0b0a21e7814a688f88172c9ad9a4292c87e08038 |
|
MD5 | 93ffd8f34b68b2bb08bde28156c9e989 |
|
BLAKE2b-256 | 5190ad17e58af6f5cbba711406ab851b7c331d15c3de86b1c5c4592034ced8ca |