Wie installiere ich Bibliotheken in meiner Amazon-MWAA-Umgebung?

Letzte Aktualisierung: 02.03.2022

Ich möchte Bibliotheken in meiner Amazon-MWAA-Umgebung (Amazon Managed Workflows for Apache Airflow) installieren.

Kurzbeschreibung

Wenn Sie eine Amazon-MWAA-Umgebung erstellen, sind einige grundlegende Pakete/Distributionen in derBasisinstallation von Apache Airflow enthalten. Sie können Pakete, die nicht in der Basisinstallation enthalten sind, mithilfe der Datei requirements.txt oder plugins.zip in Ihrer Amazon-MWAA-Umgebung installieren.

Standardmäßig werden Pakete aus öffentlichen Repositorys (PyPi.org) in Amazon MWAA installiert. Sie können auch Pakete aus privat gehosteten Repositorys wie JFROG und AWS CodeArtifact installieren.

Lösung

Sie können Bibliotheken entweder aus dem öffentlichen Standard-Repository (PyPi.org) oder aus privaten Repositorys installieren. Wählen Sie den Ansatz, der am besten zu Ihrem Anwendungsfall passt.

Installieren aus öffentlichen Repositorys

Zur Installation von Paketen aus dem öffentlichen Standard-Repository können Sie einfach den Paketnamen und die Version (==) in die Datei requirements.txt eintragen. Laden Sie dann die Datei requirements.txt in Ihren Amazon-S3-Bucket hoch. Geben Sie die Version dieser Datei im Feld Requirements file (Anforderungsdatei) an, wenn Sie die Umgebung mit der Amazon-MWAA-Konsole aktualisieren.

Installieren aus privaten oder lokalen Repositorys

Wenn Sie in Ihrer Umgebung keinen Internetzugang haben, um Pakete aus dem öffentlichen Repository zu installieren, können Sie Bibliotheken/angepasste Pakete aus Ihrem privat gehosteten PyPi-Repository installieren. Laden Sie dazu alle Pakete herunter und fügen Sie diese in Ihr lokales Repository ein, das JFROG, AWS CodeArtifact oder ein anderes Repository sein kann. Nachdem Sie die Pakete zum Repository hinzugefügt haben, verwenden Sie die URL des Repositorys, um diese Pakete zu importieren. Zum Importieren privater Bibliotheken geben Sie die Repository-URL (--index-url) in der Datei requirements.txt an.

Verwenden Sie eine der folgenden Optionen, um ein Paket (Beispiel: redis==3.5.3) aus Ihrem lokalen Repository zu installieren.

Wenn Sie ein privates Repository verwenden, aktualisieren Sie die Datei „requirements.txt“ so, dass sie Folgendes enthält:

--trusted-host artifactory-aws.example-org.com
--index-url https://artifactory-aws.example-org.com/artifactory/api/pypi/pypi-virtual/simple
redis==3.5.3

Wenn Sie das JFROG-Repository verwenden, aktualisieren Sie die Datei „requirements.txt“ so, dass sie Folgendes enthält:

--index-url=https://${AIRFLOW__JFROG__USER}:${AIRFLOW__JFROG__PASS}@<server-name>.jfrog.io/artifactory/api/pypi/<repository>/simple
redis==3.5.3

Sie können die --index-url auch in eine Textdatei einfügen, anstatt die URL direkt in die Datei requirements.txt aufzunehmen. Sie können die --index-url in einer Textdatei angeben (z. B. codeartifact.txt) und dann die Datei codeartifact.txt in Ihren S3-Bucket unter dem Ordner /dags hochladen.

Aktualisieren Sie dann die Datei requirements.txt, sodass sie den Pfad der Datei codeartifact.txt enthält:

-r /usr/local/airflow/dags/codeartifact.txt
<br>redis==3.5.3

Eine Anleitung für die folgenden Schritte finden Sie im Workshop „Amazon MWAA for Analytics“ unter „Privates PyPi-Repository“:

Hinweis: Diese Lösung verwendet die Datei codeartifact.txt, um —index-url anzugeben.

  • Erstellen Sie mit AWS CodeArtifact ein privates PyPi-Repository mit einer Verbindung zu einer externen Quelle.
  • Stellen Sie eine private MWAA-Umgebung ohne Verbindung zum öffentlichen Internet bereit und nutzen Sie VPC-Endpunkte zur Verbindung mit AWS CodeArtifact.
  • Erstellen Sie eine Lambda-Funktion, um das Autorisierungstoken für Ihr privates PyPi-Repository auf dem neuesten Stand zu halten.

Installieren von Paketen

Zum Installieren von Paketen aus dem öffentlichen oder privaten Repository aktualisieren Sie Ihre Umgebung, um die Datei requirement.txt einzubinden:

  1. Erstellen Sie eine lokale Kopie der Datei requirements.txt und laden Sie diese Kopie über die Amazon-S3-Konsole oder die AWS Command Line Interface (AWS CLI) in Ihren Amazon-S3-Bucket (Amazon Simple Storage Service) hoch (Beispiel: s3://beispiel-bucket/requirements.txt).
    Hinweis: Denken Sie daran, das Versioning Ihres S3-Buckets zu aktivieren.
  2. Zum Bearbeiten der Umgebung öffnen Sie die Seite Environments (Umgebungen) in der Amazon-MWAA-Konsole.
  3. Wählen Sie die Umgebung in der Liste und wählen Sie dann Edit (Bearbeiten) aus.
    Hinweis: Wenn Sie die Datei requirements.txt zum ersten Mal in Ihre Umgebung hochladen, führen Sie die Schritte 4, 5 und 6 aus. Wenn Sie die Datei bereits hochgeladen und kürzlich aktualisiert haben, führen Sie nur Schritt 6 aus.
  4. Wählen Sie auf der Seite Specify details (Details angeben) im Abschnitt DAG code in Amazon S3 (DAG-Code in Amazon S3) im FeldRequirements file - optional (Anforderungsdatei – optional) die Option Browse S3 (S3 durchsuchen) aus.
  5. Wählen Sie die Datei requirements.txt in Ihrem Amazon-S3-Bucket aus und klicken Sie dann auf Choose (Auswählen).
  6. Wählen Sie unter Choose a version (Version auswählen) im Feld Requirements file - optional (Anforderungsdatei – optional) die letzte von Ihnen hochgeladene Version aus.
  7. Wählen Sie Next (Weiter) und dann Save (Speichern) aus.

Sie können die neuen Pakete sofort nach der Aktualisierung der Umgebung verwenden.

Das Aktualisieren der Umgebung dauert 15 bis 20 Minuten. Nachdem die Umgebung aktualisiert wurde, werden die in der Datei „requirements.txt“ aufgeführten Pakete installiert. Wenn die Abhängigkeiten nicht innerhalb von 10 Minuten installiert werden, kann der AWS-Fargate-Service eine Zeitüberschreitung verursachen und versuchen, die Umgebung auf einen stabilen Zustand zurückzusetzen.

Problembehandlung beim Installationsvorgang

Wenn Sie Probleme bei der Installation dieser Pakete haben, können Sie die Protokolldatei (requirements_install_ip) in den Apache-Airflow-Worker/Scheduler-Protokollgruppen einsehen.

Wenn die Protokolldatei Fehler für die Pakete enthält, können Sie versuchen, die Pakete erneut zu installieren, indem Sie eine andere Version des Pakets hinzufügen. Eine bewährte Methode ist es, der Datei requirements.txt die Einschränkungsdatei voranzustellen.

Beispiel:

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-example-Airflow-version/constraints-3.7.txt"

Hinweis: Achten Sie darauf, example-Airflow-version durch die Versionsnummer Ihrer Umgebung ersetzen.

Wichtig: Es ist eine bewährte Methode, die Python-Abhängigkeiten mit dem Dienstprogramm „Amazon MWAA CLI“ (aws-mwaa-local-runner) zu testen, bevor Sie die Pakete in Ihrer Amazon-MWAA-Umgebung installieren.