如何在不创建/列出队列的情况下将Amazon SQS用作Celery经纪人?

问题描述

对于一个项目,我的组织计划将Celery经纪人从Redis转移到SQS。有人可以指导我如何调整Celery设置,以便我可以使用预定义的SQS队列,而无需celery尝试创建/列出队列(因为我没有那些权限)。

我尝试了以下设置:

CELERY_broKER_URL = 'sqs://'
CELERY_broKER_TRANSPORT_OPTIONS = {
    'predefined_queues':{
        'MyQueue' : {
            'url' : '<SQS Queue URL>',}
    }
}
CELERY_TASK_DEFAULT_QUEUE = 'MyQueue'
CELERY_ROUTES = {
    'tasks.*':{
        'queue' : 'MyQueue'
    }
}

应用这些设置后,每当尝试通过芹菜向SQS队列发送消息时,我仍然会收到以下错误An error occurred (AccessDenied) when calling the CreateQueue operation: Access to the resource https://queue.amazonaws.com/ is denied.

即使我已经通过了预定义的队列设置https://docs.celeryproject.org/en/stable/getting-started/brokers/sqs.html#predefined-queues,为什么芹菜仍在尝试创建队列?

谢谢!

解决方法

Celery工作者需要与允许CreateQueue操作的IAM角色相关联。如果您的Celery工作者在EC2实例上运行,那么最简单的方法是使用instance-profile,并让实例角色能够执行CreateQueue操作。

即使我的公司是AWS的重度用户(实际上所有内容都在AWS上使用),我还是建议您在决定使用工作站上无法提供的AWS服务时三思而后行,而SQS就是其中之一。 / p>