Blog

Höhepunkte der Apache Airflow 1.10.10 Version

Aktualisiert Oktober 21, 2025
6 Minuten

Airflow 1.10.10 wurde am 9. April veröffentlicht und in diesem Blogbeitrag möchte ich auf einige interessante Funktionen hinweisen. Airflow 1.10.10 kann wie gewohnt mit installiert werden:

pip install apache-airflow==1.10.10

Die Version 1.10.10 von Airflow enthält eine große Anzahl von Fehlerkorrekturen, Verbesserungen der Benutzeroberfläche, Leistungssteigerungen, neue Funktionen und mehr. Für mich persönlich sind dies die wichtigsten Highlights der Apache Airflow 1.10.10 Version:

  • Vermeiden Sie die Erstellung von Standardverbindungen
  • Veröffentlichung des Airflow Docker Images
  • Eine generische Schnittstelle zum Abrufen von Geheimnissen, sowie mehrere Implementierungen
  • Der Webserver ist nicht mehr auf den DAG-Ordner angewiesen
  • Zwei bemerkenswerte UI-Funktionen:
    • Eine Zeitzonenauswahl zur Anzeige Ihrer gewünschten Zeitzone
    • Wenn Sie einen DagRun von der Benutzeroberfläche aus starten, können Sie jetzt eine JSON-Konfiguration angeben

Beachten Sie, dass alle Änderungen an der Benutzeroberfläche nur auf die RBAC-Oberfläche angewendet werden. Die "Standard"-Schnittstelle ist veraltet und neue Änderungen werden nur auf die RBAC-Schnittstelle angewandt. In Airflow 2.0 wird die Standardschnittstelle entfernt und die RBAC-Schnittstelle wird die neue Standardschnittstelle sein. Um die Änderungen der Benutzeroberfläche in Airflow 1.10.10 sehen und nutzen zu können, müssen Sie daher die RBAC-Schnittstelle aktivieren:

export AIRFLOW__WEBSERVER__RBAC=True

Eine leere Airflow-Installation enthält keine Standardbenutzer. Um einen Benutzer hinzuzufügen, der sich nur umschaut, können Sie einen Benutzer mit Administratorrechten anlegen:

airflow create_user --role Admin --username airflow --password airflow -e airflow@airflow.com -f airflow -l airflow

Damit wird ein Benutzer mit dem Benutzernamen airflow, dem Passwort airflow angelegt.

Vermeiden Sie die Erstellung von Standardverbindungen

Airflow verfügt schon seit langem über einen Schalter, um Beispiel-DAGs nicht zu laden: AIRFLOW__CORE__LOAD_EXAMPLES. Für Beispielverbindungen gab es jedoch bisher keine solche Umschaltmöglichkeit: . Der Standardwert ist True, Sie müssen ihn also noch explizit auf False setzen.

Ich denke, dies war eine oft geforderte Funktion und die Standardverbindungen haben mehr als einmal zu unerwartetem Verhalten geführt, daher freue ich mich über diese Umschaltmöglichkeit.

Veröffentlichung des Airflow Docker Images

Airflow bietet jetzt eine Reihe von Docker-Images für die Produktion:

docker run apache/airflow:1.10.10

Standardmäßig wird Python 3.6 verwendet, aber es sind auch andere Versionen verfügbar:

  • apache/airflow:1.10.10-python2.7
  • apache/airflow:1.10.10-python3.5
  • apache/airflow:1.10.10-python3.6
  • apache/airflow:1.10.10-python3.7

Das Image ist nicht für Demonstrationszwecke gedacht. Wenn Sie apache/airflow:1.10.10 ausführen, wird die Airflow CLI-Hilfe angezeigt. Es enthält keine Funktion, mit der Sie sowohl den Webserver als auch den Scheduler in einem einzigen Image ausführen können, um sich umzusehen. Die Images sind für den Einsatz in einer Produktionsumgebung gedacht, z.B. mit einer Postgres-Datenbank und einem Image, auf dem der Webserver und eines, auf dem der Scheduler läuft. Weitere Informationen über die Verwendung dieser Docker-Images finden Sie auf Github using-the-images.

Eine generische Schnittstelle zum Abrufen von Geheimnissen, sowie mehrere Implementierungen

Die bisherige Methode zum Speichern und Verwenden von Geheimnissen waren die Airflow-Variablen und -Verbindungen, die geheime Werte innerhalb des Airflow-Metaspeichers speichern. In vielen Situationen war dies nicht wünschenswert, da viele Unternehmen bereits ein anderes System für die Speicherung von Anmeldeinformationen verwenden, z.B. AWS SSM, wenn Sie auf AWS arbeiten. Dies stellte eine Herausforderung dar und solche Geheimnisse wurden Airflow oft über Umgebungsvariablen zur Verfügung gestellt, z.B. AIRFLOW_CONN_SUPERSECRET=[AWS SSM secret inserted].

Die Umgebungsvariablen secrets waren leicht lesbar und erforderten eine Menge Konfiguration, so dass dies nicht ideal war. In Airflow 1.10.10 wurde eine generische Schnittstelle für die Kommunikation mit Anbietern von Geheimnissen hinzugefügt und mehrere Implementierungen wurden hinzugefügt:

  1. AWS SSM (Parameter-Speicher)
  2. GCP Secrets Manager
  3. HashiCorp Tresor

Um ein Secrets-Backend zu konfigurieren, konfigurieren Sie den Abschnitt Secrets in der Airflow-Konfiguration. Nehmen Sie zum Beispiel AWS SSM:

export AIRFLOW__SECRETS__BACKEND=airflow.contrib.secrets.aws_systems_manager.SystemsManagerParameterStoreBackend
export AIRFLOW__SECRETS__BACKEND_KWARGS='{"connections_prefix": "/airflow/connections", "variables_prefix": "/airflow/variables", "profile_name": "aws_profile_name_in_config"}'

Es kann nur ein einziges Geheimnisse-Backend konfiguriert werden. Die Suchreihenfolge ist:

  1. Konfigurierte Geheimnisse Backend
  2. Umgebungsvariablen
  3. Luftstrom-Metaspeicher

Hinweis: Das AWS SSM Secrets Backend funktioniert derzeit nur mit unverschlüsselten Geheimnissen! Kwargs, z.B. zum Setzen des KMS-Entschlüsselungsschlüssels, werden nicht an den eigentlichen get_parameter -Aufruf an AWS weitergegeben, aber ich erwarte, dass dies bald behoben wird. Obwohl ich diese Funktion nach wie vor für sehr nützlich halte, besteht derzeit die einzige Möglichkeit (speziell für AWS SSM) darin, einen unverschlüsselten String-Wert zu speichern:

Luftstrom AWS SSM Geheimnis

Die Verbindung kann nun wie gewohnt angefordert werden:

from airflow.hooks.base_hook import BaseHook
myconn = BaseHook.get_connection("test")
print(myconn.host)
# myhost

Weitere Einzelheiten finden Sie hier: Alternatives Geheimnisse Backend verwenden

Der Webserver ist nicht mehr auf den DAG-Ordner angewiesen

Eines der merkwürdigeren Dinge beim Einrichten von Airflow ist die Tatsache, dass alle Airflow-Prozesse Zugriff auf den DAG-Ordner benötigen. Wenn Sie Airflow auf verschiedenen Rechnern oder in Containern ausführen, führt dies zu allen möglichen kreativen Lösungen, um die DAG-Dateien sowohl für den Webserver als auch für den Scheduler verfügbar zu machen.

Es wurden mehrere Änderungen an der Persistenz des DAG-Codes in der Datenbank vorgenommen, mit dem Ziel, dass der Webserver die Metadaten nur aus der Datenbank liest und anzeigt und nicht aus den DAG-Dateien selbst. Dies sollte zu einer einzigen Quelle der Wahrheit für den Webserver führen und dem Benutzer einen konsistenten Zustand anzeigen.

Das komplette Skript, in dem ein DAG definiert ist, kann nun im Metaspeicher in einer Tabelle namens DagCode gespeichert werden. Konfigurieren Sie dazu Airflow mit AIRFLOW__CORE__STORE_DAG_CODE=True (plus AIRFLOW__CORE__STORE_SERIALIZED_DAGS=True zur Serialisierung der DAGs als JSON in der Datenbank). Jetzt liest der Webserver alles aus dem Metaspeicher und benötigt keinen Zugriff mehr auf den DAGs-Ordner.

Es gibt zwei Anmerkungen zu erwähnen:

  1. Es gibt einen Fehler, durch den der DagCode-Wert nicht aktualisiert wird, wenn die Änderung innerhalb von zwei Minuten nach der letzten Änderung vorgenommen wurde. Die serialisierte DAG wird jedoch aktualisiert, was sich in allen Ansichten außer der Code-Ansicht widerspiegelt. Der Fehler ist bereits behoben und wird wahrscheinlich in der nächsten Version enthalten sein: Behebung der Nicht-Aktualisierung von DAG-Code durch Überprüfung der letzten Änderungszeit #8266.
  2. In der Konfiguration von Airflow wird der Wert AIRFLOW__CORE__STORE_DAG_CODE aus AIRFLOW__CORE__STORE_SERIALIZED_DAGS interpoliert. Die Interpolation schlägt jedoch fehl, wenn Sie Umgebungswerte verwenden. Stellen Sie daher sicher, dass Sie AIRFLOW__CORE__STORE_DAG_CODE explizit einstellen. Fehlerbericht eingereicht: Interpolation von Konfigurationswerten funktioniert nicht, wenn sie als Umgebungsvariable gesetzt sind #8255.

Eine Zeitzonenauswahl zur Anzeige Ihrer gewünschten Zeitzone

Die Webserver-Benutzeroberfläche verfügt jetzt über eine Zeitzonenauswahl, mit der Sie alle Zeiten in der Benutzeroberfläche in Ihrer bevorzugten Zeitzone anzeigen lassen können:

Auswahl der Zeitzone

Sie enthält eine Liste mit drei Zeitzonen:

  1. UTC-Zeit
  2. Die lokale Zeitzone Ihres Rechners
  3. Eine ausgewählte Zeitzone

Sie können jede gewünschte Zeitzone im Feld "Andere" auswählen, indem Sie den Namen der gewünschten Stadt eingeben:

Wenn Sie einen DagRun von der Benutzeroberfläche aus starten, können Sie jetzt eine JSON-Konfiguration angeben

Die letzte erwähnenswerte Funktion ist die Möglichkeit, beim manuellen Auslösen eines DagRun eine JSON-Konfiguration hinzuzufügen:

Dieses JSON steht im Kontext der Aufgabeninstanz über dag_run.conf zur Verfügung. Dies kann ein bequemer Weg sein, um parametrisierte DAGs zu erstellen.

Das sind die Highlights dieser Version. Sprechen Sie uns gerne auf alles an, was mit Airflow zu tun hat!

Contact

Let’s discuss how we can support your journey.