

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 plugin personalizzato per Apache Airflow PythonVirtualenvOperator
<a name="samples-virtualenv"></a>

L'esempio seguente spiega come applicare una patch ad Apache `PythonVirtualenvOperator` Airflow con un plug-in personalizzato su Amazon Managed Workflows per Apache Airflow.

**Topics**
+ [Versione](#samples-virtualenv-version)
+ [Prerequisiti](#samples-virtualenv-prereqs)
+ [Autorizzazioni](#samples-virtualenv-permissions)
+ [Requisiti](#samples-virtualenv-dependencies)
+ [Codice di esempio del plug-in personalizzato](#samples-virtualenv-plugins-code)
+ [Plugins.zip](#samples-virtualenv-pluginszip)
+ [Esempio di codice](#samples-virtualenv-code)
+ [Opzioni di configurazione di Airflow](#samples-virtualenv-airflow-config)
+ [Fasi successive](#samples-virtualenv-next-up)

## Versione
<a name="samples-virtualenv-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-virtualenv-prereqs"></a>

Per utilizzare il codice di esempio in questa pagina, avrai bisogno di quanto segue:
+ Un ambiente [Amazon MWAA](get-started.md).

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

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

## Requisiti
<a name="samples-virtualenv-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)

```
virtualenv
```

## Codice di esempio del plug-in personalizzato
<a name="samples-virtualenv-plugins-code"></a>

Apache Airflow eseguirà il contenuto dei file Python nella cartella plugins all'avvio. Questo plug-in applicherà una patch al componente integrato `PythonVirtualenvOperator` durante il processo di avvio per renderlo compatibile con Amazon MWAA. I passaggi seguenti mostrano il codice di esempio per il plug-in personalizzato.

1. Nel prompt dei comandi, accedete alla `plugins` directory nella sezione precedente. Ad esempio:

   ```
   cd plugins
   ```

1. Copiate il contenuto del seguente esempio di codice e salvatelo localmente con nome. `virtual_python_plugin.py`

   ```
   """
   Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    
   Permission is hereby granted, free of charge, to any person obtaining a copy of
   this software and associated documentation files (the "Software"), to deal in
   the Software without restriction, including without limitation the rights to
   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
   the Software, and to permit persons to whom the Software is furnished to do so.
    
   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   """
   from airflow.plugins_manager import AirflowPlugin
   import airflow.utils.python_virtualenv 
   from typing import List
   
   def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]:
       cmd = ['python3','/usr/local/airflow/.local/lib/python3.7/site-packages/virtualenv', tmp_dir]
       if system_site_packages:
           cmd.append('--system-site-packages')
       if python_bin is not None:
           cmd.append(f'--python={python_bin}')
       return cmd
   
   airflow.utils.python_virtualenv._generate_virtualenv_cmd=_generate_virtualenv_cmd
   
   class VirtualPythonPlugin(AirflowPlugin):                
       name = 'virtual_python_plugin'
   ```

## Plugins.zip
<a name="samples-virtualenv-pluginszip"></a>

I passaggi seguenti spiegano come creare il`plugins.zip`.

1. Nel prompt dei comandi, accedi alla directory contenuta `virtual_python_plugin.py` nella sezione precedente. Ad esempio:

   ```
   cd plugins
   ```

1. Comprimi il contenuto all'interno della `plugins` cartella.

   ```
   zip plugins.zip virtual_python_plugin.py
   ```

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

I passaggi seguenti descrivono come creare il codice DAG per 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. `virtualenv_test.py`

   ```
   """
   Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    
   Permission is hereby granted, free of charge, to any person obtaining a copy of
   this software and associated documentation files (the "Software"), to deal in
   the Software without restriction, including without limitation the rights to
   use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
   the Software, and to permit persons to whom the Software is furnished to do so.
    
   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
   FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
   COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
   IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   """
   from airflow import DAG
   from airflow.operators.python import PythonVirtualenvOperator
   from airflow.utils.dates import days_ago
   import os
   
   os.environ["PATH"] = os.getenv("PATH") + ":/usr/local/airflow/.local/bin"
   
   def virtualenv_fn():
       import boto3
       print("boto3 version ",boto3.__version__)
   
   with DAG(dag_id="virtualenv_test", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
       virtualenv_task = PythonVirtualenvOperator(
           task_id="virtualenv_task",
           python_callable=virtualenv_fn,
           requirements=["boto3>=1.17.43"],
           system_site_packages=False,
           dag=dag,
       )
   ```

## Opzioni di configurazione di Airflow
<a name="samples-virtualenv-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-virtualenv-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)