Сельдерей с Amazon SQS - программирование
Подтвердить что ты не робот

Сельдерей с Amazon SQS

Я хочу использовать Amazon SQS в качестве брокера, поддерживаемого Celery. Реализация транспортной реализации SQS для Kombu, от которой зависит сельдерей. Однако для его использования недостаточно документации, поэтому я не могу найти, как настроить SQS на сельдерей. Есть ли кто-нибудь, кому удалось настроить SQS на сельдерей?

4b9b3361

Ответ 1

Я столкнулся с этим вопросом несколько раз, но все еще не совсем уверен, как настроить Celery для работы с SQS. Оказывается, это очень легко с последними версиями Kombu и Celery. В качестве альтернативы синтаксису BROKER_URL, упомянутого в другом ответе, вы можете просто установить транспорт, параметры, пользователь и пароль следующим образом:

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'us-east-1',
}
BROKER_USER = AWS_ACCESS_KEY_ID
BROKER_PASSWORD = AWS_SECRET_ACCESS_KEY

Это связано с предполагаемой проблемой с парсером URL-адресов, который не позволяет отправлять косые черты в вашем секретном интерфейсе API, что кажется довольно распространенным явлением с AWS. Поскольку там пока не было много информации о теме, я также написал короткое сообщение в блоге по этой теме:

http://www.caktusgroup.com/blog/2011/12/19/using-django-and-celery-amazon-sqs/

Ответ 2

Я использую Celery 3.0 и получаю предупреждения об устаревании при запуске рабочего с настройками BROKER_USER/BROKER_PASSWORD.

Я просмотрел парсинг URL-адреса SQS в kombo.utils.url._parse_url, и он вызывает urllib.unquote на элементах имени пользователя и пароля URL.

Итак, чтобы решить проблему с секретными ключами с помощью косой черты, я смог успешно использовать для BROKER_URL следующее:

import urllib
BROKER_URL = 'sqs://%s:%[email protected]' % (urllib.quote(AWS_ACCESS_KEY_ID, safe=''),
                               urllib.quote(AWS_SECRET_ACCESS_KEY, safe=''))

Я не уверен, что ключи доступа могут иметь косые черты в них, но это тоже не помешает процитировать его.

Ответ 3

Никто не ответил на это. В любом случае я попытался настроить Celery с Amazon SQS, и, похоже, я достиг небольшого успеха.

Kombu должен быть исправлен для этого, поэтому я написал несколько патчей, и есть мой запрос на перенос. Вы можете настроить SQS Amazon, установив BROKER_URL схемы sqs:// в Celery на исправленном Kombu. Например:

BROKER_URL = 'sqs://AWS_ACCESS:[email protected]:80//'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'ap-northeast-1',
    'sdb_persistence': False
}

Ответ 4

Для кого-то, кто наткнулся на этот вопрос, мне удалось получить Celery, готовый к работе с SQS (без исправления), но мне нужно было обновить до последних версий Celery и Kombu, чтобы это работало (1.4.5 и 1.5.1 на данный момент). Используйте строки конфигурации выше, и он должен работать (хотя вы, вероятно, захотите изменить область по умолчанию).

Gotcha: чтобы использовать формат URL выше, вам нужно убедиться, что ваш секрет AWS не содержит косой черты, поскольку это смущает парсер URL. Просто продолжайте создавать новые секреты, пока не получите один без косой черты.

Ответ 5

Я восстановил учетные данные в согласии IAM, пока не получил ключ без косой черты (/). Проблемы с синтаксическим анализом только с этим персонажем, поэтому, если ваш секрет не имеет одного, все будет в порядке.

Не самое страшное изящное решение, но определенно держит код чистым от хаков.

Ответ 6

Обновление для Python 3, удаление обратной косой черты из ключа AWS.

from urllib.parse import quote_plus
BROKER_URL = 'sqs://{}:{}@'.format(
    quote_plus(AWS_ACCESS_KEY_ID), 
    quote_plus(AWS_SECRET_ACCESS_KEY)
)