Возможно ли использовать celery с sqs без django
Я следую учебнику celery tutorial, пытаясь заставить локальный рабочий celery подключиться к очереди SQS, которая у меня работает на AWS (я полный профан в SQS/Celery). Вот мой task.py:
from celery import Celery
from kombu.utils.url import safequote
# fake keys here and in the rest of the question, I am using actual valid creds
aws_access_key = safequote("ABCDEFGFHIKJ:")
aws_secret_key = safequote("abcdefgjk12345678/abcd/123/secretkey")
broker_transport_options = {'region': 'us-west-2'}
broker_url=f"sqs://{aws_access_key}:{aws_secret_key}@"
app = Celery('tasks', broker=broker_url)
@app.task
def add(x, y):
return x + y
но, судя по логам, похоже, что он вообще не пытается связаться с AWS:
[2021-12-03 12:59:46,358: WARNING/MainProcess] No hostname was supplied. Reverting to default 'None'
[2021-12-03 12:59:46,359: INFO/MainProcess] Connected to sqs://ABCDEFGHIJK:**@localhost//
[2021-12-03 12:59:47,203: INFO/MainProcess] celery@ac78958533de ready.
Я попробовал указать имя хоста для очереди внутри url брокера (я предполагал, что это будет работать, но это не так)
# setting the host after the @ without https fails
broker_url=f"sqs://{aws_access_key}:{aws_secret_key}@"sqs.us-west-2.amazonaws.com/123456788/my-queue"
# errors with
Unrecoverable error: ClientError("An error occurred (SignatureDoesNotMatch) when calling the ListQueues operation: Credential should be scoped to a valid region, not 'us-east-1'
Вышеуказанная ошибка довольно странная, потому что моя очередь живет в us-west-2, как я установил в broker_transport_options
специально для us-west-2.
Я также попробовал передать https как часть url, но безуспешно:
url = safequote("https://sqs.us-west-2.amazonaws.com/123456789/my-queue")
broker_url=f"sqs://{aws_access_key}:{aws_secret_key}@{url}"
# fails with
consumer: Cannot connect to sqs://ABCDEFGHIJK:**@https%3A%2F%2Fsqs.us-west-2.amazonaws.com%2F123456789%2Fmy-queue//: Could not connect to the endpoint URL: "http://https://sqs.us-west-2.amazonaws.com/12345678/my-queue"
Я видел много других руководств, использующих celery + django, и они устанавливают все эти переменные в файле settings.py, но в официальной документации по celery вообще не упоминается django. Мои вопросы следующие:
- what's the correct way to use celery with sqs without using django
- what's the benefit (or use case) of using celery with django? my main use case is have a worker checking the queue for messages, and run some jobs for new messages. I don't see how django would fit in my use case.