

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

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.

**Contents**
+ [Versione](#samples-oracle-version)
+ [Prerequisiti](#samples-oracle-prereqs)
+ [Autorizzazioni](#samples-oracle-permissions)
+ [Requisiti](#samples-oracle-dependencies)
+ [Esempio di codice](#samples-oracle-code)
+ [Create il plugin personalizzato](#samples-oracle-create-pluginszip-steps)
  + [Scarica le dipendenze](#samples-oracle-install)
  + [Plugin personalizzato](#samples-oracle-plugins-code)
  + [Plugins.zip](#samples-oracle-pluginszip)
+ [Opzioni di configurazione di Airflow](#samples-oracle-airflow-config)
+ [Fasi successive](#samples-oracle-next-up)

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

**[È possibile utilizzare l'esempio di codice in questa pagina con **Apache Airflow v2 in Python 3.10 e Apache Airflow v3**[in Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

## Prerequisiti
<a name="samples-oracle-prereqs"></a>

Per utilizzare il codice di esempio in questa pagina, avrai bisogno di quanto segue:
+ Un ambiente [Amazon MWAA](get-started.md).
+ 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 Airflow in Amazon CloudWatch](monitoring-airflow.md)

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

Non sono necessarie autorizzazioni aggiuntive per utilizzare l'esempio di codice in questa pagina.

## Requisiti
<a name="samples-oracle-dependencies"></a>

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](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
```

## Esempio di codice
<a name="samples-oracle-code"></a>

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

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

Questa sezione descrive come scaricare le dipendenze, creare il plugin personalizzato e il file plugins.zip.

### Scarica le dipendenze
<a name="samples-oracle-install"></a>

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

1. Installa la funzionalità asincrona nativa di Linux (libaio). I/O 

   ```
   yum -y install libaio
   ```

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

1. Crea una directory `oracle_plugin`. Ad esempio:

   ```
   mkdir oracle_plugin
   cd oracle_plugin
   ```

1. [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](https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip) (64 bit).](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)

   ```
   curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
   ```

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

1. Nella `oracle_plugin` directory, estrai i `lib64/libaio.so.1.0.1` file `lib64/libaio.so.1``lib64/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
<a name="samples-oracle-plugins-code"></a>

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

I passaggi seguenti spiegano come creare il`plugins.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
   ```

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

1. Rimuovi il `client.zip` file. Ad esempio:

   ```
   rm client.zip
   ```

**Comprimi il file env\$1var\$1plugin\$1oracle.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
   ```

1. Il tuo plugins.zip ora include quanto segue:

   ```
   env_var_plugin_oracle.py
   instantclient_18_5/
   ```

## Opzioni di configurazione di Airflow
<a name="samples-oracle-airflow-config"></a>

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

## Fasi successive
<a name="samples-oracle-next-up"></a>
+ Scopri come caricare il `requirements.txt` file in questo esempio nel tuo bucket Amazon S3 in. [Installazione delle dipendenze in Python](working-dags-dependencies.md)
+ Scopri come caricare il codice DAG in questo esempio nella `dags` cartella del tuo bucket Amazon S3 in. [Aggiungere o aggiornare DAGs](configuring-dag-folder.md)
+ Scopri di più su come caricare il `plugins.zip` file in questo esempio nel tuo bucket Amazon S3 in. [Installazione di plugin personalizzati](configuring-dag-import-plugins.md)