Creazione di un plug-in personalizzato con Oracle - Amazon Managed Workflows for Apache Airflow

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione di un plug-in personalizzato con Oracle

L'esempio seguente illustra i passaggi per creare un plug-in personalizzato utilizzando Oracle per Amazon MWAA e può essere combinato con altri plug-in e binari personalizzati nel file plugins.zip.

Versione

Prerequisiti

Per utilizzare il codice di esempio in questa pagina, avrai bisogno di quanto segue:

Autorizzazioni

  • Non sono necessarie autorizzazioni aggiuntive per utilizzare l'esempio di codice in questa pagina.

Requisiti

Per utilizzare il codice di esempio in questa pagina, aggiungi le seguenti dipendenze al tuo. requirements.txt Per ulteriori informazioni, consulta Installazione delle dipendenze in Python.

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

Esempio di codice

I passaggi seguenti descrivono come creare il DAG codice che testerà il plug-in personalizzato.

  1. Nel prompt dei comandi, accedi alla directory in cui è memorizzato il DAG codice. Per esempio:

    cd dags
  2. Copia il contenuto del seguente esempio di codice e salvalo localmente con nome. 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 )

Create il plugin personalizzato

Questa sezione descrive come scaricare le dipendenze, creare il plugin personalizzato e il file plugins.zip.

Scarica le dipendenze

Amazon MWAA estrarrà il contenuto di plugins.zip /usr/local/airflow/plugins in ogni container Amazon MWAA scheduler e worker. Viene utilizzato per aggiungere file binari al tuo ambiente. I passaggi seguenti descrivono come assemblare i file necessari per il plug-in personalizzato.

Estrai l'immagine del contenitore Amazon Linux
  1. Nel prompt dei comandi, recupera l'immagine del contenitore Amazon Linux ed esegui il contenitore localmente. Per esempio:

    docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash

    Il prompt dei comandi dovrebbe richiamare una riga di comando bash. Per esempio:

    bash-4.2#
  2. Installa la struttura di I/O asincrona nativa di Linux (libaio).

    yum -y install libaio
  3. Tieni aperta questa finestra per i passaggi successivi. Copieremo localmente i seguenti file:lib64/libaio.so.1,lib64/libaio.so.1.0.0,lib64/libaio.so.1.0.1.

Scarica la cartella del client
  1. Installa il pacchetto unzip localmente. Per esempio:

    sudo yum install unzip
  2. Crea una directory oracle_plugin. Per esempio:

    mkdir oracle_plugin cd oracle_plugin
  3. Utilizzare il seguente comando curl per scaricare il file instantclient-basic-linux.x64-18.5.0.0.0dbru.zip da Oracle Instant Client Downloads per 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. Decomprimi il file client.zip. Per esempio:

    unzip *.zip
Estrai file da Docker
  1. In un nuovo prompt dei comandi, visualizza e annota l'ID del contenitore Docker. Per esempio:

    docker container ls

    Il prompt dei comandi dovrebbe restituire tutti i contenitori e i relativi. IDs Per esempio:

    debc16fd6970
  2. Nella tua oracle_plugin directory, estrai i lib64/libaio.so.1.0.1 file lib64/libaio.so.1lib64/libaio.so.1.0.0,, instantclient_18_5 nella cartella locale. Per esempio:

    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/

Plugin personalizzato

Apache Airflow eseguirà il contenuto dei file Python nella cartella plugins all'avvio. Viene utilizzato per impostare e modificare le variabili di ambiente. I passaggi seguenti descrivono il codice di esempio per il plug-in personalizzato.

  • Copiate il contenuto del seguente esempio di codice e salvatelo localmente con nomeenv_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

I passaggi seguenti mostrano come creare ilplugins.zip. Il contenuto di questo esempio può essere combinato con gli altri plugin e binari in un unico plugins.zip file.

Comprimi il contenuto della cartella dei plugin
  1. Nel prompt dei comandi, accedi alla oracle_plugin directory. Per esempio:

    cd oracle_plugin
  2. Comprimi la instantclient_18_5 directory in plugins.zip. Per esempio:

    zip -r ../plugins.zip ./
  3. Dovresti vedere quanto segue nel prompt dei comandi:

    oracle_plugin$ ls client.zip instantclient_18_5
  4. Rimuovi il client.zip file. Per esempio:

    rm client.zip
Comprimi il file env_var_plugin_oracle.py
  1. Aggiungi il env_var_plugin_oracle.py file alla radice del file plugins.zip. Per esempio:

    zip plugins.zip env_var_plugin_oracle.py
  2. Il tuo plugins.zip dovrebbe ora includere quanto segue:

    env_var_plugin_oracle.py instantclient_18_5/

Opzioni di configurazione del flusso d'aria

Se utilizzi Apache Airflow v2, aggiungilo core.lazy_load_plugins : False come opzione di configurazione Apache Airflow. Per saperne di più, consulta Usare le opzioni di configurazione per caricare i plugin in 2.

Fasi successive