Creazione di un plug-in personalizzato con Oracle - Flussi di lavoro gestiti da Amazon per 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

È possibile utilizzare l'esempio di codice in questa pagina con Apache Airflow v2 in Python 3.10 e Apache Airflow v3in Python 3.11.

Prerequisiti

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

  • Un ambiente Amazon MWAA.

  • La registrazione dei lavoratori è abilitata a qualsiasi livello di registro CRITICAL o nella sezione precedente relativa all'ambiente in uso. Per ulteriori informazioni sui tipi di log di Amazon MWAA e su come gestire i gruppi di log, consulta Accesso ai log di Airflow in Amazon CloudWatch

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, fare riferimento a. Installazione delle dipendenze in Python

-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt cx_Oracle apache-airflow-providers-oracle

Esempio di codice

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

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

    cd dags
  2. Copiate il contenuto del seguente esempio di codice e salvatelo 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 in /usr/local/airflow/plugins ogni container di scheduler e worker Amazon MWAA. 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. Ad esempio:

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

    Il prompt dei comandi può richiamare una riga di comando bash. Ad esempio:

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

    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. Ad esempio:

    sudo yum install unzip
  2. Crea una directory oracle_plugin. Ad 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. Ad esempio:

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

    docker container ls

    Il prompt dei comandi può restituire tutti i contenitori e i relativi. IDs Ad esempio:

    debc16fd6970
  2. Nella 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. Ad 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 spiegano 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. Ad esempio:

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

    zip -r ../plugins.zip ./

    Il prompt dei comandi visualizza:

    oracle_plugin$ ls client.zip instantclient_18_5
  3. Rimuovi il client.zip file. Ad 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. Ad esempio:

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

    env_var_plugin_oracle.py instantclient_18_5/

Opzioni di configurazione di Airflow

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

Fasi successive