Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Création d'un plugin personnalisé avec Oracle
L'exemple suivant explique comment créer un plug-in personnalisé à l'aide d'Oracle pour Amazon MWAA. Il peut être combiné à d'autres plug-ins et binaires personnalisés dans votre fichier plugins.zip.
Table des matières
Version
-
L'exemple de code de cette page peut être utilisé avecApache Airflow v1dansPython 3.7
.
-
Vous pouvez utiliser l'exemple de code de cette page avecApache Airflow v2 et versions ultérieuresdansPython 3.10
.
Prérequis
Pour utiliser l'exemple de code de cette page, vous aurez besoin des éléments suivants :
-
Travailleurjournalisation activée à n'importe quel niveau de journalisation,
CRITICAL
ou plus, pour votre environnement. Pour plus d'informations sur les types de journaux Amazon MWAA et sur la façon de gérer vos groupes de journaux, consultezAfficher les journaux Airflow sur Amazon CloudWatch
Autorisations
-
Aucune autorisation supplémentaire n'est requise pour utiliser l'exemple de code de cette page.
Prérequis
Pour utiliser l'exemple de code de cette page, ajoutez les dépendances suivantes à votrerequirements.txt
. Pour en savoir plus, consultez Installation des dépendances Python.
Exemple de code
Les étapes suivantes décrivent comment créer le code DAG qui testera le plug-in personnalisé.
-
Dans votre invite de commandes, accédez au répertoire dans lequel votre code DAG est stocké. Par exemple :
cd dags
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sous
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 )
Créez le plugin personnalisé
Cette section explique comment télécharger les dépendances, créer le plugin personnalisé et le fichier plugins.zip.
Dépendances de téléchargement
Amazon MWAA va extraire le contenu du fichier plugins.zip dans/usr/local/airflow/plugins
sur chaque planificateur Amazon MWAA et chaque conteneur de travail. Ceci est utilisé pour ajouter des fichiers binaires à votre environnement. Les étapes suivantes décrivent comment assembler les fichiers nécessaires au plug-in personnalisé.
Extraire l'image du conteneur Amazon Linux
-
Dans votre invite de commande, extrayez l'image du conteneur Amazon Linux et exécutez le conteneur localement. Par exemple :
docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash
Votre invite de commande doit appeler une ligne de commande bash. Par exemple :
bash-4.2#
-
Installez la fonction d'E/S asynchrones native pour Linux (libaio).
yum -y install libaio
-
Laissez cette fenêtre ouverte pour les étapes suivantes. Nous allons copier les fichiers suivants localement :
lib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
.
Télécharger le dossier client
-
Installez le package de décompression localement. Par exemple :
sudo yum install unzip
-
Créez un répertoire
oracle_plugin
. Par exemple :mkdir oracle_plugin cd oracle_plugin
-
Utilisez la commande curl suivante pour téléchargerinstantclient-basic-linux.x64-18.5.0.0.0dbru.zip
à partir deTéléchargements d'Oracle Instant Client pour Linux x86-64 (64 bits) . curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
-
Décompressez le fichier
client.zip
. Par exemple :unzip *.zip
Extraire des fichiers depuis Docker
-
Dans une nouvelle invite de commande, affichez et notez l'ID de votre conteneur Docker. Par exemple :
docker container ls
Votre invite de commande doit renvoyer tous les conteneurs et leurs identifiants. Par exemple :
debc16fd6970
-
Dans votre
oracle_plugin
répertoire, extrayez lelib64/libaio.so.1
,lib64/libaio.so.1.0.0
,lib64/libaio.so.1.0.1
fichiers vers le localinstantclient_18_5
dossier. Par exemple :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 personnalisé
Apache Airflow exécutera le contenu des fichiers Python dans le dossier plugins au démarrage. Ceci est utilisé pour définir et modifier des variables d'environnement. Les étapes suivantes décrivent l'exemple de code pour le plug-in personnalisé.
-
Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sous
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
Les étapes suivantes montrent comment créerplugins.zip
. Le contenu de cet exemple peut être combiné avec vos autres plugins et binaires en un seulplugins.zip
dossier.
Compressez le contenu du répertoire du plugin
-
Dans votre invite de commandes, accédez au
oracle_plugin
répertoire. Par exemple :cd oracle_plugin
-
Zippez le
instantclient_18_5
répertoire dans le fichier plugins.zip. Par exemple :zip -r ../plugins.zip ./
-
Vous devriez voir ce qui suit dans votre invite de commande :
oracle_plugin$ ls client.zip instantclient_18_5
-
Supprimer le
client.zip
dossier. Par exemple :rm client.zip
Compressez le fichier env_var_plugin_oracle.py
-
Ajoutez le
env_var_plugin_oracle.py
fichier à la racine du fichier plugins.zip. Par exemple :zip plugins.zip env_var_plugin_oracle.py
-
Votre fichier plugins.zip doit maintenant inclure les éléments suivants :
env_var_plugin_oracle.py instantclient_18_5/
Options de configuration du débit d'air
Si vous utilisez Apache Airflow v2, ajoutezcore.lazy_load_plugins : False
en tant qu'option de configuration d'Apache Airflow. Pour en savoir plus, consultezUtiliser les options de configuration pour charger des plugins en 2.
Quelle est la prochaine étape ?
-
Découvrez comment charger le
requirements.txt
dans cet exemple, dans votre compartiment Amazon S3 dansInstallation des dépendances Python. -
Découvrez comment charger le code DAG de cet exemple vers le
dags
dossier dans votre compartiment Amazon S3 dansAjout ou mise à jour des DAG. -
En savoir plus sur la façon de télécharger le
plugins.zip
dans cet exemple, dans votre compartiment Amazon S3 dansInstallation de plugins personnalisés.