View a markdown version of this page

Verwaltung von Python-Abhängigkeiten in requirements.txt - Von Amazon verwaltete Workflows für Apache Airflow

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwaltung von Python-Abhängigkeiten in requirements.txt

In diesem Thema wird beschrieben, wie Python-Abhängigkeiten in einer requirements.txt Datei für eine Amazon Managed Workflows for Apache Airflow-Umgebung installiert und verwaltet werden.

Testen von DAGs mit dem Amazon MWAA-CLI-Hilfsprogramm

  • Das Befehlszeilenschnittstellen-Dienstprogramm (CLI) repliziert eine Amazon Managed Workflows for Apache Airflow-Umgebung lokal.

  • Die CLI erstellt lokal ein Docker-Container-Image, das einem Amazon MWAA-Produktionsimage ähnelt. Sie können dies verwenden, um eine lokale Apache Airflow-Umgebung auszuführen, um DAGs, benutzerdefinierte Plugins und Abhängigkeiten zu entwickeln und zu testen, bevor Sie sie auf Amazon MWAA bereitstellen.

  • Informationen zum Ausführen der CLI finden Sie unter aws-mwaa-docker-images on. https://github.com/aws/amazon-mwaa-docker-images GitHub

Installation von Python-Abhängigkeiten mithilfe des Anforderungsdateiformats PyPi.org

Im folgenden Abschnitt werden die verschiedenen Möglichkeiten zur Installation von Python-Abhängigkeiten gemäß dem PyPi.org Anforderungsdateiformat beschrieben.

Option eins: Python-Abhängigkeiten aus dem Python-Paketindex

Der folgende Abschnitt beschreibt, wie Sie Python-Abhängigkeiten aus dem Python-Paketindex in einer requirements.txt Datei angeben.

Apache Airflow v3
  1. Lokal testen. Fügen Sie iterativ weitere Bibliotheken hinzu, um die richtige Kombination von Paketen und ihren Versionen zu finden, bevor Sie eine requirements.txt Datei erstellen. Informationen zum Ausführen des Amazon MWAA-CLI-Dienstprogramms finden Sie unter aws-mwaa-docker-images on. GitHub

  2. Sehen Sie sich die Extras des Apache Airflow-Pakets an. Eine Liste der Pakete, die für Apache Airflow v3 auf Amazon MWAA installiert sind, finden Sie auf der Website unter requirements.txt aws-mwaa-docker-images. GitHub

  3. Fügen Sie eine Einschränkungsanweisung hinzu. Fügen Sie die Einschränkungsdatei für Ihre Apache Airflow v3-Umgebung am Anfang Ihrer requirements.txt Datei hinzu. Die Apache Airflow-Einschränkungsdateien geben die Provider-Versionen an, die zum Zeitpunkt einer Apache Airflow-Version verfügbar sind.

    Ersetzen Sie im folgenden Beispiel {environment-version} durch die Versionsnummer Ihrer Umgebung und durch die Version von Python, die {Python-version} mit Ihrer Umgebung kompatibel ist.

    Informationen über die Version von Python, die mit Ihrer Apache Airflow-Umgebung kompatibel ist, finden Sie unter Apache Airflow-Versionen.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Wenn die Constraints-Datei feststellt, dass das xyz==1.0 Paket nicht mit anderen Paketen in Ihrer Umgebung kompatibel ist, pip3 install wird nicht verhindert, dass inkompatible Bibliotheken in Ihrer Umgebung installiert werden. Wenn die Installation eines Pakets fehlschlägt, können Sie auf die Fehlerprotokolle für jede Apache Airflow-Komponente (den Scheduler, den Worker und den Webserver) im entsprechenden Log-Stream unter Logs zugreifen. CloudWatch Weitere Informationen zu Protokolltypen finden Sie unter. Zugreifen auf Airflow-Protokolle in Amazon CloudWatch

  4. Apache Airflow-Pakete. Fügen Sie die Paket-Extras und die Version (==) hinzu. Dies hilft zu verhindern, dass Pakete mit demselben Namen, aber unterschiedlicher Version, in Ihrer Umgebung installiert werden.

    apache-airflow[package-extra]==2.5.1
  5. Python-Bibliotheken. Fügen Sie den Paketnamen und die Version (==) in Ihre requirements.txt Datei ein. Auf diese Weise wird verhindert, dass ein zukünftiges PyPi.org aktuelles Update automatisch angewendet wird.

    library == version
    Beispiel Boto3 und psycopg2-binary

    Dieses Beispiel dient zu Demonstrationszwecken. Die Bibliotheken boto und psycopg2-binary sind in der Basisinstallation für Apache Airflow v3 enthalten und müssen nicht in einer Datei angegeben werden. requirements.txt

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Wenn ein Paket ohne Version angegeben wird, installiert Amazon MWAA die neueste Version des Pakets von. PyPi.org Diese Version kann zu Konflikten mit anderen Paketen in Ihrem führen. requirements.txt

Apache Airflow v2
  1. Lokal testen. Fügen Sie iterativ weitere Bibliotheken hinzu, um die richtige Kombination von Paketen und ihren Versionen zu finden, bevor Sie eine requirements.txt Datei erstellen. Informationen zum Ausführen des Amazon MWAA-CLI-Dienstprogramms finden Sie unter aws-mwaa-docker-images on. GitHub

  2. Sehen Sie sich die Extras des Apache Airflow-Pakets an. Um auf eine Liste der Pakete zuzugreifen, die für Apache Airflow v2 auf Amazon MWAA installiert sind, rufen Sie auf der Website requirements.txt aws-mwaa-docker-images auf. GitHub

  3. Fügen Sie eine Einschränkungsanweisung hinzu. Fügen Sie die Einschränkungsdatei für Ihre Apache Airflow v2-Umgebung am Anfang Ihrer requirements.txt Datei hinzu. Apache Airflow-Einschränkungsdateien geben die Provider-Versionen an, die zum Zeitpunkt einer Apache Airflow-Version verfügbar sind.

    Ab Apache Airflow v2.7.2 muss Ihre Anforderungsdatei eine Erklärung enthalten. --constraint Wenn Sie keine Einschränkung angeben, wird Amazon MWAA eine für Sie angeben, um sicherzustellen, dass die in Ihren Anforderungen aufgeführten Pakete mit der Version von Apache Airflow kompatibel sind, die Sie verwenden.

    Ersetzen Sie im folgenden Beispiel durch {environment-version} die Versionsnummer Ihrer Umgebung und durch die Version von Python, die {Python-version} mit Ihrer Umgebung kompatibel ist.

    Informationen über die Version von Python, die mit Ihrer Apache Airflow-Umgebung kompatibel ist, finden Sie unter Apache Airflow-Versionen.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Wenn die Constraints-Datei feststellt, dass das xyz==1.0 Paket nicht mit anderen Paketen in Ihrer Umgebung kompatibel ist, pip3 install wird nicht verhindert, dass inkompatible Bibliotheken in Ihrer Umgebung installiert werden. Wenn die Installation eines Pakets fehlschlägt, können Sie auf die Fehlerprotokolle für jede Apache Airflow-Komponente (den Scheduler, den Worker und den Webserver) im entsprechenden Log-Stream unter Logs zugreifen. CloudWatch Weitere Informationen zu Protokolltypen finden Sie unter. Zugreifen auf Airflow-Protokolle in Amazon CloudWatch

  4. Apache Airflow-Pakete. Fügen Sie die Paket-Extras und die Version (==) hinzu. Dies hilft zu verhindern, dass Pakete mit demselben Namen, aber unterschiedlicher Version, in Ihrer Umgebung installiert werden.

    apache-airflow[package-extra]==2.5.1
  5. Python-Bibliotheken. Fügen Sie den Paketnamen und die Version (==) in Ihre requirements.txt Datei ein. Auf diese Weise wird verhindert, dass ein zukünftiges PyPi.org aktuelles Update automatisch angewendet wird.

    library == version
    Beispiel Boto3 und psycopg2-binary

    Dieses Beispiel dient zu Demonstrationszwecken. Die Bibliotheken boto und psycopg2-binary sind in der Apache Airflow v2-Basisinstallation enthalten und müssen nicht in einer Datei angegeben werden. requirements.txt

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Wenn ein Paket ohne Version angegeben wird, installiert Amazon MWAA die neueste Version des Pakets von. PyPi.org Diese Version kann zu Konflikten mit anderen Paketen in Ihrem führen. requirements.txt

Option zwei: Python-Räder (.whl)

Ein Python-Rad ist ein Paketformat, das entwickelt wurde, um Bibliotheken mit kompilierten Artefakten auszuliefern. Wheel-Pakete als Methode zur Installation von Abhängigkeiten in Amazon MWAA bieten mehrere Vorteile:

  • Schnellere Installation — Die WHL-Dateien werden als einzelne ZIP-Datei in den Container kopiert und dann lokal installiert, ohne dass jede einzelne Datei heruntergeladen werden muss.

  • Weniger Konflikte — Sie können die Versionskompatibilität Ihrer Pakete im Voraus ermitteln. Daher müssen kompatible Versionen nicht rekursiv ausgearbeitet werden. pip

  • Höhere Stabilität — Bei extern gehosteten Bibliotheken können sich die nachgelagerten Anforderungen ändern, was zu einer Versionsinkompatibilität zwischen Containern in einer Amazon MWAA-Umgebung führt. Da Abhängigkeiten nicht von einer externen Quelle abhängig sind, verfügt jeder Container über dieselben Bibliotheken, unabhängig davon, wann jeder Container instanziiert wird.

Wir empfehlen die folgenden Methoden, um Python-Abhängigkeiten aus einem Python-Wheel-Archiv (.whl) in Ihrem zu installieren. requirements.txt

Verwenden Sie die Datei plugins.zip in einem Amazon S3-Bucket

Der Apache Airflow-Scheduler, die Worker und der Webserver (für Apache Airflow v2.2.2 und höher) suchen beim Start auf dem AWS verwalteten Fargate-Container für Ihre Umgebung unter. /usr/local/airflow/plugins/* Dieser Prozess beginnt vor Amazon MWAAs für Python-Abhängigkeiten und dem Start des Apache Airflow-Dienstes. pip3 install -r requirements.txt Eine plugins.zip Datei kann für alle Dateien verwendet werden, die während der Ausführung der Umgebung nicht ständig geändert werden sollen oder für die Sie Benutzern, die DAGs schreiben, keinen Zugriff gewähren möchten. Zum Beispiel Wheel-Dateien der Python-Bibliothek, PEM-Dateien für Zertifikate und YAML-Konfigurationsdateien.

Im folgenden Abschnitt wird beschrieben, wie Sie ein Rad installieren, das in der plugins.zip Datei in Ihrem Amazon S3-Bucket enthalten ist.

  1. Laden Sie die erforderlichen WHL-Dateien herunter. Sie können pip download mit Ihrem requirements.txt auf Amazon MWAA vorhandenen aws-mwaa-docker-images oder einem anderen Amazon Linux 2-Container verwenden, um die erforderlichen Python-Wheel-Dateien aufzulösen und herunterzuladen.

    pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins" cd "$AIRFLOW_HOME/plugins" zip "$AIRFLOW_HOME/plugins.zip" *
  2. Geben requirements.txt Sie den Pfad in Ihrem an. Geben Sie das Plugins-Verzeichnis oben in Ihrer requirements.txt an --find-links und weisen Sie an, es pip nicht aus anderen Quellen zu installieren --no-index, wie im folgenden Code aufgeführt:

    --find-links /usr/local/airflow/plugins --no-index
    Beispiel Rad in requirements.txt

    Im folgenden Beispiel wird davon ausgegangen, dass Sie das Rad in eine plugins.zip Datei im Stammverzeichnis Ihres Amazon S3-Buckets hochgeladen haben. Beispiel:

    --find-links /usr/local/airflow/plugins --no-index numpy

    Amazon MWAA ruft das numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl Rad aus dem plugins Ordner ab und installiert es in Ihrer Umgebung.

Verwenden einer WHL-Datei, die auf einer URL gehostet wird

Im folgenden Abschnitt wird beschrieben, wie Sie ein Rad installieren, das auf einer URL gehostet wird. Die URL muss entweder öffentlich zugänglich sein oder von der benutzerdefinierten Amazon VPC aus zugänglich sein, die Sie für Ihre Amazon MWAA-Umgebung angegeben haben.

  • Geben Sie eine URL an. Geben Sie die URL zu einem Rad in Ihrem anrequirements.txt.

    Beispiel Radarchiv auf einer öffentlichen URL

    Das folgende Beispiel lädt ein Rad von einer öffentlichen Site herunter.

    --find-links https://files.pythonhosted.org/packages/ --no-index

    Amazon MWAA ruft das Rad von der von Ihnen angegebenen URL ab und installiert es in Ihrer Umgebung.

    Anmerkung

    Auf URLs kann von privaten Webservern aus nicht zugegriffen werden, da die Installationsanforderungen in Amazon MWAA v2.2.2 und höher installiert sind.

Erstellen einer WHL-Datei aus einer DAG

Wenn Sie über eine private Netzwerkumgebung verfügen, die Apache Airflow v2.2.2 oder höher verwendet, und Sie die Anforderungen nicht installieren können, weil Ihre Umgebung keinen Zugriff auf externe Repositorys hat, können Sie die folgende DAG verwenden, um Ihre bestehenden Amazon MWAA-Anforderungen zu übernehmen und sie auf Amazon S3 zu verpacken:

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago S3_BUCKET = 'my-s3-bucket' S3_KEY = 'backup/plugins_whl.zip' with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://amzn-s3-demo-bucket/{S3_KEY}" )

Nachdem Sie die DAG ausgeführt haben, verwenden Sie diese neue Datei als Amazon MWAAplugins.zip, optional im Paket mit anderen Plugins. Aktualisieren Sie dann Ihr requirements.txt vorheriges --find-links /usr/local/airflow/plugins und --no-index ohne es hinzuzufügen. --constraint

Mit dieser Methode können Sie dieselben Bibliotheken offline verwenden.

Option drei: Python-Abhängigkeiten, die auf einem privaten PyPi/PEP-503 kompatiblen Repo gehostet werden

Im folgenden Abschnitt wird beschrieben, wie Sie ein Apache Airflow-Extra installieren, das auf einer privaten URL mit Authentifizierung gehostet wird.

  1. Fügen Sie Ihren Benutzernamen und Ihr Passwort als Apache Airflow-Konfigurationsoptionen hinzu. Beispiel:

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. Erstellen Sie Ihre requirements.txt Datei. Ersetzen Sie die Platzhalter im folgenden Beispiel durch Ihre private URL und den Benutzernamen und das Passwort, die Sie als Apache Airflow-Konfigurationsoptionen hinzugefügt haben. Beispiel:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. Fügen Sie Ihrer Datei weitere Bibliotheken hinzurequirements.txt. Beispiel:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3

Protokolle auf der Amazon MWAA-Konsole aktivieren

Die Ausführungsrolle für Ihre Amazon MWAA-Umgebung benötigt die Erlaubnis, Protokolle an Logs zu senden. CloudWatch Informationen zum Aktualisieren der Berechtigungen einer Ausführungsrolle finden Sie unter. Amazon MWAA-Ausführungsrolle

Sie können Apache Airflow-Logs auf der CRITICAL Ebene INFOWARNING,ERROR, oder aktivieren. Wenn Sie eine Protokollebene wählen, sendet Amazon MWAA Protokolle für diese Stufe und alle höheren Schweregrade. Wenn Sie beispielsweise Protokolle auf dieser INFO Ebene aktivieren, sendet Amazon MWAA INFO Protokolle und WARNINGERROR, und Log-Levels an CRITICAL Logs. CloudWatch Wir empfehlen, die Apache Airflow-Protokolle auf der INFO Ebene zu aktivieren, auf der der Scheduler auf die für die empfangenen Protokolle zugreifen kann. requirements.txt

Dieses Bild zeigt, wie Protokolle auf der INFO-Ebene aktiviert werden.

Zugreifen auf Protokolle in der CloudWatch Logs-Konsole

Sie können auf die Apache Airflow-Protokolle zugreifen, damit der Scheduler Ihre Workflows plant und Ihren Ordner analysiert. dags In den folgenden Schritten wird beschrieben, wie Sie die Protokollgruppe für den Scheduler auf der Amazon MWAA-Konsole öffnen und in der Logs-Konsole auf die Apache Airflow-Protokolle zugreifen. CloudWatch

So greifen Sie auf Protokolle für eine Datei requirements.txt zu
  1. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  2. Wählen Sie eine Umgebung aus.

  3. Wählen Sie im Bereich Überwachung die Airflow Scheduler-Protokollgruppe aus.

  4. Wählen Sie das requirements_install_ip Log in Log Streams aus.

  5. Weitere Informationen finden Sie in der Liste der Pakete, die in der Umgebung unter installiert wurden/usr/local/airflow/.local/bin. Beispiel:

    Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1)) Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
  6. Prüfen Sie die Liste der Pakete und ob bei einem dieser Pakete während der Installation ein Fehler aufgetreten ist. Wenn etwas schief gelaufen ist, kann es zu einer Fehlermeldung ähnlich der folgenden kommen:

    2021-03-05T14:34:42.731-07:00 No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4)) No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))

Zugriff auf Fehler in der Apache Airflow-Benutzeroberfläche

Sie können auch Ihre Apache Airflow-Benutzeroberfläche überprüfen, um festzustellen, ob ein Fehler mit einem anderen Problem zusammenhängt. Der häufigste Fehler, der bei Apache Airflow auf Amazon MWAA auftreten kann, ist:

Broken DAG: No module named x

Wenn Sie diesen Fehler in Ihrer Apache Airflow-Benutzeroberfläche finden, fehlt Ihnen wahrscheinlich eine erforderliche Abhängigkeit in Ihrer Datei. requirements.txt

Loggen Sie sich bei Apache Airflow ein

Sie benötigen Zugriffsrichtlinie für die Apache Airflow UI: AmazonMWAAWebServerAccess Berechtigungen für Ihr AWS-Konto Login AWS Identity and Access Management (IAM), um auf Ihre Apache Airflow-Benutzeroberfläche zugreifen zu können.

Um auf Ihre Apache Airflow UI zuzugreifen
  1. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  2. Wählen Sie eine Umgebung aus.

  3. Wählen Sie Open Airflow UI.

Beispielszenarien für requirements.txt

Sie können verschiedene Formate in Ihrem kombinierenrequirements.txt. Das folgende Beispiel verwendet eine Kombination der verschiedenen Möglichkeiten, Extras zu installieren.

Beispiel Extras aktiviert PyPi.org und eine öffentliche URL

Sie müssen die --index-url Option verwenden, wenn Sie Pakete von angeben PyPi.org, zusätzlich zu Paketen auf einer öffentlichen URL, z. B. benutzerdefinierten PEP 503-kompatiblen Repo-URLs.

aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib