通过 Django Celery [sqs] 连接到 Amazon SQS 密钥 (SSE-SQS) 加密的 SQS 队列

问题描述 投票:0回答:1

在连接到 SQS 加密队列时,我无法让我的 Celery 运行

这是我的 django 项目的 settings.py

SQS_AWS_ACCESS_KEY_ID = 'xxxx'
SQS_AWS_SECRET_ACCESS_KEY = 'xxxx'
SQS_AWS_QUEUE_NAME = 'sqs.eu-west-2.amazonaws.com/xxxx/xxx-celery-broker'

broker_url = f"sqs://{SQS_AWS_ACCESS_KEY_ID}:{SQS_AWS_SECRET_ACCESS_KEY}@{SQS_AWS_QUEUE_NAME}"
CELERY_BROKER_URL = broker_url
CELERY_RESULT_BACKEND = None
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True 

当我运行我的工作人员时,我收到此错误,我假设我的队列名称不是 https://

botocore.exceptions.ClientError:调用 GetQueueAttributes 操作时发生错误 (InvalidSecurity):对此队列的所有请求都必须使用 HTTPS 和 SigV4。

当我将其更改为

SQS_AWS_QUEUE_NAME = 'https://sqs.eu-west-2.amazonaws.com/xxxx/xxx-celery-broker'

我收到此错误 无法连接到 sqs://xxx:**@https//sqs.eu-west-2.amazonaws.com/xxx/xxx-celery-broker:无法连接到端点 URL:“http://https /”。

该配置似乎在 url 上添加了一个随机 http,这就是为什么我认为它失败了

当我连接到非加密队列时,它工作正常,如下所示

这是我的 celery.py 配置

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings")

# Create a Celery instance and configure it to use SQS
app = Celery("proj")

# Load task modules from all registered Django app configs.
app.config_from_object("django.conf:settings", namespace="CELERY")

# Auto-discover tasks in all installed apps

app.autodiscover_tasks(settings.INSTALLED_APPS)
app.conf.task_default_queue = 'xxx-celery-broker'

我束手无策,试图解决这个问题,假设有一个小的配置更改可以解决这个问题

提前致谢

这是我将日志级别设置为调试时的日志

 Making request for OperationModel(name=GetQueueAttributes) with params: {'url_path': '/', 'query_string': '', 'method': 'POST', 'headers': {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', 'User-Agent': 'Boto3/1.26.135 Python/3.11.6 Linux/6.2.0-1017-aws Botocore/1.29.165'}, 'body': {'Action': 'GetQueueAttributes', 'Version': '2012-11-05', 'QueueUrl': 'https://sqs.eu-west-2.amazonaws.com/id/name', 'AttributeName.1': 'ApproximateNumberOfMessages'}, 'url': 'http://https/', 'context': {'client_region': 'eu-west-2', 'client_config': <botocore.config.Config object at 0x7f4d28836b50>, 'has_streaming_input': False, 'auth_type': None}} 
django amazon-web-services celery amazon-sqs django-celery
1个回答
0
投票

在 BROKER_TRANSPORT_OPTIONS 中,添加以下行:

"is_secure": True

有关此问题的更多信息此处,并感谢 github/goatwu1993。

© www.soinside.com 2019 - 2024. All rights reserved.