Fehlerbehebung: DAGs, Operatoren, Verbindungen und andere Probleme - 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

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

Verbindungen

Im folgenden Thema werden die Fehler beschrieben, die möglicherweise auftreten, wenn Sie eine Apache Airflow Airflow-Verbindung oder eine andere AWS Datenbank verwenden.

Ich kann keine Verbindung zu Secrets Manager herstellen

Wir empfehlen die folgenden Schritte:

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

  2. Erfahren Sie in, wie Sie den geheimen Schlüssel für eine Apache Airflow Airflow-Variable (test-variable) verwenden. Verwendung eines geheimen Schlüssels AWS Secrets Manager für eine Apache Airflow Airflow-Variable

  3. Erfahren Sie in, wie Sie den geheimen Schlüssel für eine Apache Airflow Airflow-Verbindung (myconn) verwenden. Verwendung eines geheimen Schlüssels AWS Secrets Manager für eine Apache Airflow Airflow-Verbindung

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

Anmerkung

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

Derzeit können Sie aufgrund eines bekannten Problems in Apache Airflow den Zugriff auf Secrets Manager-Geheimnisse nicht mithilfe von Bedingungsschlüsseln oder anderen Ressourceneinschränkungen in der Ausführungsrolle Ihrer Umgebung einschränken.

Ich kann keine Verbindung zu Snowflake herstellen

Wir empfehlen die folgenden Schritte:

  1. Testen Sie Ihre DAGs benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit aws-mwaa-docker-imageson GitHub.

  2. Fügen Sie der Datei requirements.txt die folgenden Einträge für Ihre Umgebung 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 Airflow-Verbindungsobjekt die folgenden Schlüssel-Wert-Paare enthält:

  1. Verbindungs-ID: snowflake_conn

  2. Conn-Typ: 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. Extra:

    { "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='123456789012.us-east-1.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='123456789012', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='us-east-1')), ... )

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

Apache Airflow stellt Verbindungsvorlagen in der Apache Airflow Airflow-Benutzeroberfläche bereit. Es verwendet dies, um die Verbindungs-URI-Zeichenfolge unabhängig vom Verbindungstyp zu generieren. Wenn eine Verbindungsvorlage in der Apache Airflow 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 folgenden Schritte:

  1. Greifen Sie auf die Verbindungstypen zu, die Amazon MWAA in der Apache Airflow Airflow-Benutzeroberfläche unter bereitstellt. Apache Airflow Airflow-Provider-Pakete, die in Amazon MWAA-Umgebungen installiert sind

  2. Greifen Sie in der CLI unter Befehlsreferenz für Apache Airflow CLI auf die Befehle zu, um eine Apache Airflow Airflow-Verbindung herzustellen.

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

Webserver

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

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

Wir empfehlen die folgenden Schritte:

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

  2. Prüfen Sie dierequirements.txt. Stellen Sie sicher, dass das Airflow-Paket „Extras“ und andere in Ihrem aufgelistete Bibliotheken mit Ihrer Apache Airflow Airflow-Version kompatibel requirements.txt sind.

  3. Weitere Informationen zur Angabe von Python-Abhängigkeiten in einer requirements.txt Datei finden Sie unterVerwalten von Python-Abhängigkeiten in requirements.txt.

Ich erhalte eine The scheduler does not seem to be running Fehlermeldung

Wenn der Scheduler nicht zu laufen scheint oder der letzte „Herzschlag“ vor einigen Stunden empfangen wurde, sind Sie DAGs möglicherweise nicht in Apache Airflow aufgeführt, und neue Aufgaben werden nicht geplant.

Wir empfehlen die folgenden Schritte:

  1. Vergewissern Sie sich, dass Ihre VPC-Sicherheitsgruppe eingehenden Zugriff auf den Port zulässt. 5432 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 einige Minuten Zeit, dann kann der Fehler verschwinden. Weitere Informationen 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 verfügbar. AWS-Konto

    • Datenbankfehler sind in der Regel ein Symptom für einen Ausfall des Schedulers und nicht die eigentliche Ursache.

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

Aufgaben

Im folgenden Thema werden die Fehler beschrieben, die Ihnen bei Apache Airflow Airflow-Aufgaben in einer Umgebung möglicherweise angezeigt werden.

Meine Aufgaben bleiben hängen oder werden nicht abgeschlossen

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

  1. Möglicherweise gibt es eine große Anzahl von DAGs definierten. Reduzieren Sie die Anzahl von DAGs und führen Sie eine Aktualisierung der Umgebung durch (z. B. eine Änderung der Protokollebene), um ein Zurücksetzen zu erzwingen.

    1. Airflow analysiert, DAGs ob sie aktiviert sind oder nicht. Wenn Sie mehr als 50% der Kapazität Ihrer Umgebung nutzen, könnten Sie damit beginnen, den Apache Airflow Scheduler zu überfordern. Dies führt zu einer hohen Gesamtanalysezeit in CloudWatch Metriken oder zu langen DAG-Verarbeitungszeiten in Protokollen. CloudWatch Es gibt andere Möglichkeiten, Apache Airflow Airflow-Konfigurationen zu optimieren, die nicht in diesem Handbuch behandelt werden.

    2. Weitere Informationen zu den bewährten Methoden, die wir zur Optimierung der Leistung Ihrer Umgebung empfehlen, finden Sie Leistungsoptimierung für Apache Airflow auf Amazon MWAA unter.

  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 None Bundesstaat oder als eine große Anzahl von Aufgaben in angezeigt. Queued Tasks and/or Tasks Pending CloudWatch Dies kann aus den folgenden Gründen auftreten:

    1. Wenn mehr Aufgaben ausgeführt werden müssen, als die Umgebung ausführen kann, hat and/or eine große Anzahl von Aufgaben, die vor der automatischen Skalierung in die Warteschlange gestellt wurden, Zeit, 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 Sie DAGs gleichzeitig ausführen, zu reduzieren und so die Mindestanzahl an Apache Airflow Airflow-Workern zu and/or erhöhen.

    3. Wenn es eine große Anzahl von Aufgaben gibt, die in die Warteschlange gestellt wurden, bevor Autoscaling Zeit hatte, zusätzliche Worker zu erkennen und bereitzustellen, empfehlen wir eine gestaffelte Aufgabenbereitstellung, um die Mindestanzahl von Apache Airflow Airflow-Workern and/or zu erhöhen.

    4. Sie können den Befehl update-environment in der AWS 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 zur Optimierung der Leistung Ihrer Umgebung empfehlen, finden Sie unter. Leistungsoptimierung für Apache Airflow auf Amazon MWAA

  3. Wenn Ihre Aufgaben im Status „Wird ausgeführt“ hängen bleiben, können Sie die Aufgaben auch löschen oder sie als erfolgreich oder fehlgeschlagen markieren. Auf diese Weise kann die Autoscaling-Komponente für Ihre Umgebung die Anzahl der in Ihrer Umgebung ausgeführten Worker verringern. Die folgende Abbildung zeigt ein Beispiel für eine ungenutzte Aufgabe.

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

      Apache Airflow Airflow-Aktionen
  4. Weitere Informationen zum Apache Airflow Airflow-Aufgabenlebenszyklus finden Sie unter Concepts im Apache Airflow Airflow-Referenzhandbuch.

In Airflow v3 treten Taskfehler ohne Logs auf

Wenn Ihre Apache Airflow 3-Aufgaben ohne Protokolle fehlschlagen, gehen Sie wie folgt vor:

  • Wenn in den Worker-Logs Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 15 Job: 12.') etwa zu dem Zeitpunkt, zu dem die Aufgabe fehlgeschlagen ist, ein Fehler angezeigt wird, deutet dies darauf hin, dass der der Aufgabe zugewiesene Fork-Worker-Prozess wahrscheinlich unerwartet beendet wurde.

    Um dieses Problem zu beheben, sollten Sie in Erwägung ziehen, celery.worker_autoscale mit denselben Mindest- und Höchstwerten zu konfigurieren. Beispiel:

    celery.worker_autoscale=5,5 # for mw1.small celery.worker_autoscale=10,10 # for mw1.medium celery.worker_autoscale=20,20 # for mw1.large

    Dadurch wird sichergestellt, dass die Größe des Worker-Pools unverändert bleibt und unerwartete Kündigungen von Mitarbeitern verhindert werden.

CLI

Im folgenden Thema werden die Fehler beschrieben, die möglicherweise auftreten, wenn Sie Airflow CLI-Befehle in der AWS Command Line Interface ausführen.

Ich erhalte den Fehler „503“, wenn ich eine DAG in der CLI auslöse

Die Airflow-CLI läuft auf dem Apache Airflow Airflow-Webserver, der nur über begrenzte Parallelität verfügt. In der Regel können maximal 4 CLI-Befehle gleichzeitig ausgeführt werden.

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

Anmerkung

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

Der backfill Befehl analysiert, wie andere Apache Airflow CLI-Befehle, alle DAGs lokal, bevor sie verarbeitet DAGs werden, unabhängig davon, für welche DAG der CLI-Vorgang gilt. In Amazon MWAA-Umgebungen, die Apache Airflow v2.0.2 verwenden, 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 dem Webserver installiert sind. backfill Wenn Sie in Ihrer Umgebung keine Anforderungen oder Plugins hätten, wäre der Vorgang erfolgreich. backfill

Um den backfill CLI-Befehl ausführen zu können, empfehlen wir, ihn in einem Bash-Operator aufzurufen. Bei einem Bash-Operator backfill wird er vom Worker initiiert, sodass er erfolgreich parsen kann, sobald alle erforderlichen Anforderungen und Plugins verfügbar und installiert sind. DAGs Verwenden Sie das folgende Beispiel, um eine DAG mit einem auszuführenden Objekt zu erstellen. BashOperator backfill

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 einen PermissionError: [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 Sie eine Fehlermeldung erhalten. PermissionError: [Errno 13] Permission denied Bei den folgenden Schritten wird davon ausgegangen, dass Sie über eine bestehende Datei plugins.zip verfügen. Wenn Sie eine neue Datei plugins.zip erstellen, finden Sie weitere Informationen unterInstallation benutzerdefinierter Plugins.

  1. Testen Sie Ihre DAGs benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit aws-mwaa-docker-imageson GitHub.

  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 Laden Sie die Datei plugins.zip auf Amazon S3 hoch.

  6. Folgen Sie den Schritten unter Spezifizieren 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://amzn-s3-demo-bucket/files/input.txt', dest_s3_key='s3://amzn-s3-demo-bucket/files/output.txt' )
  8. Folgen Sie den Schritten unter DAG-Code auf Amazon S3 hochladen.