Запуск celery worker на ECS Task и использование SQS в качестве брокера

Я создаю веб-приложение, которому требуются некоторые долго выполняющиеся задачи на AWS ECS с использованием celery в качестве распределенной очереди задач. Проблема, с которой я столкнулся, заключается в том, что мой рабочий celery, запущенный на ECS, не получает задания от SQS, хотя кажется, что он подключен к нему.

Ниже приведены журналы из задачи ECS.

/usr/local/lib/python3.8/site-packages/celery/platforms.py:797: RuntimeWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!
Please specify a different user using the --uid option.
User information: uid=0 euid=0 gid=0 egid=0
  warnings.warn(RuntimeWarning(ROOT_DISCOURAGED.format(
 
 -------------- celery@ip-xxx-xxx-xxx-xxx.us-east-2.compute.internal v5.0.1 (singularity)
--- ***** ----- 
-- ******* ---- Linux-4.14.252-195.483.amzn2.x86_64-x86_64-with-glibc2.2.5 2021-12-14 06:39:58
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         emptive_portal:0x7fbfda752310
- ** ---------- .> transport:   sqs://XXXXXXXXXXXXXXXX:**@localhost//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 2 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> emptive-celery2.fifo exchange=sync(direct) key=emptive-celery.fifo
                
[tasks]
 
  . import_export_celery.tasks.run_export_job
  . import_export_celery.tasks.run_import_job
[Errno 2] No such file or directory: 'seq_tokens/emptive-staging_web_sequence_token.txt'
[Errno 2] No such file or directory: 'seq_tokens/emptive-staging_web_sequence_token.txt'
2021-12-14 06:39:58 [INFO] Connected to sqs://XXXXXXXXXXXXXXXXX:**@localhost//
[Errno 2] No such file or directory: 'seq_tokens/emptive-staging_web_sequence_token.txt'
[Errno 2] No such file or directory: 'seq_tokens/emptive-staging_web_sequence_token.txt'
2021-12-14 06:39:58 [INFO] celery@ip-xxx-xxx-xxx-xxx.us-east-2.compute.internal ready.

Следует отметить, что я запустил тот же контейнер, который я развернул на ECS, локально на той же машине, на которой находится веб-сервер django, отправляющий задания. Этот celery worker не имеет никаких проблем с получением заданий.

Я также пробовал дать ecsTaskExecutionRole полные права на SQS, но это, похоже, ни на что не влияет. Любая помощь будет принята с благодарностью.

Итак, я наконец-то исправил это. Проблема была действительно глупой с моей стороны :) Мне просто пришлось заменить BROKER_TRANSPORT_OPTIONS на CELERY_BROKER_TRANSPORT_OPTIONS в конфиге celery.

Новая конфигурация:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
    # SQS CONFIG
    CELERY_BROKER_URL = "sqs://%s:%s@" % (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_BROKER_TRANSPORT_OPTIONS = {
        'region': 'us-east-2',
        'polling_interval': 20,
    }
    CELERY_RESULT_BACKEND = None
    CELERY_ENABLE_REMOTE_CONTROL = False
    CELERY_SEND_EVENTS = False
Вернуться на верх