[PYTHON] Verwenden Sie SSL mit Sellerie + Redis

Einführung

Sellerie ist ein Framework für die Verarbeitung von Python-Aufgaben in einer Warteschlange. Ich kann Redis als Broker von Sellerie verwenden, aber als ich den "Azure Redis Cache" von Azure verwendete, war ich süchtig nach dem Teil, der SSL verwendet, daher werde ich die Verwendung hier belassen.

Umgebung

Unter der Annahme, dass es in Flask, einer Webanwendung, verwendet wird, denke ich, dass es in anderen Umgebungen dasselbe ist.

So verwenden Sie SSL

Laut Was ist neu in Celery 4.0 (latenter Aufruf) kann Celery ab Version 4.0 eine SSL-Verbindung mit Redis verwenden. Das ist.

Es wird gesagt, dass es durch Setzen von broker_use_ssl verwendet werden kann, aber im Fall von Redis diese Informationen Es funktioniert nicht, auch wenn ich es durch Schlucken eingestellt habe.

Error while reading from socket: (104, 'Connection reset by peer')

Sie werden von dem Fehler geplagt. Dieser Fehler ist darauf zurückzuführen, dass Redis 'redis.connection.Connection' anstelle von 'redis.connection.SSLConnection' verwendet wird, um eine Verbindung zu Redis in Celery herzustellen.

Redis SSL-Unterstützung korrigieren Wenn Sie diese Pull-Anforderung nicht als Referenz festlegen, können Sie SSL nicht verwenden.

from celery import Celery
from redis.connection import SSLConnection
from .config import broker_use_ssl


def make_celery(app):
    celery = Celery(app.import_name, backend=app.config['CELERY_BACKEND'],
                    broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    celery.conf.update(broker_use_ssl=broker_use_ssl)

    # URL: https://github.com/celery/kombu/pull/634
    if celery.conf.broker_use_ssl:
        celery.backend.connparams.update(celery.conf.broker_use_ssl) # <-Hier
        celery.backend.connparams['connection_class'] = SSLConnection # <-Hier

    TaskBase = celery.Task

    class ContextTask(TaskBase):
        abstract = True

        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)

    celery.Task = ContextTask
    return celery

Die vom Argument "make_celery" übergebene "App" ist der Flask-Anwendungskontext. Nach dem Setzen von "Broker_use_ssl" müssen Sie "celery.backend.connparams ['connection_class'] = SSLConnection" setzen.

Außerdem heißt es in der Dokumentation, dass "Broker_use_ssl" auf "True" oder ein Wörterbuch gesetzt werden kann, aber die Einstellung "True" funktioniert nicht. ** Sie müssen das Wörterbuch einstellen. Im Gegensatz zu Ruby wird das Wörterbuch als "Falsch" beurteilt, wenn es leer ist

broker_use_ssl = {'ssl_cert_reqs': ssl.CERT_NONE}

Ich denke, es ist eine gute Idee, es zu behalten.

Passwort

Legen Sie in Sellerie ein Passwort fest

CELERY_BROKER_URL = "redis://:password@hostname:port/db_number"

Muss im Format eingestellt sein. Ich habe mein Wissen über HTTP verschwendet, damit? Kann ich das Passwort in die URI aufnehmen? Ich dachte, aber als ich mir die interne Implementierung ansah, wurde die URI intern ordnungsgemäß analysiert.

Schließlich

Die interne Implementierung von Sellerie war unerwartet kompliziert und schwer zu lesen. Die Azure-Dokumentation enthält außerdem Verwenden des Azure Redis-Cache mit Python.

Standardmäßig sind Nicht-SSL-Ports für neue Azure Redis Cache-Instanzen deaktiviert, da einige Redis-Clients SSL nicht unterstützen. Zum Zeitpunkt dieses Schreibens unterstützt der Redispy-Client SSL nicht.

In Bezug auf das Festschreibungsprotokoll unterstützt redis-py jedoch SSL ab 2014. Ich möchte, dass Sie die alte Beschreibung aktualisieren. Es ist ziemlich verwirrend.

Referenz-URL

Recommended Posts

Verwenden Sie SSL mit Sellerie + Redis
Verwenden Sie mecab-ipadic-neologd mit igo-python
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
Verwenden Sie pipdeptree mit virtualenv
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mock mit Pytest
Verwenden Sie den Indikator mit pd.merge
Verwenden Sie Gentelella mit Django
Verwenden Sie Mecab mit Python 3
Verwenden Sie DynamoDB mit Python
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Verwenden Sie TypeScript mit Django-Kompressor
Verwenden Sie WENIGER mit Django
Verwenden Sie MySQL mit Django
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Verwenden Sie nim mit Jupyter
[Amsel-Redis] Überwachen Sie Redis mit Amsel
Verwenden Sie die Trello-API mit Python
Verwenden Sie gemeinsam genutzten Speicher mit gemeinsam genutzten Bibliotheken
Verwenden Sie benutzerdefinierte Tags mit PyYAML
Verwenden Sie Richtungsdiagramme mit networkx
Verwenden Sie TensorFlow mit Intellij IDEA
Verwenden Sie DATE_FORMAT mit dem SQLAlchemy-Filter
Verwenden Sie TUN / TAP mit Python
Verwenden Sie sqlite3 mit NAO (Pepper)
Verwenden Sie die load_extensions von sqlite mit Pyramid
Verwenden Sie Windows 10-Schriftarten mit WSL
Verwendung von Chainer mit Jetson TK1
Verwenden Sie Cython mit Jupyter Notebook
Verwenden Sie Maxout + CNN mit Pylearn2
Verwenden Sie WDC-433SU2M2 mit Manjaro Linux
Verwenden Sie OpenBLAS mit numpy, scipy
Verwenden Sie die Unterschall-API mit Python3
Verwenden von Sonicwall NetExtener mit Systemd
Verwenden Sie prefetch_related bequem mit Django
Verwenden Sie einen AWS-Interpreter mit Pycharm
Verwenden von Bokeh mit IPython Notebook
Verwenden Sie Python-ähnliche Bereiche mit Rust
Verwenden Sie MLflow mit Databricks ④ - Anrufmodell -
Behandeln Sie Base91-Schlüssel mit Python + Redis.
Verwenden Sie pyright mit CentOS7, emacs lsp-mode
Python: So verwenden Sie Async mit
Verwenden der SQL-Datenbank von Azure mit SQL Alchemy
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie PX-S1UD / PX-Q1UD mit Jetson Nano
Verwenden Sie die Vorschaufunktion mit aws-cli
So verwenden Sie virtualenv mit PowerShell
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Verwenden Sie rospy mit virtualenv in Python3
Markdown mit Jupyter-Notebook verwenden (mit Verknüpfung)
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!