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.
Inhalt
- Testen von DAGs mit dem Amazon MWAA CLI Utility
- Installation von Python-Abhängigkeiten mit dem PyPi .org-Anforderungsdateiformat
- Aktivieren von Protokollen auf der Amazon MWAA-Konsole
- Protokolle in der CloudWatch Logs-Konsole anzeigen
- Fehler in der Apache Airflow-Benutzeroberfläche anzeigen
- Beispielszenarien requirements.txt
Testen von DAGs mit dem Amazon MWAA CLI Utility
-
Das Befehlszeilenschnittstellenprogramm (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. Auf diese Weise können Sie eine lokale Apache Airflow-Umgebung ausfü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-local-runner
on. 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
Option eins: Python-Abhängigkeiten aus dem Python-Paketindex
Im folgenden Abschnitt wird beschrieben, wie Python-Abhängigkeiten aus dem Python-Paketindexrequirements.txt
Datei angegeben werden.
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 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 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 die einzelnen Container instanziiert werden.
Wir empfehlen die folgenden Methoden, um Python-Abhängigkeiten aus einem Python-Radarchiv (.whl
) in Ihrem zu installierenrequirements.txt
.
Methoden
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 von Amazon MWAA *
pip3 install -r requirements.txt
für 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 DAGs schreiben, keinen Zugriff gewähren möchten. Zum Beispiel Raddateien für die Python-Bibliothek, Zertifikats-PEM-Dateien und YAML-Konfigurationsdateien.
Im folgenden Abschnitt wird beschrieben, wie Sie ein Rad, das sich in der plugins.zip
Datei befindet, in Ihrem Amazon S3 S3-Bucket installieren.
-
Laden Sie die erforderlichen WHL-Dateien herunter, die Sie
pip download
mit Ihrem requirements.txt
auf Amazon MWAA vorhandenen Local-Runneroder einem anderen Amazon Linux 2-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" * -
Geben Sie den Pfad in Ihrem an.
requirements.txt
Geben Sie das Plugins-Verzeichnis oben in Ihrer Datei requirements.txt an--find-links
und 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 demplugins
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 an
requirements.txt
.Beispiel Radarchiv auf einer öffentlichen 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 der von Ihnen angegebenen URL ab und installiert es in Ihrer Umgebung.
Anmerkung
Auf URLs kann nicht von privaten Webservern aus zugegriffen werden, die die Installationsanforderungen in Amazon MWAA v2.2.2 und höher erfüllen.
Erstellen von WHL-Dateien aus einer 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 die folgende DAG verwenden, um Ihre bestehenden Amazon MWAA-Anforderungen zu übernehmen und sie auf Amazon S3 zu packen:
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}
" )
Nachdem Sie die DAG ausgeführt haben, verwenden Sie diese neue Datei als Amazon MWAAplugins.zip
, optional im Paket mit anderen Plug-ins. Aktualisieren Sie dann Ihre vorherige Version requirements.txt
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 einer privaten URL mit Authentifizierung gehostet wird.
-
Fügen Sie Ihren Benutzernamen und Ihr Passwort als Apache Airflow-Konfigurationsoptionen hinzu. Beispielsweise:
-
foo.user
:YOUR_USER_NAME
-
foo.pass
:YOUR_PASSWORD
-
-
Erstellen Sie Ihre
requirements.txt
Datei. Ersetzen Sie die Platzhalter im folgenden Beispiel durch Ihre private URL sowie den Benutzernamen und das Passwort, die Sie als Apache Airflow-Konfigurationsoptionen hinzugefügt haben. Beispielsweise:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
-
Fügen Sie Ihrer Datei weitere Bibliotheken hinzu
requirements.txt
. Beispielsweise:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3
Aktivieren von Protokollen auf der Amazon MWAA-Konsole
Die Ausführungsrolle für Ihre Amazon MWAA-Umgebung benötigt die Erlaubnis, Protokolle an Logs zu CloudWatch senden. Informationen zum Aktualisieren der Berechtigungen einer Ausführungsrolle finden Sie unter. Amazon MWAA-Ausführungsrolle
Sie können Apache Airflow-Protokolle auf der CRITICAL
EbeneINFO
, WARNING
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 der INFO
Ebene aktivieren, sendet Amazon MWAA INFO
Protokolle und WARNING
ERROR
, und Protokollebenen an CRITICAL
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.](images/mwaa-console-logs-info.png)
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 Amazon MWAA-Konsole öffnen und Apache Airflow-Protokolle in der Logs-Konsole anzeigen. CloudWatch
Um Protokolle für ein anzuzeigen requirements.txt
-
Öffnen Sie die Seite Umgebungen
auf der Amazon MWAA-Konsole. -
Wählen Sie eine Umgebung aus.
-
Wählen Sie im Bereich Überwachung die Protokollgruppe Airflow Scheduler aus.
-
Wählen Sie unter
requirements_install_ip
Log-Streams die Option Log Streams aus. -
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))
-
Sehen Sie sich die Liste der Pakete an und überprüfen Sie, 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 auf Amazon MWAA stoßen können, 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 Datei. requirements.txt
Bei Apache Airflow anmelden
Sie benötigen Zugriffsrichtlinie für die Apache Airflow-Benutzeroberfläche: AmazonMWAA Access WebServer 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
-
Öffnen Sie die Seite Umgebungen
auf der Amazon MWAA-Konsole. -
Wählen Sie eine Umgebung aus.
-
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 eine öffentliche URL
Sie müssen --index-url
diese Option verwenden, wenn Sie Pakete von PyPi .org angeben, zusätzlich zu Paketen auf einer öffentlichen URL, wie z. B. benutzerdefinierte PEP 503-konforme Repo-URLs.
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib