Skip to main content

No project description provided

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 

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

Автор

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

Лицензия 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.0.2.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

celery_yandex_serverless-0.0.2-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for celery_yandex_serverless-0.0.2.tar.gz
Algorithm Hash digest
SHA256 480564e8e762f87382148ef7c3180c943cb0ee4e5976f8192690f383799f0667
MD5 f0bf7f934a8d34774fe335032eff7aac
BLAKE2b-256 536cb4cae405208a75409c100850cf2e1cbb4bd61b06d513dc40d9c48287ba59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for celery_yandex_serverless-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 51879688b1a3ed4512071c1c3ad031d8f70c9f6223f0899c04b7c1cdc025b214
MD5 57a9443c447e8e95e4dbb3c34493c5ba
BLAKE2b-256 526e4c1379513b14e5e3ccb23f2aa816cfb47aa99f7088fc24a34f4e414f91ff

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