View a markdown version of this page

Fehlerbehebung: DAGs, Operatoren, Verbindungen und andere Probleme - Von Amazon verwaltete 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 Python-Abhängigkeiten von Apache Airflow v2 und v3, 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 möglicherweise auftreten, wenn Sie eine Apache Airflow-Verbindung oder eine andere Datenbank verwenden. AWS

Ich kann keine Verbindung zu Secrets Manager herstellen

Wir empfehlen die folgenden Schritte:

  1. Erfahren Sie in, wie Sie geheime Schlüssel für Ihre Apache Airflow-Verbindung und Variablen erstellen. Konfiguration einer Apache Airflow Airflow-Verbindung mit einem AWS Secrets Manager Secret

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

  3. Erfahren Sie, wie Sie den geheimen Schlüssel für eine Apache Airflow-Verbindung (myconn) in 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 Richtlinie für Ausführungsrollen?

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 einschränken, indem Sie Bedingungsschlüssel oder andere Ressourcenbeschränkungen in der Ausführungsrolle Ihrer Umgebung verwenden.

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-images on. GitHub

  2. Fügen Sie der 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. Conn-Typ: Schneeflocke

  3. <my account>Gastgeber:. <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-Benutzeroberfläche bereit. Es verwendet dies, um die Verbindungs-URI-Zeichenfolge zu generieren, unabhängig vom Verbindungstyp. Wenn in der Apache Airflow-Benutzeroberfläche keine Verbindungsvorlage 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-Benutzeroberfläche bereitstellt, unter. Apache Airflow-Provider-Pakete, die in Amazon MWAA-Umgebungen installiert sind

  2. Greifen Sie in der CLI unter auf die Befehle zum Erstellen einer Apache Airflow-Verbindung zu. Apache Airflow CLI-Befehlsreferenz

  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 unter nicht verfügbar sind. Übersicht der Verbindungsarten

Webserver

Im folgenden Thema werden die Fehler beschrieben, die Sie möglicherweise für Ihren Apache 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-Konfigurationsoptionen. Stellen Sie sicher, dass die Schlüssel-Wert-Paare, die Sie als Apache Airflow-Konfigurationsoption angegeben haben, wie AWS Secrets Manager z. B., korrekt konfiguriert wurden. Weitere Informationen finden Sie unter. Ich kann keine Verbindung zu Secrets Manager herstellen

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

  3. Informieren Sie sich über Möglichkeiten, Python-Abhängigkeiten in einer requirements.txt Datei anzugeben, siehe. Verwaltung von Python-Abhängigkeiten in requirements.txt

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

Wenn der Scheduler nicht zu laufen scheint oder der letzte „Herzschlag“ vor einigen Stunden empfangen wurde, sind Ihre 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, und der Fehler kann 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 Ihrem nicht verfügbar. AWS-Konto

    • Database-related Fehler 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 auf eine Reihe von Faktoren zurückzuführen sein, z. B. auf Fehler bei der Installation von Abhängigkeiten oder auf einen überlasteten Scheduler. Vergewissern Sie sich, dass Ihre DAGs, Plugins und Anforderungen ordnungsgemäß funktionieren, indem Sie auf die entsprechenden Protokollgruppen in Logs zugreifen. CloudWatch Weitere Informationen finden Sie unter. Überwachung und Metriken für Amazon Managed Workflows für Apache Airflow

Aufgaben

Im folgenden Thema werden die Fehler beschrieben, die bei Apache Airflow-Aufgaben in einer Umgebung auftreten können.

Meine Aufgaben hängen fest oder ich werde nicht abgeschlossen

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

  1. Möglicherweise ist eine große Anzahl von DAGs definiert. 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önnten Sie anfangen, 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 zur Optimierung von Apache Airflow-Konfigurationen, 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 oft als eine große — und wachsende — Anzahl von Aufgaben im None Bundesstaat oder als eine große Anzahl von Aufgaben 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 die Kapazität zur Ausführung hat, 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 Mitarbeiter einzusetzen.

    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 die Mindestanzahl an Apache Airflow-Workern and/or zu 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 einzusetzen, empfehlen wir, die Aufgaben gestaffelt bereitzustellen und die Mindestanzahl an Apache Airflow-Workern zu and/or erhöhen.

    4. Sie können den Befehl update-environment in der AWS Command Line Interface (AWS CLI) verwenden, um die Mindest- oder Höchstanzahl 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 nicht erfolgreich markieren. Dadurch kann die Autoscaling-Komponente für Ihre Umgebung die Anzahl der Worker, die in Ihrer Umgebung ausgeführt werden, herunterskalieren. Die folgende Abbildung zeigt ein Beispiel für eine ungenutzte Aufgabe.

    Dies ist ein Bild mit einer Aufgabe, die nicht erreichbar ist.
    1. Wählen Sie den Kreis für die Aufgabe ohne Verbindung 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 DAGs aktiviert oder deaktiviert sind, und kann auch nicht herunterskalieren, wenn es immer noch Aufgaben in der Warteschlange gibt.

      Apache Airflow-Aktionen
  4. Weitere Informationen zum Lebenszyklus der Apache Airflow-Aufgaben finden Sie unter Konzepte im Apache Airflow-Referenzhandbuch.

In Airflow v3 erhalte ich Aufgabenfehler ohne Logs

Gehen Sie wie folgt vor, wenn Ihre Apache Airflow 3-Aufgaben ohne Protokolle fehlschlagen:

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

    Um dieses Problem zu beheben, sollten Sie erwägen, 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, sodass unerwartete Worker-Abbrüche vermieden werden.

CLI

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

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

Die Airflow CLI wird auf dem Apache Airflow-Webserver ausgeführt, auf dem die Parallelität eingeschränkt ist. In der Regel können maximal 4 CLI-Befehle gleichzeitig ausgeführt werden.

Warum schlägt der Apache Airflow CLI-Befehl „dags backfill“ 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 irgendwelche DAGs verarbeitet werden, unabhängig davon, für welche DAG der CLI-Vorgang gilt. In Amazon MWAA-Umgebungen, in denen Apache Airflow v2.0.2 verwendet wird, schlägt der Parsing-Vorgang fehl und der Vorgang wird nicht aufgerufen, da zum Zeitpunkt der Ausführung des CLI-Befehls noch keine Plugins und Anforderungen 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. Wird in einem Bash-Operator vom Worker initiiert, sodass die DAGs erfolgreich parsen können, sobald alle erforderlichen Anforderungen und Plugins verfügbar und installiert sind. backfill Verwenden Sie das folgende Beispiel, um eine DAG zu erstellen, die ausgeführt werden soll. 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 beim Verwenden des S3Transform-Operators folgenden Fehler erhaltenPermissionError: [Errno 13] Permission denied

Wir empfehlen die folgenden Schritte, wenn Sie versuchen, ein Shell-Skript mit dem S3Transform-Operator auszuführen und eine Fehlermeldung angezeigt wird. PermissionError: [Errno 13] Permission denied Bei den folgenden Schritten wird davon ausgegangen, dass Sie eine vorhandene Datei plugins.zip haben. Wenn Sie eine neue plugins.zip erstellen, finden Sie weitere Informationen unterInstallation benutzerdefinierter Plugins.

  1. Testen Sie Ihre DAGs, benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit https://github.com/aws/amazon-mwaa-docker-images aws-mwaa-docker-images on. 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 Angeben der Version von 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 DAG-Code auf Amazon S3 hochladen hochladen.