Verwaltung von Python-Abhängigkeiten in requirements.txt - Amazon Managed 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

Auf dieser Seite werden die bewährten Methoden beschrieben, die wir für die Installation und Verwaltung von Python-Abhängigkeiten in einer requirements.txt Datei für eine Amazon Managed Workflows for Apache Airflow-Umgebung empfehlen.

Testen DAGs mit dem MWAA CLI Amazon-Hilfsprogramm

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

  • Das CLI erstellt lokal ein Docker-Container-Image, das einem MWAA Amazon-Produktions-Image ähnelt. Auf diese Weise können Sie eine lokale Apache Airflow-Umgebung ausführen, um benutzerdefinierte Plugins und Abhängigkeiten zu entwickeln und zu testenDAGs, bevor Sie sie auf Amazon MWAA bereitstellen.

  • Informationen zum CLI Ausführen von finden Sie aws-mwaa-local-runnerunter GitHub.

Installation von Python-Abhängigkeiten mit dem PyPi .org-Anforderungsdateiformat

Im folgenden Abschnitt werden die verschiedenen Möglichkeiten beschrieben, Python-Abhängigkeiten gemäß dem PyPi .org Requirements File Format zu installieren.

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

Im folgenden Abschnitt wird beschrieben, wie Python-Abhängigkeiten aus dem Python-Paketindex in einer requirements.txt Datei angegeben werden.

Apache Airflow v2
  1. Testen Sie lokal. 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 MWAA CLI Amazon-Dienstprogramms finden Sie aws-mwaa-local-runnerunter GitHub.

  2. Sehen Sie sich die Extras des Apache Airflow-Pakets an. Eine Liste der für Apache Airflow v2 bei Amazon installierten Pakete finden Sie unter Amazon MWAA MWAA Local Runner requirements.txt auf der GitHub Website.

  3. Fügen Sie eine Beschrä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 spezifizieren die Provider-Versionen, die zum Zeitpunkt einer Apache Airflow-Veröffentlichung verfügbar waren.

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

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

    Informationen zu der 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 Einschränkungsdatei feststellt, dass das xyz==1.0 Paket nicht mit anderen Paketen in Ihrer Umgebung kompatibel ist, schlägt pip3 install dies fehl, um zu verhindern, dass inkompatible Bibliotheken in Ihrer Umgebung installiert werden. Wenn die Installation eines Pakets fehlschlägt, können Sie die Fehlerprotokolle für jede Apache Airflow-Komponente (den Scheduler, den Worker und den Webserver) im entsprechenden Protokollstream unter CloudWatch Logs einsehen. Weitere Informationen zu Protokolltypen finden Sie unter. Airflow-Protokolle in Amazon anzeigen CloudWatch

  4. Apache Airflow-Pakete. Fügen Sie die Paket-Extras und die Version (==) hinzu. Dadurch wird verhindert, 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 future aktuelles Update von PyPi.org 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, MWAA installiert Amazon die neueste Version des Pakets von PyPi.org. Diese Version kann zu Konflikten mit anderen Paketen in Ihrem führenrequirements.txt.

Apache Airflow v1
  1. Testen Sie lokal. 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 MWAA CLI Amazon-Dienstprogramms finden Sie aws-mwaa-local-runnerunter GitHub.

  2. Sehen Sie sich die Extras des Airflow-Pakets an. Sehen Sie sich die Liste der für Apache Airflow v1.10.12 verfügbaren Pakete unter airflow/constraints-1.10.12/constraints-3.7.txt an. https://raw.githubusercontent.com/apache/

  3. Fügen Sie die Beschränkungsdatei hinzu. Fügen Sie die Einschränkungsdatei für Apache Airflow v1.10.12 am Anfang Ihrer Datei hinzu. requirements.txt Wenn die Einschränkungsdatei feststellt, dass das xyz==1.0 Paket nicht mit anderen Paketen in Ihrer Umgebung kompatibel ist, kann sie nicht verhindern, dass inkompatible Bibliotheken in Ihrer Umgebung installiert werden. pip3 install

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Apache Airflow v1.10.12-Pakete. Fügen Sie die Airflow-Paket-Extras und die Apache Airflow v1.10.12-Version () hinzu. == Dadurch wird verhindert, dass Pakete mit demselben Namen, aber unterschiedlicher Version in Ihrer Umgebung installiert werden.

    apache-airflow[package]==1.10.12
    Beispiel Secure Shell (SSH)

    Die folgende requirements.txt Beispieldatei wird SSH für Apache Airflow v1.10.12 installiert.

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

    library == version
    Beispiel Boto3

    Die folgende requirements.txt Beispieldatei installiert die Boto3-Bibliothek für Apache Airflow v1.10.12.

    boto3 == 1.17.4

    Wenn ein Paket ohne Version angegeben wird, MWAA installiert Amazon die neueste Version des Pakets von PyPi.org. Diese Version kann zu Konflikten mit anderen Paketen in Ihrem führenrequirements.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 bieten mehrere VorteileMWAA:

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

  • Weniger Konflikte — Sie können die Versionskompatibilität für Ihre Pakete im Voraus ermitteln. Daher ist es nicht erforderlich, rekursiv kompatible Versionen pip zu ermitteln.

  • Höhere Stabilität — Bei extern gehosteten Bibliotheken können sich die nachgelagerten Anforderungen ändern, was zu Versionsinkompatibilität zwischen Containern in einer MWAA Amazon-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-Radarchiv (.whl) in Ihrem zu installierenrequirements.txt.

Verwenden der plugins.zip Datei in einem Amazon S3 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 nach benutzerdefinierten Plugins. /usr/local/airflow/plugins/* Dieser Prozess beginnt vor den Abhängigkeiten MWAA von Amazon pip3 install -r requirements.txt for Python und dem Start des Apache Airflow-Dienstes. 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 schreibenDAGs, keinen Zugriff gewähren möchten. Zum Beispiel Raddateien, Zertifikatsdateien und PEM YAML Konfigurationsdateien der Python-Bibliothek.

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

  1. Laden Sie die erforderlichen WHL Dateien herunter, die Sie pip downloadmit Ihrem requirements.txt auf dem Amazon MWAA Local-Runner oder einem anderen Amazon Linux 2-Container vorhandenen Container verwenden können, 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 Sie den Pfad in Ihrem an. requirements.txt Geben Sie das Plugins-Verzeichnis oben in Ihrer Datei requirements.txt an --find-linksund weisen Sie an, pip keine Installation aus anderen Quellen zu verwenden --no-index, wie im Folgenden gezeigt

    --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 S3-Buckets hochgeladen haben. Beispielsweise:

    --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 einem gehostet wird URL

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

  • Geben Sie eine an URL. Stellen Sie URL das einem Rad in Ihrem zur Verfügungrequirements.txt.

    Beispiel Radarchiv öffentlich URL

    Im folgenden Beispiel wird ein Rad von einer öffentlichen Site heruntergeladen.

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

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

    Anmerkung

    URLssind nicht von privaten Webservern aus zugänglich, die die Installationsanforderungen in Amazon MWAA v2.2.2 und höher erfüllen.

Erstellen einer WHL Datei aus einem DAG

Wenn Sie einen privaten Webserver haben, der 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 wie folgt Ihre bestehenden MWAA Amazon-Anforderungen übernehmen und sie DAG auf Amazon S3 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://{S3_BUCKET}/{S3_KEY}" )

Verwenden Sie nach dem DAG Ausführen von diese neue Datei als Ihr Amazon MWAAplugins.zip, optional im Paket mit anderen Plugins. Aktualisieren Sie dann Ihre requirements.txt vorherige Version mit --find-links /usr/local/airflow/plugins und --no-index ohne Hinzufügen--constraint.

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

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

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

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

    • 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 privaten und den Benutzernamen und das PasswortURL, die Sie als Apache Airflow-Konfigurationsoptionen hinzugefügt haben. Beispielsweise:

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

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

Logs auf der MWAA Amazon-Konsole aktivieren

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

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

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

Protokolle in der CloudWatch Logs-Konsole anzeigen

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

Um Protokolle für ein anzuzeigen requirements.txt
  1. Öffnen Sie die Seite Umgebungen auf der MWAA Amazon-Konsole.

  2. Wählen Sie eine Umgebung aus.

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

  4. Wählen Sie unter requirements_install_ip Log-Streams die Option Log Streams aus.

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

    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. Überprüfen Sie die Liste der Pakete und ob bei der Installation eines dieser Pakete ein Fehler aufgetreten ist. Wenn etwas schief gelaufen ist, wird möglicherweise ein Fehler ähnlich dem folgenden angezeigt:

    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))

Fehler in der Apache Airflow-Benutzeroberfläche anzeigen

Möglicherweise möchten Sie auch Ihre Apache Airflow-Benutzeroberfläche überprüfen, um festzustellen, ob ein Fehler möglicherweise mit einem anderen Problem zusammenhängt. Der häufigste Fehler, auf den Sie bei Apache Airflow bei Amazon stoßen können, MWAA ist:

Broken DAG: No module named x

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

Bei Apache Airflow anmelden

Sie benötigen Zugriffsrichtlinie für die Apache Airflow-Benutzeroberfläche: A mazonMWAAWeb ServerAccess Berechtigungen für Ihr AWS Konto in AWS Identity and Access Management (IAM), um Ihre Apache Airflow-Benutzeroberfläche anzeigen zu können.

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

  2. Wählen Sie eine Umgebung aus.

  3. Wählen Sie „Airflow-Benutzeroberfläche öffnen“.

Beispielszenarien requirements.txt

Sie können verschiedene Formate in Ihrem kombinierenrequirements.txt. Das folgende Beispiel verwendet eine Kombination der verschiedenen Möglichkeiten zur Installation von Extras.

Beispiel Extras auf PyPi .org und in der Öffentlichkeit URL

Sie müssen --index-url diese Option verwenden, wenn Sie Pakete von PyPi .org angeben, zusätzlich zu Paketen in einem öffentlichen RepositoryURL, wie z. B. einem benutzerdefinierten PEP 503-kompatiblen RepoURLs.

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