Ein benutzerdefiniertes Plugin mit Oracle erstellen - 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.

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.

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:

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.

Apache Airflow v2
-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt cx_Oracle apache-airflow-providers-oracle
Apache Airflow v1
cx_Oracle==8.1.0 apache-airflow[oracle]==1.10.12

Codebeispiel

In den folgenden Schritten wird beschrieben, wie Sie den DAG-Code erstellen, mit dem das benutzerdefinierte Plugin getestet wird.

  1. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem Ihr DAG-Code gespeichert ist. Beispiele:

    cd dags
  2. Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unteroracle.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/pluginsauf 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
  1. 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#
  2. Installieren Sie die Linux-native asynchrone I/O-Funktion (libaio).

    yum -y install libaio
  3. 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
  1. Installieren Sie das Unzip-Paket lokal. Beispiele:

    sudo yum install unzip
  2. Erstellen Sie ein oracle_plugin-Verzeichnis. Beispiele:

    mkdir oracle_plugin cd oracle_plugin
  3. Verwenden Sie den folgenden curl-Befehl, um das herunterzuladeninstantclient-basic-linux.x64-18.5.0.0.0dbru.zipvonOracle 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
  4. Entpacken Sie die Datei client.zip. Beispiele:

    unzip *.zip
Extrahieren Sie Dateien aus Docker
  1. 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
  2. In deinemoracle_pluginVerzeichnis, entpacke daslib64/libaio.so.1,lib64/libaio.so.1.0.0,lib64/libaio.so.1.0.1Dateien in die lokaleinstantclient_18_5Ordner. 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 unterenv_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.zipDatei.

Zippen Sie den Inhalt des Plugin-Verzeichnisses
  1. Navigieren Sie in der Befehlszeile zumoracle_pluginVerzeichnis. Beispiele:

    cd oracle_plugin
  2. Zippen Sie dieinstantclient_18_5Verzeichnis in plugins.zip. Beispiele:

    zip -r ../plugins.zip ./
  3. In Ihrer Befehlszeile sollten Sie Folgendes sehen:

    oracle_plugin$ ls client.zip instantclient_18_5
  4. Entferne dieclient.zipDatei. Beispiele:

    rm client.zip
Zippen Sie die Datei env_var_plugin_oracle.py
  1. Füge das hinzuenv_var_plugin_oracle.pyDatei im Stammverzeichnis von plugins.zip. Beispiele:

    zip plugins.zip env_var_plugin_oracle.py
  2. 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 : Falseals Apache Airflow-Konfigurationsoption. Weitere Informationen finden Sie unterVerwenden von Konfigurationsoptionen zum Laden von Plugins in 2.

Als nächstes