

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
<a name="samples-oracle"></a>

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.

**Contents**
+ [Version](#samples-oracle-version)
+ [Prérequis](#samples-oracle-prereqs)
+ [Autorisations](#samples-oracle-permissions)
+ [Prérequis](#samples-oracle-dependencies)
+ [Exemple de code](#samples-oracle-code)
+ [Créez le plugin personnalisé](#samples-oracle-create-pluginszip-steps)
  + [Dépendances de téléchargement](#samples-oracle-install)
  + [Plug-in personnalisé](#samples-oracle-plugins-code)
  + [Plugins.zip](#samples-oracle-pluginszip)
+ [Options de configuration d'Airflow](#samples-oracle-airflow-config)
+ [Quelle est la prochaine étape ?](#samples-oracle-next-up)

## Version
<a name="samples-oracle-version"></a>

[Vous pouvez utiliser l'exemple de code présenté sur cette page avec **Apache Airflow v2** en [Python 3.10](https://peps.python.org/pep-0619/) et **Apache Airflow v3** en Python 3.11.](https://peps.python.org/pep-0664/)

## Prérequis
<a name="samples-oracle-prereqs"></a>

Pour utiliser l'exemple de code présenté sur cette page, vous aurez besoin des éléments suivants :
+ Un [environnement Amazon MWAA.](get-started.md)
+ 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](monitoring-airflow.md)

## Autorisations
<a name="samples-oracle-permissions"></a>

Aucune autorisation supplémentaire n'est requise pour utiliser l'exemple de code présenté sur cette page.

## Prérequis
<a name="samples-oracle-dependencies"></a>

Pour utiliser l'exemple de code de cette page, ajoutez les dépendances suivantes à votre`requirements.txt`. Pour en savoir plus, reportez-vous à[Installation des dépendances Python](working-dags-dependencies.md).

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

## Exemple de code
<a name="samples-oracle-code"></a>

Les étapes suivantes décrivent comment créer le code DAG qui testera le plugin personnalisé.

1. Dans votre invite de commande, accédez au répertoire dans lequel votre code DAG est stocké. Exemples :

   ```
   cd dags
   ```

1. 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é
<a name="samples-oracle-create-pluginszip-steps"></a>

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
<a name="samples-oracle-install"></a>

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**

1. 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#
   ```

1. Installez la fonction asynchrone I/O native pour Linux (libaio).

   ```
   yum -y install libaio
   ```

1. 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**

1. Installez le package de décompression localement. Exemples :

   ```
   sudo yum install unzip
   ```

1. Créez un répertoire `oracle_plugin`. Exemples :

   ```
   mkdir oracle_plugin
   cd oracle_plugin
   ```

1. Utilisez la commande curl suivante pour télécharger le [instantclient-basic-linuxfichier .x64-18.5.0.0.0dbru.zip](https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip) depuis [Oracle](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html) 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
   ```

1. Décompressez le fichier `client.zip`. Exemples :

   ```
   unzip *.zip
   ```

**Extraire des fichiers depuis Docker**

1. 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
   ```

1. Dans votre `oracle_plugin` répertoire, extrayez les `lib64/libaio.so.1.0.1` fichiers `lib64/libaio.so.1``lib64/libaio.so.1.0.0`, dans le `instantclient_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é
<a name="samples-oracle-plugins-code"></a>

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
<a name="samples-oracle-pluginszip"></a>

Les étapes suivantes expliquent comment créer le`plugins.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**

1. Dans votre invite de commande, accédez au `oracle_plugin` répertoire. Exemples :

   ```
   cd oracle_plugin
   ```

1. 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
   ```

1. Supprimez le `client.zip` fichier. Exemples :

   ```
   rm client.zip
   ```

**Compressez le fichier env\$1var\$1plugin\$1oracle.py**

1. Ajoutez le `env_var_plugin_oracle.py` fichier à la racine du fichier plugins.zip. Exemples :

   ```
   zip plugins.zip env_var_plugin_oracle.py
   ```

1. Votre fichier plugins.zip inclut désormais les éléments suivants :

   ```
   env_var_plugin_oracle.py
   instantclient_18_5/
   ```

## Options de configuration d'Airflow
<a name="samples-oracle-airflow-config"></a>

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](configuring-env-variables.md#configuring-2.0-airflow-override).

## Quelle est la prochaine étape ?
<a name="samples-oracle-next-up"></a>
+ Découvrez comment charger le `requirements.txt` fichier dans cet exemple dans votre compartiment Amazon S3 dans[Installation des dépendances Python](working-dags-dependencies.md).
+ Découvrez comment télécharger le code DAG dans cet exemple dans le `dags` dossier de votre compartiment Amazon S3 dans[Ajouter ou mettre à jour DAGs](configuring-dag-folder.md).
+ Découvrez comment charger le `plugins.zip` fichier dans cet exemple dans votre compartiment Amazon S3 dans[Installation de plugins personnalisés](configuring-dag-import-plugins.md).