Fehlerbehebung: DAGs, Operatoren, Verbindungen und andere Probleme in Apache Airflow v2 - 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.

Fehlerbehebung: DAGs, Operatoren, Verbindungen und andere Probleme in Apache Airflow v2

Die Themen auf dieser Seite beschreiben Lösungen für Apache Airflow v2 Python-Abhängigkeiten, benutzerdefinierte Plugins, DAGs, Operatoren, Verbindungen, Aufgaben und Webserverprobleme, die in einer Amazon Managed Workflows for Apache Airflow-Umgebung auftreten können.

Verbindungen

Das folgende Thema beschreibt die Fehler, die auftreten können, wenn Sie eine Apache Airflow-Verbindung oder eine andereAWS Datenbank verwenden.

Ich kann keine Verbindung zu Secrets Manager herstellen

Wir empfehlen die folgende Schritte:

  1. Erfahren Sie, wie Sie geheime Schlüssel für Ihre Apache Airflow-Verbindung und Variablen in erstellenKonfiguration einer Apache Airflow-Verbindung mithilfe eines Geheimnisses AWS Secrets Manager.

  2. Erfahren Sie, wie Sie den geheimen Schlüssel für eine Apache Airflow-Variable (test-variable) in verwendenMit einem geheimen Schlüssel inAWS Secrets Managerfür eine Apache Airflow-Variable.

  3. Erfahren Sie, wie Sie den geheimen Schlüssel für eine Apache Airflow-Verbindung (myconn) in verwendenMit einem geheimen Schlüssel inAWS Secrets Managerfür eine Apache Airflow-Verbindung.

Wie konfiguriere ich die Bedingungen für densecretsmanager:ResourceTag/<tag-key> Secrets Manager oder eine Ressourcenbeschränkung in meiner Ausführungsrollenrichtlinie?

Anmerkung

Gilt für Apache Airflow Version 2.0 und früher.

Aufgrund eines bekannten Problems in Apache Airflow können Sie den Zugriff auf Secrets Manager-Geheimnisse derzeit nicht einschränken, indem Sie Bedingungsschlüssel oder andere Ressourceneinschränkungen in der Ausführungsrolle Ihrer Umgebung verwenden.

Ich kann keine Verbindung zu Snowflake herstellen

Wir empfehlen die folgende Schritte:

  1. Testen Sie Ihre DAGs, benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit dem aws-mwaa-local-runneronGitHub.

  2. Fügen Sie der Datei requirements.txt für Ihre Umgebung die folgenden Einträge hinzu.

    apache-airflow-providers-snowflake==1.3.0
  3. Fügen Sie Ihrer DAG die folgenden Importe hinzu:

    from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator

Stellen Sie sicher, dass das Apache Airflow-Verbindungsobjekt die folgenden Schlüssel-Wert-Paare enthält:

  1. Conn-ID: snowflake_conn

  2. Verbindungstyp: Schneeflocke

  3. Gastgeber:<my account>. <my region if not us-west-2>.snowflakecomputing.com

  4. Schema: <my schema>

  5. Einloggen: <my user name>

  6. Passwort: ********

  7. Hafen: <port, if any>

  8. Zusätzlich:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

Beispiel:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='YOUR_ACCOUNT.YOUR_REGION.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='YOUR_ACCOUNT', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='YOUR_REGION')), ... )

Ich kann meine Verbindung in der Airflow-Benutzeroberfläche nicht sehen

Apache Airflow stellt Verbindungsvorlagen in der Apache Airflow-Benutzeroberfläche bereit. Es verwendet dies, um die Verbindungs-URI-Zeichenfolge zu generieren, unabhängig vom Verbindungstyp. Wenn eine Verbindungsvorlage in der Apache Airflow-Benutzeroberfläche nicht verfügbar ist, kann eine alternative Verbindungsvorlage verwendet werden, um eine Verbindungs-URI-Zeichenfolge zu generieren, z. B. mithilfe der HTTP-Verbindungsvorlage.

Wir empfehlen die folgende Schritte:

  1. Sehen Sie sich die von Amazon MWAA bereitgestellten Verbindungstypen in der Apache Airflow-Benutzeroberfläche unter anApache Airflow-Provider-Pakete, die in Amazon MWAA-Umgebungen installiert sind.

  2. Sehen Sie sich die Befehle zum Erstellen einer Apache Airflow-Verbindung in der CLI unter anBefehlsreferenz für Apache Airflow CLI.

  3. Erfahren Sie, wie Sie Verbindungsvorlagen in der Apache Airflow-Benutzeroberfläche synonym für Verbindungstypen verwenden, die in der Apache Airflow-Benutzeroberfläche auf Amazon MWAA nicht verfügbar sind, unterÜbersicht über Verbindungsarten.

Webserver

Das folgende Thema beschreibt die Fehler, die Sie für Ihren Apache Airflow-Webserver auf Amazon MWAA erhalten können.

Ich sehe einen 5xx-Fehler beim Zugriff auf den Webserver

Wir empfehlen die folgende Schritte:

  1. Überprüfen Sie die Konfigurationsoptionen von Apache Airflow. Stellen Sie sicher, dass die Schlüssel-Wert-Paare, die Sie als Apache Airflow-Konfigurationsoption angegeben habenAWS Secrets Manager, korrekt konfiguriert wurden. Weitere Informationen hierzu finden Sie unter Ich kann keine Verbindung zu Secrets Manager herstellen.

  2. Überprüfe dierequirements.txt. Stellen Sie sicher, dass das Airflow-Paket „Extras“ und andere in Ihrem Paket aufgelistete Bibliotheken mit Ihrer Apache Airflow-Version kompatibelrequirements.txt sind.

  3. Weitere Möglichkeiten zum Angeben von Python-Abhängigkeiten in einerrequirements.txt Datei finden Sie unterVerwaltung von Python-Abhängigkeiten in requirements.txt.

Ich sehe den Fehler „Der Scheduler scheint nicht zu laufen“

Wenn der Scheduler nicht zu laufen scheint oder der letzte „Herzschlag“ vor mehreren Stunden empfangen wurde, werden Ihre DAGs möglicherweise nicht in Apache Airflow angezeigt und neue Aufgaben werden nicht geplant.

Wir empfehlen die folgende Schritte:

  1. Vergewissern Sie sich, dass Ihre VPC-Sicherheitsgruppe eingehenden Zugriff auf den Port zulässt5432. Dieser Port wird benötigt, um eine Verbindung zur Amazon Aurora PostgreSQL-Metadatendatenbank für Ihre Umgebung herzustellen. Nachdem diese Regel hinzugefügt wurde, geben Sie Amazon MWAA ein paar Minuten, und der Fehler sollte verschwinden. Weitere Informationen hierzu finden Sie unter Sicherheit in Ihrer VPC auf Amazon MWAA.

    Anmerkung
    • Die Aurora PostgreSQL-Metadatenbank ist Teil der Amazon MWAA-Servicearchitektur und in Ihrer nicht sichtbarAWS-Konto.

    • Datenbankfehler sind in der Regel ein Symptom für einen Schedulerausfall und nicht die Hauptursache.

  2. Wenn der Scheduler nicht läuft, kann dies an einer Reihe von Faktoren liegen, z. B. an Fehlern bei der Installation von Abhängigkeiten oder einem überlasteten Scheduler. Vergewissern Sie sich, dass Ihre DAGs, Plugins und Anforderungen ordnungsgemäß funktionieren, indem Sie sich die entsprechenden Protokollgruppen unterCloudWatch Logs ansehen. Weitere Informationen hierzu finden Sie unter Überwachung und Metriken für Amazon Managed Workflows for Apache Airflow.

Aufgaben

Das folgende Thema beschreibt die Fehler, die Sie bei Apache Airflow-Aufgaben in einer Umgebung erhalten können.

Ich sehe, dass meine Aufgaben hängen bleiben oder nicht abgeschlossen werden

Wenn Ihre Apache Airflow-Aufgaben „hängen“ oder nicht abgeschlossen werden, empfehlen wir die folgenden Schritte:

  1. Es kann eine große Anzahl von DAGs definiert sein. Reduzieren Sie die Anzahl der DAGs und führen Sie ein Update der Umgebung durch (z. B. das Ändern eines Log-Levels), um einen Reset zu erzwingen.

    1. Airflow analysiert DAGs, unabhängig davon, ob sie aktiviert sind oder nicht. Wenn Sie mehr als 50% der Kapazität Ihrer Umgebung nutzen, können Sie den Apache Airflow Scheduler überfordern. Dies führt zu einer hohen Gesamtanalyse inCloudWatch Metriken oder zu langen DAG-Verarbeitungszeiten inCloudWatch Protokollen. Es gibt andere Möglichkeiten zur Optimierung von Apache Airflow-Konfigurationen, die in dieser Anleitung jedoch nicht behandelt werden.

    2. Weitere Informationen zu den bewährten Methoden, die wir empfehlen, um die Leistung Ihrer Umgebung zu optimieren, finden Sie unterLeistungsoptimierung für Apache Airflow auf Amazon MWAA.

  2. Möglicherweise befindet sich eine große Anzahl von Aufgaben in der Warteschlange. Dies wird häufig als eine große — und wachsende — Anzahl von Aufgaben im Status „Keine“ oder als große Anzahl unter Aufgaben in der Warteschlange und/oder Aufgaben, die noch ausstehen, angezeigtCloudWatch. Dies kann aus folgenden Gründen geschehen:

    1. Wenn mehr Aufgaben ausgeführt werden müssen, als die Umgebung ausführen kann, und/oder wenn eine große Anzahl von Aufgaben, die vor der automatischen Skalierung in die Warteschlange gestellt wurden, Zeit hat, die Aufgaben zu erkennen und zusätzliche Worker bereitzustellen.

    2. Wenn mehr Aufgaben ausgeführt werden müssen, als eine Umgebung ausführen kann, empfehlen wir, die Anzahl der Aufgaben, die Ihre DAGs gleichzeitig ausführen, zu reduzieren und/oder die Mindestanzahl der Apache Airflow Worker zu erhöhen.

    3. Wenn es eine große Anzahl von Aufgaben gibt, die in der Warteschlange standen, bevor Autoscaling Zeit hatte, zusätzliche Worker zu erkennen und bereitzustellen, empfehlen wir, die Taskbereitstellung zu staffeln und/oder die Mindestanzahl der Apache Airflow Worker zu erhöhen.

    4. Sie können den Befehl update-environment in derAWS Command Line Interface (AWS CLI) verwenden, um die minimale oder maximale Anzahl von Workern zu ändern, die in Ihrer Umgebung ausgeführt werden.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. Weitere Informationen zu den bewährten Methoden, die wir empfehlen, um die Leistung Ihrer Umgebung zu optimieren, finden Sie unterLeistungsoptimierung für Apache Airflow auf Amazon MWAA.

  3. Möglicherweise werden während der Ausführung Aufgaben gelöscht, die als Aufgabenprotokolle angezeigt werden, die ohne weitere Angabe in Apache Airflow beendet werden. Dies kann aus folgenden Gründen geschehen:

    1. Wenn es einen kurzen Moment gibt, in dem 1) die aktuellen Aufgaben die aktuelle Umgebungskapazität überschreiten, gefolgt von 2) einigen Minuten, in denen keine Aufgaben ausgeführt werden oder in die Warteschlange gestellt werden, dann 3) neue Aufgaben in die Warteschlange gestellt werden.

    2. Amazon MWAA Autoscaling reagiert auf das erste Szenario, indem zusätzliche Mitarbeiter hinzugefügt werden. Im zweiten Szenario werden die zusätzlichen Arbeiter entfernt. Einige der Aufgaben, die sich in der Warteschlange befinden, können dazu führen, dass die Worker gerade entfernt werden und enden, wenn der Container gelöscht wird.

    3. Wir empfehlen, die Mindestanzahl an Mitarbeitern in Ihrer Umgebung zu erhöhen. Eine weitere Möglichkeit besteht darin, das Timing Ihrer DAGs und Aufgaben anzupassen, um sicherzustellen, dass diese Szenarien nicht eintreten.

    4. Sie können auch festlegen, dass die Mindestanzahl an Mitarbeitern der maximalen Anzahl an Mitarbeitern in Ihrer Umgebung entspricht, wodurch die automatische Skalierung effektiv deaktiviert wird. Verwenden Sie den Befehl update-environment in derAWS Command Line Interface (AWS CLI), um die automatische Skalierung zu deaktivieren, indem Sie die Mindest- und Höchstanzahl von Workern auf die gleiche setzen.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
    5. Weitere Informationen zu den bewährten Methoden, die wir empfehlen, um die Leistung Ihrer Umgebung zu optimieren, finden Sie unterLeistungsoptimierung für Apache Airflow auf Amazon MWAA.

  4. Wenn Ihre Aufgaben im Status „Wird ausgeführt“ stecken, können Sie die Aufgaben auch löschen oder sie als erfolgreich oder fehlgeschlagen markieren. Dadurch kann die Autoscaling-Komponente für Ihre Umgebung die Anzahl der Worker, die in Ihrer Umgebung ausgeführt werden, reduzieren. Die folgende Abbildung zeigt ein Beispiel für eine gestrandete Aufgabe.

    Dies ist ein Bild mit einer gestrandeten Aufgabe.
    1. Wählen Sie den Kreis für die gestrandete Aufgabe und klicken Sie dann auf Löschen (wie abgebildet). Dadurch kann Amazon MWAA Mitarbeiter verkleinern. Andernfalls kann Amazon MWAA nicht feststellen, welche DAGs aktiviert oder deaktiviert sind, und kann nicht herunterskalieren, wenn es noch Aufgaben in der Warteschlange gibt.

      Apache Airflow-Aktionen
  5. Weitere Informationen zum Apache Airflow-Aufgabenlebenszyklus finden Sie unter Konzepte im Apache Airflow-Referenzleitfaden.

CLI

Im folgenden Thema werden die Fehler beschrieben, die beim Ausführen von Airflow-CLI-Befehlen in der auftreten könnenAWS Command Line Interface.

Ich sehe einen '503'-Fehler, wenn ich eine DAG in der CLI auslöse

Die Airflow-CLI wird auf dem Apache Airflow-Webserver ausgeführt, der über eine eingeschränkte Parallelität verfügt. In der Regel können maximal 4 CLI-Befehle gleichzeitig ausgeführt werden.

Warum schlägt derdags backfill Apache Airflow CLI-Befehl fehl? Gibt es eine Problemumgehung?

Anmerkung

Das Folgende gilt nur für Apache Airflow v2.0.2-Umgebungen.

Derbackfill Befehl analysiert, wie andere Apache Airflow CLI-Befehle, alle DAGs lokal, bevor irgendwelche DAGs verarbeitet werden, unabhängig davon, für welche DAG die CLI-Operation gilt. In Amazon MWAA-Umgebungen, in denen Apache Airflow v2.0.2 verwendet wird, schlägt der Analysevorgang fehl und der Vorgang wird nicht aufgerufen, da Plugins und Anforderungen zum Zeitpunkt der Ausführung des CLI-Befehls noch nicht auf dembackfill Webserver installiert sind. Wenn Sie in Ihrer Umgebung keine Anforderungen oder Plugins hätten, wäre derbackfill Vorgang erfolgreich.

Um denbackfill CLI-Befehl ausführen zu können, empfehlen wir, ihn in einem Bash-Operator aufzurufen. Wird in einem Bash-Operator vom Worker initiiert, sodass die DAGs erfolgreich parsen können, da alle notwendigen Anforderungen und Plugins verfügbar und installiert sind.backfill Das folgende Beispiel zeigt, wie Sie eine DAG mit einerBashOperator zu ausführenden erstellen könnenbackfill.

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="backfill_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="airflow dags backfill my_dag_id" )

Operatoren

Im folgenden Thema werden die Fehler beschrieben, die bei der Verwendung von Operatoren auftreten können.

Ich habe einenPermissionError: [Errno 13] Permission denied Fehler bei der Verwendung des S3Transform-Operators erhalten

Wir empfehlen die folgenden Schritte, wenn Sie versuchen, ein Shell-Skript mit dem S3Transform-Operator auszuführen und einePermissionError: [Errno 13] Permission denied Fehlermeldung erhalten. Die folgenden Schritte setzen voraus, dass Sie über eine vorhandene Datei plugins.zip verfügen. Informationen zum Erstellen einer neuen Datei plugins.zip finden Sie unterInstallation benutzerdefinierter Plugins.

  1. Testen Sie Ihre DAGs, benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit dem aws-mwaa-local-runneronGitHub.

  2. Erstellen Sie Ihr „Transform“ -Skript.

    #!/bin/bash cp $1 $2
  3. (optional) macOS- und Linux-Benutzer müssen möglicherweise den folgenden Befehl ausführen, um sicherzustellen, dass das Skript ausführbar ist.

    chmod 777 transform_test.sh
  4. Fügen Sie das Skript zu Ihrer plugins.zip hinzu.

    zip plugins.zip transform_test.sh
  5. Folgen Sie den Schritten unter plugins.zip auf Amazon S3 hochladen.

  6. Folgen Sie den Schritten unter Angabe der Version plugins.zip auf der Amazon MWAA-Konsole.

  7. Erstellen Sie die folgende DAG.

    from airflow import DAG from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") with DAG (dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: file_transform = S3FileTransformOperator( task_id='file_transform', transform_script='/usr/local/airflow/plugins/transform_test.sh', source_s3_key='s3://YOUR_S3_BUCKET/files/input.txt', dest_s3_key='s3://YOUR_S3_BUCKET/files/output.txt' )
  8. Folgen Sie den Schritten unter DAG-Code auf Amazon S3 hochladen.