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.3.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

File details

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

File metadata

  • Download URL: celery_yandex_serverless-0.1.3.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.5.0

File hashes

Hashes for celery_yandex_serverless-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f69463425112a703f689363d5277ca84319418fb00bd8b583f45b438ce0bf999
MD5 fcae6161b39c5c1d89a58ed6ae661b10
BLAKE2b-256 e5da960a51a02b3d1b87332fafa0ff398c5ec2174db4d3e11c8aa041d409a636

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for celery_yandex_serverless-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c648e938fb89ad3974626eb9d37eccef95c18155e6322f15da347f58efcd5c4d
MD5 1ae6a4417745420e1abad9f28e216851
BLAKE2b-256 653cf35fa69e23e20214bb0ce5cd6db5bee39b4c91757bdca8d42ebd64b6a14a

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