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 les étapes de création d'un plug-in personnalisé à l'aide d'Oracle pour Amazon MWAA et peut être combiné avec d'autres plug-ins et binaires personnalisés dans votre fichier plugins.zip.
Table des matières
Version
Vous pouvez utiliser l'exemple de code présenté sur cette page avec Apache Airflow v2 en Python 3.10
Prérequis
Pour utiliser l'exemple de code présenté sur cette page, vous aurez besoin des éléments suivants :
-
La journalisation des travailleurs est activée à n'importe quel niveau de journal,
CRITICAL
ou dans la section précédente 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, consultez Accès aux journaux Airflow sur Amazon CloudWatch
Autorisations
Aucune autorisation supplémentaire n'est requise pour utiliser l'exemple de code présenté sur cette page.
Prérequis
Pour utiliser l'exemple de code de cette page, ajoutez les dépendances suivantes à votrerequirements.txt
. Pour en savoir plus, reportez-vous àInstallation des dépendances Python.
-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt cx_Oracle apache-airflow-providers-oracle
Exemple de code
Les étapes suivantes décrivent comment créer le code DAG qui testera le plugin personnalisé.
-
Dans votre invite de commande, accédez au répertoire dans lequel votre code DAG est stocké. Exemples :
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 décrit 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 extraira le contenu du fichier plugins.zip dans /usr/local/airflow/plugins
chaque planificateur et conteneur de travail Amazon MWAA. Ceci est utilisé pour ajouter des fichiers binaires à votre environnement. Les étapes suivantes décrivent comment assembler les fichiers nécessaires au plugin 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. Exemples :
docker pull amazonlinux docker run -it amazonlinux:latest /bin/bash
Votre invite de commande peut appeler une ligne de commande bash. Exemples :
bash-4.2#
-
Installez la fonction asynchrone I/O native pour Linux (libaio).
yum -y install libaio
-
Gardez cette fenêtre ouverte pour les étapes suivantes. Nous copierons 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. Exemples :
sudo yum install unzip
-
Créez un répertoire
oracle_plugin
. Exemples :mkdir oracle_plugin cd oracle_plugin
-
Utilisez la commande curl suivante pour télécharger le instantclient-basic-linuxfichier .x64-18.5.0.0.0dbru.zip
depuis Oracle Instant Client Downloads 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
. Exemples :unzip *.zip
Extraire des fichiers depuis Docker
-
Dans une nouvelle invite de commande, affichez et notez votre identifiant de conteneur Docker. Exemples :
docker container ls
Votre invite de commande peut renvoyer tous les conteneurs et leurs IDs. Exemples :
debc16fd6970
-
Dans votre
oracle_plugin
répertoire, extrayez leslib64/libaio.so.1.0.1
fichierslib64/libaio.so.1
lib64/libaio.so.1.0.0
, dans leinstantclient_18_5
dossier local. Exemples :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/
Plug-in personnalisé
Apache Airflow exécutera le contenu des fichiers Python dans le dossier des plugins au démarrage. Ceci est utilisé pour définir et modifier les variables d'environnement. Les étapes suivantes décrivent l'exemple de code du plugin 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 expliquent comment créer leplugins.zip
. Le contenu de cet exemple peut être combiné avec vos autres plugins et fichiers binaires dans un seul plugins.zip
fichier.
Compressez le contenu du répertoire du plugin
-
Dans votre invite de commande, accédez au
oracle_plugin
répertoire. Exemples :cd oracle_plugin
-
Compressez le
instantclient_18_5
répertoire dans le fichier plugins.zip. Exemples :zip -r ../plugins.zip ./
Votre invite de commande affiche :
oracle_plugin$ ls client.zip instantclient_18_5
-
Supprimez le
client.zip
fichier. Exemples :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. Exemples :zip plugins.zip env_var_plugin_oracle.py
-
Votre fichier plugins.zip inclut désormais les éléments suivants :
env_var_plugin_oracle.py instantclient_18_5/
Options de configuration d'Airflow
Si vous utilisez Apache Airflow v2, ajoutez-le en core.lazy_load_plugins : False
tant qu'option de configuration d'Apache Airflow. Pour en savoir plus, reportez-vous à la section Utilisation des options de configuration pour charger des plug-ins en 2.
Quelle est la prochaine étape ?
-
Découvrez comment charger le
requirements.txt
fichier dans cet exemple dans votre compartiment Amazon S3 dansInstallation des dépendances Python. -
Découvrez comment télécharger le code DAG dans cet exemple dans le
dags
dossier de votre compartiment Amazon S3 dansAjouter ou mettre à jour DAGs. -
Découvrez comment charger le
plugins.zip
fichier dans cet exemple dans votre compartiment Amazon S3 dansInstallation de plugins personnalisés.