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.
Ein benutzerdefiniertes Plugin mit Oracle erstellen
Das folgende Beispiel führt Sie durch die Schritte zum Erstellen eines benutzerdefinierten Plug-ins mit Oracle für Amazon MWAA. Es kann mit anderen benutzerdefinierten Plug-ins und Binärdateien in Ihrer Datei plugins.zip kombiniert werden.
Inhalt
Version
-
Der Beispielcode auf dieser Seite kann verwendet werden mitApache Airflow v1inPython 3.7
.
-
Sie können das Codebeispiel auf dieser Seite verwenden mitApache Airflow v2 und höherinPython 3.10
.
Voraussetzungen
Um den Beispielcode auf dieser Seite verwenden zu können, benötigen Sie Folgendes:
-
ArbeiterProtokollierung auf jeder Protokollebene aktiviert,
CRITICAL
oder höher, für Ihre Umgebung. Weitere Informationen zu Amazon MWAA-Protokolltypen und zur Verwaltung Ihrer Protokollgruppen finden Sie unterAirflow-Protokolle in Amazon anzeigen CloudWatch
Berechtigungen
-
Für die Verwendung des Codebeispiels auf dieser Seite sind keine zusätzlichen Berechtigungen erforderlich.
Voraussetzungen
Um den Beispielcode auf dieser Seite zu verwenden, fügen Sie die folgenden Abhängigkeiten zu Ihremrequirements.txt
. Weitere Informationen hierzu finden Sie unter Python-Abhängigkeiten installieren.
Codebeispiel
In den folgenden Schritten wird beschrieben, wie Sie den DAG-Code erstellen, mit dem das benutzerdefinierte Plugin getestet wird.
-
Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem Ihr DAG-Code gespeichert ist. Beispiele:
cd dags
-
Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unter
oracle.py
.from airflow import DAG from airflow.operators.python_operator import PythonOperator from airflow.utils.dates import days_ago import os import cx_Oracle DAG_ID = os.path.basename(__file__).replace(".py", "") def testHook(**kwargs): cx_Oracle.init_oracle_client() version = cx_Oracle.clientversion() print("cx_Oracle.clientversion",version) return version with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: hook_test = PythonOperator( task_id="hook_test", python_callable=testHook, provide_context=True )
Erstellen Sie das benutzerdefinierte Plugin
In diesem Abschnitt wird beschrieben, wie Sie die Abhängigkeiten herunterladen, das benutzerdefinierte Plugin und die Datei plugins.zip erstellen.
Abhängigkeiten herunterladen
Amazon MWAA extrahiert den Inhalt von plugins.zip in/usr/local/airflow/plugins
auf jedem Amazon MWAA-Scheduler und Worker-Container. Dies wird verwendet, um Binärdateien zu Ihrer Umgebung hinzuzufügen. Die folgenden Schritte beschreiben, wie Sie die für das benutzerdefinierte Plugin benötigten Dateien zusammenstellen.
Rufen Sie das Amazon Linux-Container-Image ab
-
Rufen Sie in Ihrer Befehlszeile das Amazon Linux-Container-Image ab und führen Sie den Container lokal aus. Beispiele:
docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash
Ihre Befehlszeile sollte eine Bash-Befehlszeile aufrufen. Beispiele:
bash-4.2#
-
Installieren Sie die Linux-native asynchrone I/O-Funktion (libaio).
yum -y install libaio
-
Lassen Sie dieses Fenster für weitere Schritte offen. Wir werden die folgenden Dateien lokal kopieren:
lib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
.
Kundenordner herunterladen
-
Installieren Sie das Unzip-Paket lokal. Beispiele:
sudo yum install unzip
-
Erstellen Sie ein
oracle_plugin
-Verzeichnis. Beispiele:mkdir oracle_plugin cd oracle_plugin
-
Verwenden Sie den folgenden curl-Befehl, um das herunterzuladeninstantclient-basic-linux.x64-18.5.0.0.0dbru.zip
vonOracle Instant Client-Downloads für Linux x86-64 (64-Bit) . curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
-
Entpacken Sie die Datei
client.zip
. Beispiele:unzip *.zip
Extrahieren Sie Dateien aus Docker
-
Zeigen Sie in einer neuen Befehlszeile Ihre Docker-Container-ID an und notieren Sie sie. Beispiele:
docker container ls
Ihre Befehlszeile sollte alle Container und ihre IDs zurückgeben. Beispiele:
debc16fd6970
-
In deinem
oracle_plugin
Verzeichnis, entpacke daslib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
Dateien in die lokaleinstantclient_18_5
Ordner. Beispiele:docker cp debc16fd6970:/lib64/libaio.so.1 instantclient_18_5/ docker cp debc16fd6970:/lib64/libaio.so.1.0.0 instantclient_18_5/ docker cp debc16fd6970:/lib64/libaio.so.1.0.1 instantclient_18_5/
Benutzerdefiniertes Plugin
Apache Airflow führt beim Start den Inhalt von Python-Dateien im Plugins-Ordner aus. Dies wird verwendet, um Umgebungsvariablen festzulegen und zu ändern. In den folgenden Schritten wird der Beispielcode für das benutzerdefinierte Plugin beschrieben.
-
Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unter
env_var_plugin_oracle.py
.from airflow.plugins_manager import AirflowPlugin import os os.environ["LD_LIBRARY_PATH"]='/usr/local/airflow/plugins/instantclient_18_5' os.environ["DPI_DEBUG_LEVEL"]="64" class EnvVarPlugin(AirflowPlugin): name = 'env_var_plugin'
Plugins.zip
Die folgenden Schritte zeigen, wie Sie das erstellenplugins.zip
. Der Inhalt dieses Beispiels kann mit Ihren anderen Plugins und Binärdateien zu einer einzigen kombiniert werdenplugins.zip
Datei.
Zippen Sie den Inhalt des Plugin-Verzeichnisses
-
Navigieren Sie in der Befehlszeile zum
oracle_plugin
Verzeichnis. Beispiele:cd oracle_plugin
-
Zippen Sie die
instantclient_18_5
Verzeichnis in plugins.zip. Beispiele:zip -r ../plugins.zip ./
-
In Ihrer Befehlszeile sollten Sie Folgendes sehen:
oracle_plugin$ ls client.zip instantclient_18_5
-
Entferne die
client.zip
Datei. Beispiele:rm client.zip
Zippen Sie die Datei env_var_plugin_oracle.py
-
Füge das hinzu
env_var_plugin_oracle.py
Datei im Stammverzeichnis von plugins.zip. Beispiele:zip plugins.zip env_var_plugin_oracle.py
-
Ihre plugins.zip sollte jetzt Folgendes enthalten:
env_var_plugin_oracle.py instantclient_18_5/
Airflow-Konfigurationsoptionen
Wenn Sie Apache Airflow v2 verwenden, fügen Sie hinzucore.lazy_load_plugins : False
als Apache Airflow-Konfigurationsoption. Weitere Informationen finden Sie unterVerwenden von Konfigurationsoptionen zum Laden von Plugins in 2.
Als nächstes
-
Erfahren Sie, wie Sie das hochladen
requirements.txt
Datei in diesem Beispiel in Ihren Amazon S3-Bucket inPython-Abhängigkeiten installieren. -
Erfahren Sie, wie Sie den DAG-Code in diesem Beispiel auf die
dags
Ordner in Ihrem Amazon S3-Bucket inHinzufügen oder Aktualisieren von DAGs. -
Erfahre mehr darüber, wie du die hochlädst
plugins.zip
Datei in diesem Beispiel in Ihren Amazon S3-Bucket inInstallation benutzerdefinierter Plugins.