Skip to main content

Package for starting Celery worker inside Yandex Cloud Serverless Container

Project description

Celery Yandex Serverless

Модуль, позволяющий запустить celery-worker внутри Yandex Cloud Serverless Container.

Классический подход с отдельно запущенным воркером

  1. Бекенд отправляет задачу в очередь.
  2. Отдельный процесс воркера забирает задачу из очереди и выполняет ее.

Serverless-подход

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

Модуль celery-yandex-serverless помогает запустить воркер следующим образом:

  1. Бекенд отправляет задачу в очередь
  2. После попадания задачи в очередь срабатывает триггер, который делает http-запрос serverless-контейнеру.
  3. Serverless-контейнер запускает код задачи, который ранее выполнялся в воркере.

Использование

Подключение Celery к Yandex Message Queue

  1. Перейдите на страницу каталога в Яндекс.Облаке
  2. Зайдите в раздел Сервисные аккаунты
  3. Посмотрите название сервисного аккаунта в каталоге Яндекс.Облака
  4. Сгенерируйте 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-задачу, чтобы в Яндекс.Облаке появилась очередь.

Подключение модуля

  1. pip install celery-yandex-serverless - установите модуль
  2. В 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)),
]
  1. Установите переменную окружения 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-таска

Статьи в Яндекс.Облаке

Обновление

  1. poetry version ... - обновить версию
  2. закомитить изменения
  3. git tag ... - добавить тег с версией пакета
  4. git push --tags - запушить тег
  5. poetry publish --build - опубликовать пакет

Автор

Атнагулов Артур

Лицензия 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

celery_yandex_serverless-0.1.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

celery_yandex_serverless-0.1.2-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file celery_yandex_serverless-0.1.2.tar.gz.

File metadata

  • Download URL: celery_yandex_serverless-0.1.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.0 CPython/3.11.1 Darwin/22.4.0

File hashes

Hashes for celery_yandex_serverless-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e7153b126327b43379cca7a46a1c3bbd597c0fa9dc177c7ff8a73ed8dd4dfde7
MD5 5ea1b731f31cb8de3a22cd6b1b16fcc6
BLAKE2b-256 6fe4dbbf89a84e5ebccecd19ad1a3c2c0a67b0932189252b3c3b8ca218839f5f

See more details on using hashes here.

File details

Details for the file celery_yandex_serverless-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for celery_yandex_serverless-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c20ca8ee45aeb8b7aaf9297ca76214ce8a8b744227368a839a335aef313718aa
MD5 6e13aac17c642dfd59c45e45bd9ffbba
BLAKE2b-256 add548451afbfe9b2f3bd65d9a6781f26f6b2ed9af17e89f8f22881c20d26f50

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page