Verwenden eines Startskripts mit Amazon MWAA - 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.

Verwenden eines Startskripts mit Amazon MWAA

Ein Startskript ist ein Shell (.sh) -Skript, das Sie im Amazon S3 S3-Bucket Ihrer Umgebung hosten, ähnlich Ihren DAGs, Anforderungen und Plugins. Amazon MWAA führt dieses Skript beim Start auf jeder einzelnen Apache Airflow-Komponente (Worker, Scheduler und Webserver) aus, bevor die Anforderungen installiert und der Apache Airflow-Prozess initialisiert wird. Verwenden Sie ein Startskript, um Folgendes zu tun:

  • Laufzeiten installieren — Installieren Sie Linux-Laufzeiten, die für Ihre Workflows und Verbindungen erforderlich sind.

  • Umgebungsvariablen konfigurieren — Legen Sie Umgebungsvariablen für jede Apache Airflow-Komponente fest. Überschreiben Sie allgemeine Variablen wie PATHPYTHONPATH, und. LD_LIBRARY_PATH

  • Schlüssel und Token verwalten — Übergeben Sie Zugriffstoken für benutzerdefinierte Repositorys an requirements.txt und konfigurieren Sie Sicherheitsschlüssel.

In den folgenden Themen wird beschrieben, wie Sie ein Startskript konfigurieren, um Linux-Laufzeiten zu installieren, Umgebungsvariablen festzulegen und verwandte Probleme mithilfe von CloudWatch Protokollen zu beheben.

Konfigurieren Sie ein Startskript

Um ein Startskript mit Ihrer bestehenden Amazon MWAA-Umgebung zu verwenden, laden Sie eine .sh Datei in den Amazon S3 S3-Bucket Ihrer Umgebung hoch. Um das Skript dann der Umgebung zuzuordnen, geben Sie in Ihren Umgebungsdetails Folgendes an:

  • Der Amazon S3 S3-URL-Pfad zum Skript — Der relative Pfad zu dem in Ihrem Bucket gehosteten Skript, zum Beispiel s3://mwaa-environment/startup.sh

  • Die Amazon S3 S3-Versions-ID des Skripts — Die Version des Start-Shell-Skripts in Ihrem Amazon S3 S3-Bucket. Sie müssen die Versions-ID angeben, die Amazon S3 der Datei bei jeder Aktualisierung des Skripts zuweist. Versions-IDs sind Unicode-kodierte, UTF-8-kodierte, URL-fähige, undurchsichtige Zeichenketten, die beispielsweise nicht länger als 1.024 Byte sind. 3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

Verwenden Sie das folgende Beispielskript, um die Schritte in diesem Abschnitt auszuführen. Das Skript gibt den Wert aus, der zugewiesen wurdeMWAA_AIRFLOW_COMPONENT. Diese Umgebungsvariable identifiziert jede Apache Airflow-Komponente, auf der das Skript ausgeführt wird.

Kopieren Sie den Code und speichern Sie ihn lokal unter. startup.sh

#!/bin/sh ​ echo "Printing Apache Airflow component" echo $MWAA_AIRFLOW_COMPONENT

Laden Sie als Nächstes das Skript in Ihren Amazon S3 S3-Bucket hoch.

AWS Management Console
Um ein Shell-Skript (Konsole) hochzuladen
  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie aus der Bucket-Liste den Namen des Buckets aus, der Ihrer Umgebung zugeordnet ist.

  3. Wählen Sie auf der Registerkarte Objekte die Option Upload aus.

  4. Ziehen Sie das von Ihnen erstellte Shell-Skript per Drag-and-Drop auf die Upload-Seite.

  5. Klicken Sie auf Hochladen.

Das Skript wird in der Liste der Objekte angezeigt. Amazon S3 erstellt eine neue Versions-ID für die Datei. Wenn Sie das Skript aktualisieren und es erneut mit demselben Dateinamen hochladen, wird der Datei eine neue Versions-ID zugewiesen.

AWS CLI
Um ein Shell-Skript (CLI) zu erstellen und hochzuladen
  1. Öffnen Sie eine neue Eingabeaufforderung und führen Sie den Amazon S3 ls S3-Befehl aus, um den Bucket aufzulisten und zu identifizieren, der mit Ihrer Umgebung verknüpft ist.

    $ aws s3 ls
  2. Navigieren Sie zu dem Ordner, in dem Sie das Shell-Skript gespeichert haben. Verwenden Sie es cp in einem neuen Eingabeaufforderungsfenster, um das Skript in Ihren Bucket hochzuladen. Ersetzen Sie your-s3-bucket durch Ihre Informationen.

    $ aws s3 cp startup.sh s3://your-s3-bucket/startup.sh

    Bei Erfolg gibt Amazon S3 den URL-Pfad zum Objekt aus:

    upload: ./startup.sh to s3://your-s3-bucket/startup.sh
  3. Verwenden Sie den folgenden Befehl, um die neueste Versions-ID für das Skript abzurufen.

    $ aws s3api list-object-versions --bucket your-s3-bucket --prefix startup --query 'Versions[?IsLatest].[VersionId]' --output text
    BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

Sie geben diese Versions-ID an, wenn Sie das Skript einer Umgebung zuordnen.

Ordnen Sie das Skript nun Ihrer Umgebung zu.

AWS Management Console
Um das Skript einer Umgebung (Konsole) zuzuordnen
  1. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  2. Wählen Sie die Zeile für die Umgebung aus, die Sie aktualisieren möchten, und klicken Sie dann auf Bearbeiten.

  3. Geben Sie auf der Seite Details angeben für Startskriptdatei — optional die Amazon S3 S3-URL für das Skript ein, zum Beispiel:s3://your-mwaa-bucket/startup-sh..

  4. Wählen Sie die neueste Version aus der Drop-down-Liste aus oder suchen Sie nach dem Skript, S3 um nach dem Skript zu suchen.

  5. Wählen Sie Weiter und fahren Sie dann mit der Seite Überprüfen und speichern fort.

  6. Überprüfen Sie die Änderungen und wählen Sie dann Speichern.

Aktualisierungen der Umgebung können zwischen 10 und 30 Minuten dauern. Amazon MWAA führt das Startskript aus, wenn jede Komponente in Ihrer Umgebung neu gestartet wird.

AWS CLI
So verknüpfen Sie das Skript mit einer Umgebung (CLI)
  • Öffnen Sie eine Befehlszeile und geben Sie update-environment damit die Amazon S3 S3-URL und die Versions-ID für das Skript an.

    $ aws mwaa update-environment \ --name your-mwaa-environment \ --startup-script-s3-path startup.sh \ --startup-script-s3-object-version BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

    Bei Erfolg gibt Amazon MWAA den Amazon Resource Name (ARN) für die Umgebung zurück:

    arn:aws::airflow:us-west-2:123456789012:environment/your-mwaa-environment 

Die Aktualisierung der Umgebung kann zwischen 10 und 30 Minuten dauern. Amazon MWAA führt das Startskript aus, wenn jede Komponente in Ihrer Umgebung neu gestartet wird.

Rufen Sie abschließend Protokollereignisse ab, um zu überprüfen, ob das Skript wie erwartet funktioniert. Wenn Sie die Protokollierung für jede Apache Airflow-Komponente aktivieren, erstellt Amazon MWAA eine neue Protokollgruppe und einen neuen Protokollstream. Weitere Informationen finden Sie unter Apache Airflow-Protokolltypen.

AWS Management Console
So überprüfen Sie den Apache Airflow-Protokollstream (Konsole)
  1. Öffnen Sie die Seite Umgebungen auf der Amazon MWAA-Konsole.

  2. Wählen Sie Ihre Umgebung aus.

  3. Wählen Sie im Bereich Überwachung die Protokollgruppe aus, für die Sie Protokolle anzeigen möchten, z. B. die Airflow Scheduler-Protokollgruppe.

  4. Wählen Sie in der CloudWatch Konsole aus der Liste Protokollstreams einen Stream mit dem folgenden Präfix aus:. startup_script_exection_ip

  5. Im Bereich Ereignisse protokollieren sehen Sie die Ausgabe des Befehls, der den Wert für ausgibtMWAA_AIRFLOW_COMPONENT. Bei Scheduler-Protokollen gehen Sie beispielsweise wie folgt vor:

    Printing Apache Airflow component
    scheduler
    Finished running startup script. Execution time: 0.004s.
    Running verification
    Verification completed

Sie können die vorherigen Schritte wiederholen, um Worker- und Webserver-Protokolle anzuzeigen.

Installieren Sie Linux-Laufzeiten mithilfe eines Startskripts

Verwenden Sie ein Startskript, um das Betriebssystem einer Apache Airflow-Komponente zu aktualisieren, und installieren Sie zusätzliche Laufzeitbibliotheken, die Sie mit Ihren Workflows verwenden können. Das folgende Skript wird beispielsweise ausgeführt, yum update um das Betriebssystem zu aktualisieren.

Bei yum update der Ausführung in einem Startskript müssen Sie Python ausschließen, indem Sie, --exclude=python* wie im Beispiel gezeigt, verwenden. Damit Ihre Umgebung ausgeführt werden kann, installiert Amazon MWAA eine bestimmte Version von Python, die mit Ihrer Umgebung kompatibel ist. Daher können Sie die Python-Version der Umgebung nicht mit einem Startskript aktualisieren.

#!/bin/sh echo "Updating operating system" sudo yum update -y --exclude=python*

Um Runtimes auf einer bestimmten Apache Airflow-Komponente zu installieren, verwenden Sie MWAA_AIRFLOW_COMPONENT und if und fi bedingte Anweisungen. In diesem Beispiel wird ein einziger Befehl ausgeführt, um die libaio Bibliothek auf dem Scheduler und Worker zu installieren, aber nicht auf dem Webserver.

Wichtig
  • Wenn Sie einen privaten Webserver konfiguriert haben, müssen Sie entweder die folgende Bedingung verwenden oder alle Installationsdateien lokal bereitstellen, um Zeitüberschreitungen bei der Installation zu vermeiden.

  • Wird verwendetsudo, um Operationen auszuführen, für die Administratorrechte erforderlich sind.

#!/bin/sh if [[ "${MWAA_AIRFLOW_COMPONENT}" != "webserver" ]] then sudo yum -y install libaio fi

Sie können ein Startskript verwenden, um die Python-Version zu überprüfen.

#!/bin/sh export PYTHON_VERSION_CHECK=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` echo "Python version is $PYTHON_VERSION_CHECK"

Amazon MWAA unterstützt das Überschreiben der Standard-Python-Version nicht, da dies zu Inkompatibilitäten mit den installierten Apache Airflow-Bibliotheken führen kann.

Legen Sie Umgebungsvariablen mithilfe eines Startskripts fest

Verwenden Sie Startskripts, um Umgebungsvariablen festzulegen und Apache Airflow-Konfigurationen zu ändern. Im Folgenden wird eine neue Variable definiert,ENVIRONMENT_STAGE. Sie können in einer DAG oder in Ihren benutzerdefinierten Modulen auf diese Variable verweisen.

#!/bin/sh export ENVIRONMENT_STAGE="development" echo "$ENVIRONMENT_STAGE"

Verwenden Sie Startskripts, um gängige Apache Airflow- oder Systemvariablen zu überschreiben. Sie legen beispielsweise fest, LD_LIBRARY_PATH dass Python in dem von Ihnen angegebenen Pfad nach Binärdateien suchen soll. Auf diese Weise können Sie mithilfe von Plugins benutzerdefinierte Binärdateien für Ihre Workflows bereitstellen:

#!/bin/sh export LD_LIBRARY_PATH=/usr/local/airflow/plugins/your-custom-binary

Reservierte Umgebungsvariablen

Amazon MWAA reserviert eine Reihe kritischer Umgebungsvariablen. Wenn Sie eine reservierte Variable überschreiben, setzt Amazon MWAA sie auf ihre Standardwerte zurück. Im Folgenden sind die reservierten Variablen aufgeführt:

  • MWAA__AIRFLOW__COMPONENT— Wird verwendet, um die Apache Airflow-Komponente mit einem der folgenden Werte zu identifizieren:scheduler,worker, oderwebserver.

  • AIRFLOW__WEBSERVER__SECRET_KEY— Der geheime Schlüssel, der zum sicheren Signieren von Sitzungscookies auf dem Apache Airflow-Webserver verwendet wird.

  • AIRFLOW__CORE__FERNET_KEY— Der Schlüssel, der für die Verschlüsselung und Entschlüsselung sensibler Daten verwendet wird, die in der Metadaten-Datenbank gespeichert sind, z. B. Verbindungskennwörter.

  • AIRFLOW_HOME— Der Pfad zum Apache Airflow-Home-Verzeichnis, in dem Konfigurationsdateien und DAG-Dateien lokal gespeichert werden.

  • AIRFLOW__CELERY__BROKER_URL— Die URL des Message Brokers, der für die Kommunikation zwischen dem Apache Airflow Scheduler und den Celery Worker Nodes verwendet wird.

  • AIRFLOW__CELERY__RESULT_BACKEND— Die URL der Datenbank, die zum Speichern der Ergebnisse von Celery-Aufgaben verwendet wird.

  • AIRFLOW__CORE__EXECUTOR— Die Executor-Klasse, die Apache Airflow verwenden soll. In Amazon MWAA ist dies ein CeleryExecutor

  • AIRFLOW__CORE__LOAD_EXAMPLES— Wird verwendet, um das Laden von Beispiel-DAGs zu aktivieren oder zu deaktivieren.

  • AIRFLOW__METRICS__METRICS_BLOCK_LIST— Wird verwendet, um zu verwalten, welche Apache Airflow-Metriken von Amazon MWAA ausgegeben und erfasst werden. CloudWatch

  • SQL_ALCHEMY_CONN— Die Verbindungszeichenfolge für die Datenbank RDS for PostgreSQL, die zum Speichern von Apache Airflow-Metadaten in Amazon MWAA verwendet wird.

  • AIRFLOW__CORE__SQL_ALCHEMY_CONN— Wird für denselben Zweck verwendet wieSQL_ALCHEMY_CONN, folgt jedoch der neuen Apache Airflow-Namenskonvention.

  • AIRFLOW__CELERY__DEFAULT_QUEUE— Die Standardwarteschlange für Celery-Aufgaben in Apache Airflow.

  • AIRFLOW__OPERATORS__DEFAULT_QUEUE— Die Standardwarteschlange für Aufgaben, die bestimmte Apache Airflow-Operatoren verwenden.

  • AIRFLOW_VERSION— Die in der Amazon MWAA-Umgebung installierte Apache Airflow-Version.

  • AIRFLOW_CONN_AWS_DEFAULT— Die AWS Standardanmeldedaten, die für die Integration mit anderen AWS Diensten in verwendet werden.

  • AWS_DEFAULT_REGION— Legt die AWS Standardregion fest, die mit Standardanmeldedaten für die Integration mit anderen AWS Diensten verwendet wird.

  • AWS_REGION— Falls definiert, überschreibt diese Umgebungsvariable die Werte in der Umgebungsvariablen AWS_DEFAULT_REGION und im Bereich der Profileinstellungen.

  • PYTHONUNBUFFERED— Wird zum Senden stdout und stderr Streamen von Container-Logs verwendet.

  • AIRFLOW__METRICS__STATSD_ALLOW_LIST— Wird verwendet, um eine Zulassungsliste mit kommagetrennten Präfixen zu konfigurieren, um die Metriken zu senden, die mit den Elementen der Liste beginnen.

  • AIRFLOW__METRICS__STATSD_ON— Aktiviert das Senden von Metriken an. StatsD

  • AIRFLOW__METRICS__STATSD_HOST— Wird verwendet, um eine Verbindung zum StatSD Daemon herzustellen.

  • AIRFLOW__METRICS__STATSD_PORT— Wird verwendet, um eine Verbindung zum StatSD Daemon herzustellen.

  • AIRFLOW__METRICS__STATSD_PREFIX— Wird verwendet, um eine Verbindung zum StatSD Daemon herzustellen.

  • AIRFLOW__CELERY__WORKER_AUTOSCALE— Legt die maximale und minimale Parallelität fest.

  • AIRFLOW__CORE__DAG_CONCURRENCY— Legt die Anzahl der Task-Instanzen fest, die vom Scheduler gleichzeitig in einer DAG ausgeführt werden können.

  • AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG— Legt die maximale Anzahl aktiver Aufgaben pro DAG fest.

  • AIRFLOW__CORE__PARALLELISM— Definiert die maximale Anzahl von Task-Instanzen, die gleichzeitig ausgeführt werden können.

  • AIRFLOW__SCHEDULER__PARSING_PROCESSES— Legt die maximale Anzahl von Prozessen fest, die vom Scheduler analysiert werden, um DAGs zu planen.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__VISIBILITY_TIMEOUT— Definiert die Anzahl von Sekunden, die ein Worker auf die Bestätigung der Aufgabe wartet, bevor die Nachricht erneut an einen anderen Worker zugestellt wird.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__REGION— Legt die AWS Region für den zugrunde liegenden Celerietransport fest.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__PREDEFINED_QUEUES— Legt die Warteschlange für den zugrunde liegenden Celerietransport fest.

  • AIRFLOW_SCHEDULER_ALLOWED_RUN_ID_PATTERN— Wird verwendet, um die Gültigkeit Ihrer Eingabe für den run_id Parameter beim Auslösen einer DAG zu überprüfen.

  • AIRFLOW__WEBSERVER__BASE_URL— Die URL des Webservers, auf dem die Apache Airflow-Benutzeroberfläche gehostet wird.

Nicht reservierte Umgebungsvariablen

Sie können ein Startskript verwenden, um nicht reservierte Umgebungsvariablen zu überschreiben. Im Folgenden sind einige dieser allgemeinen Variablen aufgeführt:

  • PATH— Gibt eine Liste von Verzeichnissen an, in denen das Betriebssystem nach ausführbaren Dateien und Skripten sucht. Wenn ein Befehl in der Befehlszeile ausgeführt wird, überprüft das System die Verzeichnisse, um den Befehl zu finden und auszuführen. PATH Wenn Sie benutzerdefinierte Operatoren oder Aufgaben in Apache Airflow erstellen, müssen Sie sich möglicherweise auf externe Skripts oder ausführbare Dateien verlassen. Wenn sich die Verzeichnisse, die diese Dateien enthalten, nicht in den in der PATH Variablen angegebenen Verzeichnissen befinden, können die Aufgaben nicht ausgeführt werden, wenn das System sie nicht finden kann. Durch Hinzufügen der entsprechenden Verzeichnisse können Apache Airflow-Aufgaben die erforderlichen ausführbaren Dateien finden und ausführen. PATH

  • PYTHONPATH— Wird vom Python-Interpreter verwendet, um zu bestimmen, in welchen Verzeichnissen nach importierten Modulen und Paketen gesucht werden soll. Es ist eine Liste von Verzeichnissen, die Sie dem Standardsuchpfad hinzufügen können. Dadurch kann der Interpreter Python-Bibliotheken finden und laden, die nicht in der Standardbibliothek enthalten oder in Systemverzeichnissen installiert sind. Verwenden Sie diese Variable, um Ihre Module und benutzerdefinierten Python-Pakete hinzuzufügen und sie mit Ihren DAGs zu verwenden.

  • LD_LIBRARY_PATH— Eine Umgebungsvariable, die vom dynamischen Linker und Loader unter Linux verwendet wird, um gemeinsam genutzte Bibliotheken zu finden und zu laden. Sie spezifiziert eine Liste von Verzeichnissen, die gemeinsam genutzte Bibliotheken enthalten, die vor den Standardverzeichnissen der Systembibliotheken durchsucht werden. Verwenden Sie diese Variable, um Ihre benutzerdefinierten Binärdateien anzugeben.

  • CLASSPATH— Wird vom Java Runtime Environment (JRE) und dem Java Development Kit (JDK) verwendet, um Java-Klassen, -Bibliotheken und -Ressourcen zur Laufzeit zu finden und zu laden. Es ist eine Liste von Verzeichnissen, JAR-Dateien und ZIP-Archiven, die kompilierten Java-Code enthalten.