Задача Celery с брокером AWS SQS отменяется сразу же после запуска в среде Docker

Я столкнулся с проблемой, когда задача Celery, сконфигурированная с брокером AWS SQS, запускается, а затем сразу же отменяется при запуске в среде Docker. Такое поведение происходит несмотря на то, что задача успешно выполняется при запуске из PyCharm на той же машине. Ниже приведена соответствующая часть конфигурации Celery и отладочный вывод, который я получаю при выполнении задачи.

Окружение: Версия Django: 4.2 Celery версия: 5.3.6 Брокер: AWS SQS Развертывание: Docker

Конфигурация сельдерея:

from __future__ import absolute_import, unicode_literals
from celery import Celery, shared_task
from firmwave import settings

app = Celery(
    'firmwave',
    broker=f'sqs://{settings.AWS_SQS_ACCESS_KEY}:{settings.AWS_SQS_SECRET_KEY}@',
)

app.conf.broker_transport_options = {
    'region': settings.AWS_SQS_REGION,
    'predefined_queues': {
        'celery': {
            'url': settings.AWS_QSQ_QUEUE_URL,
            'access_key_id': settings.AWS_SQS_ACCESS_KEY,
            'secret_access_key': settings.AWS_SQS_SECRET_KEY,
        },
    },
    'is_secure': True,
}

app.conf.enable_utc = True
app.conf.broker_connection_retry_on_startup = True
app.autodiscover_tasks()

Отладочный вывод:

[DEBUG/MainProcess] Event request-created.sqs.GetQueueAttributes: calling handler...
[DEBUG/MainProcess] Response body:
b'<?xml version="1.0"?><GetQueueAttributesResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/">**<GetQueueAttributesResult><Attribute><Name>ApproximateNumberOfMessages</Name><Value>155</Value></Attribute></GetQueueAttributesResult>**<ResponseMetadata><RequestId>922533a1-ce80-5018-8f23-6d970e5039f6</RequestId></ResponseMetadata></GetQueueAttributesResponse>'
[2024-02-02 10:06:08,319: DEBUG/MainProcess] Event needs-retry.sqs.GetQueueAttributes: calling handler <botocore.retryhandler.RetryHandler object at 0xffffb3475970>
[DEBUG/MainProcess] Sending http request...
[DEBUG/MainProcess] Certificate path...
[DEBUG/MainProcess] Response headers...
[DEBUG/MainProcess] Response body...
[DEBUG/MainProcess] No retry needed.
[DEBUG/MainProcess] Canceling task consumer...
[DEBUG/MainProcess] Closing consumer channel...

Рабочий Celery запускается и успешно подключается к AWS SQS, но затем отменяет потребителя задач и закрывает канал, не обработав ни одной задачи.

Убедитесь, что очередь AWS SQS существует и доступна. Проверка правильности учетных данных AWS и наличия необходимых прав. Запуск той же настройки вне Docker (где все работает, как и ожидалось). Я подозреваю, что проблема может быть связана с конфигурацией сети Docker или, возможно, с некоторыми настройками Celery, которые необходимо скорректировать для сред Docker, но я не уверен, что именно нужно изменить.

Кто-нибудь сталкивался с подобными проблемами при работе Celery и AWS SQS в среде Docker, или может ли кто-нибудь предоставить информацию о том, что может быть причиной такого поведения и как его решить?

Вернуться на верх