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.
Indice
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
CRITICALo 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 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.
-
Nel prompt dei comandi, accedete alla directory in cui è memorizzato il codice DAG. Ad esempio:
cd dags -
Copiate il contenuto del seguente esempio di codice e salvatelo localmente con nome.
oracle.pyfrom 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
-
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/bashIl prompt dei comandi può richiamare una riga di comando bash. Ad esempio:
bash-4.2# -
Installa la funzionalità asincrona nativa di Linux (libaio). I/O
yum -y install libaio -
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
-
Installa il pacchetto unzip localmente. Ad esempio:
sudo yum install unzip -
Crea una directory
oracle_plugin. Ad esempio:mkdir oracle_plugin cd oracle_plugin -
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 -
Decomprimi il file
client.zip. Ad esempio:unzip *.zip
Estrai file da Docker
-
In un nuovo prompt dei comandi, mostra e annota l'ID del contenitore Docker. Ad esempio:
docker container lsIl prompt dei comandi può restituire tutti i contenitori e i relativi. IDs Ad esempio:
debc16fd6970 -
Nella
oracle_plugindirectory, estrai ilib64/libaio.so.1.0.1filelib64/libaio.so.1lib64/libaio.so.1.0.0,,instantclient_18_5nella 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 nome
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
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
-
Nel prompt dei comandi, accedi alla
oracle_plugindirectory. Ad esempio:cd oracle_plugin -
Comprimi la
instantclient_18_5directory in plugins.zip. Ad esempio:zip -r ../plugins.zip ./Il prompt dei comandi visualizza:
oracle_plugin$ ls client.zip instantclient_18_5 -
Rimuovi il
client.zipfile. Ad esempio:rm client.zip
Comprimi il file env_var_plugin_oracle.py
-
Aggiungi il
env_var_plugin_oracle.pyfile alla radice del file plugins.zip. Ad esempio:zip plugins.zip env_var_plugin_oracle.py -
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
-
Scopri come caricare il
requirements.txtfile in questo esempio nel tuo bucket Amazon S3 in. Installazione delle dipendenze in Python -
Scopri come caricare il codice DAG in questo esempio nella
dagscartella del tuo bucket Amazon S3 in. Aggiungere o aggiornare DAGs -
Scopri di più su come caricare il
plugins.zipfile in questo esempio nel tuo bucket Amazon S3 in. Installazione di plugin personalizzati