web-dev-qa-db-fra.com

Céleri avec Amazon SQS

Je souhaite utiliser Amazon SQS en tant que courtier sauvegardé sur Celery . Il existe une implémentation de transport SQS pour Kombu , dont dépend le céleri. Cependant, il n’ya pas assez de documentation pour l’utiliser, je ne trouve donc pas comment configurer SQS sur Celery. Y at-il quelqu'un qui a réussi à configurer SQS sur le céleri?

50
minhee

J'ai rencontré cette question à plusieurs reprises, mais je ne savais toujours pas comment configurer Celery pour qu'il fonctionne avec SQS. Il s'avère que c'est assez facile avec les dernières versions de Kombu et de céleri. Au lieu de la syntaxe BROKER_URL mentionnée dans une autre réponse, vous pouvez simplement définir le transport, les options, l'utilisateur et le mot de passe comme suit:

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

Cela évite un problème présumé avec l'analyseur d'URL qui n'autorise pas les barres obliques dans le secret de votre API, ce qui semble être un événement assez courant avec AWS. Comme il ne semblait pas y avoir encore une mine d’informations sur le sujet, j’ai également écrit un court article de blog sur le sujet ici:

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

58
tobias.mcnulty

J'utilisais Celery 3.0 et je recevais des avertissements de dépréciation lors du lancement de l'ouvrier avec les paramètres BROKER_USER/BROKER_PASSWORD.

J'ai jeté un coup d'œil à l'analyse de l'URL SQS dans kombo.utils.url._parse_url et l'appelant urllib.unquote sur les éléments de nom d'utilisateur et de mot de passe de l'URL.

Donc, pour contourner le problème des clés secrètes avec des barres obliques, j'ai pu utiliser avec succès les éléments suivants pour BROKER_URL:

import urllib
BROKER_URL = 'sqs://%s:%s@' % (urllib.quote(AWS_ACCESS_KEY_ID, safe=''),
                               urllib.quote(AWS_SECRET_ACCESS_KEY, safe=''))

Je ne sais pas si les clés d'accès peuvent contenir des barres obliques, mais le fait de la citer aussi ne fait pas de mal.

30
CalloRico

Personne n'a répondu à ce sujet. Quoi qu'il en soit, j'ai essayé de configurer Celery avec Amazon SQS, et il semble que j'aie eu un petit succès.

Kombu devrait être corrigé pour cela, alors j'ai écrit quelques correctifs et il y a ma demande de tirage aussi. Vous pouvez configurer Amazon SQS en définissant le schéma BROKER_URL of sqs:// dans Celery sur le Kombu patché. Par exemple:

BROKER_URL = 'sqs://AWS_ACCESS:AWS_SECRET@:80//'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'ap-northeast-1',
    'sdb_persistence': False
}
2
minhee

Pour ceux qui tombent sur cette question, je suis parvenu à faire fonctionner Celery immédiatement avec SQS (aucun correctif requis), mais je devais mettre à jour les dernières versions de Celery et Kombu pour que cela fonctionne (1.4. 5 et 1.5.1 à partir de maintenant). Utilisez les lignes de configuration ci-dessus et cela devrait fonctionner (bien que vous souhaitiez probablement changer la région par défaut).

Gotcha: pour utiliser le format d'URL ci-dessus, vous devez vous assurer que votre secret AWS ne contient pas de barres obliques, car cela confond l'analyseur d'URL. Continuez simplement à générer de nouveaux secrets jusqu'à ce que vous en obteniez un sans une barre oblique.

2
nitwit

J'ai régénéré les informations d'identification dans la consonne IAM jusqu'à l'obtention d'une clé sans barre oblique (/). Les problèmes d'analyse ne concernent que ce personnage, donc si votre secret n'en a pas, tout ira bien.

Ce n’est pas la solution la plus élégante, mais elle garde le code propre des hacks.

0
WhyNotHugo