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

How to use Amazon SQS as Celery broker, without creating / listing queues?

对于一个项目,我的组织正计划将 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'
    }
}

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

为什么即使我已经通过 predefined_queues 设置,celery 仍在尝试创建队列:https://docs.celeryproject.org/en/stable/getting-started/brokers/sqs.html#predefined-queues

提前致谢!

Celery worker 需要关联到允许 CreateQueue 操作的 IAM 角色。如果您的 Celery 工作人员 运行 在 EC2 实例上,那么最简单的事情就是使用 instance-profile,并让实例角色能够执行 CreateQueue 操作。

尽管我的公司是 AWS 的重度用户(实际上一切都在 AWS 上),但我建议您在决定使用工作站上无法拥有的 AWS 服务时三思而后行,而 SQS 就是这样一种服务.