

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à.

# Gestione delle dipendenze Python in requirements.txt
<a name="best-practices-dependencies"></a>

Questo argomento descrive come installare e gestire le dipendenze Python in un `requirements.txt` file per un ambiente Amazon Managed Workflows for Apache Airflow.

**Contents**
+ [Test DAGs con l'utilità CLI di Amazon MWAA](#best-practices-dependencies-cli-utility)
+ [Installazione delle dipendenze Python utilizzando il formato file dei requisiti PyPi .org](#best-practices-dependencies-different-ways)
  + [Opzione uno: dipendenze Python dal Python Package Index](#best-practices-dependencies-pip-extras)
  + [Opzione due: Python wheels (.whl)](#best-practices-dependencies-python-wheels)
    + [Utilizzo del `plugins.zip` file su un bucket Amazon S3](#best-practices-dependencies-python-wheels-s3)
    + [Utilizzando un file WHL ospitato su un URL](#best-practices-dependencies-python-wheels-url)
    + [Creazione di un file WHL da un DAG](#best-practices-dependencies-python-wheels-dag)
  + [Opzione tre: dipendenze Python ospitate su un repository privato PyPi conforme a /PEP-503](#best-practices-dependencies-custom-auth-url)
+ [Abilitazione dei log sulla console Amazon MWAA](#best-practices-dependencies-troubleshooting-enable)
+ [Accesso ai log sulla console Logs CloudWatch](#best-practices-dependencies-troubleshooting-view)
+ [Accesso agli errori nell'interfaccia utente di Apache Airflow](#best-practices-dependencies-troubleshooting-aa)
  + [Accedi ad Apache Airflow](#airflow-access-and-login)
+ [Scenari di esempio `requirements.txt`](#best-practices-dependencies-ex-mix-match)

## Test DAGs con l'utilità CLI di Amazon MWAA
<a name="best-practices-dependencies-cli-utility"></a>
+ L'utilità CLI (Command Line Interface) replica localmente un ambiente Amazon Managed Workflows for Apache Airflow.
+ La CLI crea localmente un'immagine del contenitore Docker simile a un'immagine di produzione Amazon MWAA. Puoi utilizzarlo per eseguire un ambiente Apache Airflow locale per sviluppare e DAGs testare plugin personalizzati e dipendenze prima della distribuzione su Amazon MWAA.
+ Per eseguire la CLI, fare riferimento a [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)on. GitHub

## Installazione delle dipendenze Python utilizzando il formato file dei requisiti PyPi .org
<a name="best-practices-dependencies-different-ways"></a>

La sezione seguente descrive i diversi modi per installare le dipendenze Python in base al PyPi formato.org [Requirements](https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format) File.

### Opzione uno: dipendenze Python dal Python Package Index
<a name="best-practices-dependencies-pip-extras"></a>

La sezione seguente descrive come specificare le dipendenze Python dall'indice dei pacchetti [Python in un file](https://pypi.org/). `requirements.txt`

------
#### [ Apache Airflow v3 ]

1. **Esegui il test localmente.** Aggiungi altre librerie in modo iterativo per trovare la giusta combinazione di pacchetti e le relative versioni, prima di creare un `requirements.txt` file. Per eseguire l'utilità CLI di Amazon MWAA, consulta on. [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub

1. **Consulta gli extra del pacchetto Apache Airflow**. Per accedere a un elenco dei pacchetti installati per Apache Airflow v3 su Amazon MWAA, consulta il sito Web. [aws-mwaa-docker-images `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) GitHub 

1. **Aggiungi una dichiarazione di vincoli.** Aggiungi il file dei vincoli per il tuo ambiente Apache Airflow v3 nella parte superiore del file. `requirements.txt` I file dei vincoli di Apache Airflow specificano le versioni del provider disponibili al momento di una versione di Apache Airflow.

    Nell'esempio seguente, sostituisci {{{environment-version}}} con il numero di versione del tuo ambiente e {{{Python-version}}} con la versione di Python compatibile con il tuo ambiente. 

    [Per informazioni sulla versione di Python compatibile con il tuo ambiente Apache Airflow, consulta le versioni di Apache Airflow.](airflow-versions.md#airflow-versions-official) 

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{{{Airflow-version}}}/constraints-{{{Python-version}}}.txt"
   ```

    Se il file dei vincoli determina che il `xyz==1.0` pacchetto non è compatibile con altri pacchetti dell'ambiente, non `pip3 install` riesce a impedire l'installazione di librerie incompatibili nell'ambiente. Se l'installazione non riesce per qualsiasi pacchetto, puoi accedere ai log degli errori per ogni componente Apache Airflow (lo scheduler, il worker e il server web) nel flusso di log corrispondente su Logs. CloudWatch Per ulteriori informazioni sui tipi di registro, fare riferimento a. [Accesso ai log Airflow in Amazon CloudWatch](monitoring-airflow.md) 

1. **Pacchetti Apache Airflow**. Aggiungi gli [extra del pacchetto e la](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) versione (). `==` Questo aiuta a evitare che pacchetti con lo stesso nome, ma con una versione diversa, vengano installati nell'ambiente.

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Librerie Python**. Aggiungi il nome del pacchetto e la versione (`==`) nel tuo `requirements.txt` file. In questo modo si evita l'applicazione automatica di future interruzioni del [PyPisito .org](https://pypi.org).

   ```
   {{library}} == {{version}}
   ```  
**Example Boto3 e psycopg2-binary**  

   Questo esempio viene fornito a scopo dimostrativo. Le librerie boto e psycopg2-binary sono incluse nell'installazione di base per Apache Airflow v3 e non devono essere specificate in un file. `requirements.txt`

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   [Se viene specificato un pacchetto senza una versione, Amazon MWAA installa la versione più recente del pacchetto da .org. PyPi](https://pypi.org) Questa versione può entrare in conflitto con altri pacchetti presenti nel tuo. `requirements.txt`

------
#### [ Apache Airflow v2 ]

1. **Esegui il test localmente**. Aggiungi altre librerie in modo iterativo per trovare la giusta combinazione di pacchetti e le relative versioni, prima di creare un `requirements.txt` file. Per eseguire l'utilità CLI di Amazon MWAA, consulta on. [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) GitHub

1. **Consulta gli extra del pacchetto Apache Airflow**. Per accedere a un elenco dei pacchetti installati per Apache Airflow v2 su Amazon MWAA, accedi al sito Web. [aws-mwaa-docker-images `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) GitHub 

1. **Aggiungi una dichiarazione di vincoli.** Aggiungi il file dei vincoli per il tuo ambiente Apache Airflow v2 nella parte superiore del file. `requirements.txt` I file dei vincoli di Apache Airflow specificano le versioni del provider disponibili al momento di una versione di Apache Airflow.

    A partire da Apache Airflow v2.7.2, il file dei requisiti deve includere una dichiarazione. `--constraint` Se non fornisci un vincolo, Amazon MWAA te ne specificherà uno per garantire che i pacchetti elencati nei tuoi requisiti siano compatibili con la versione di Apache Airflow che stai utilizzando. 

   Nell'esempio seguente, sostituisci {{{environment-version}}} con il numero di versione del tuo ambiente e {{{Python-version}}} con la versione di Python compatibile con il tuo ambiente.

   [Per informazioni sulla versione di Python compatibile con il tuo ambiente Apache Airflow, consulta le versioni di Apache Airflow.](airflow-versions.md#airflow-versions-official)

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{{{Airflow-version}}}/constraints-{{{Python-version}}}.txt"
   ```

   Se il file dei vincoli determina che il `xyz==1.0` pacchetto non è compatibile con altri pacchetti dell'ambiente, non `pip3 install` riesce a impedire l'installazione di librerie incompatibili nell'ambiente. Se l'installazione non riesce per qualsiasi pacchetto, puoi accedere ai log degli errori per ogni componente Apache Airflow (lo scheduler, il worker e il server web) nel flusso di log corrispondente su Logs. CloudWatch Per ulteriori informazioni sui tipi di registro, fare riferimento a. [Accesso ai log Airflow in Amazon CloudWatch](monitoring-airflow.md)

1. **Pacchetti Apache Airflow**. Aggiungi gli [extra del pacchetto e la](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) versione (). `==` Questo aiuta a evitare che pacchetti con lo stesso nome, ma con una versione diversa, vengano installati nell'ambiente.

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Librerie Python**. Aggiungi il nome del pacchetto e la versione (`==`) nel tuo `requirements.txt` file. In questo modo si evita l'applicazione automatica di future interruzioni del [PyPisito .org](https://pypi.org).

   ```
   {{library}} == {{version}}
   ```  
**Example Boto3 e psycopg2-binary**  

   Questo esempio viene fornito a scopo dimostrativo. Le librerie boto e psycopg2-binary sono incluse nell'installazione di base di Apache Airflow v2 e non devono essere specificate in un file. `requirements.txt`

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   [Se viene specificato un pacchetto senza una versione, Amazon MWAA installa la versione più recente del pacchetto da .org. PyPi](https://pypi.org) Questa versione può entrare in conflitto con altri pacchetti presenti nel tuo. `requirements.txt`

------

### Opzione due: Python wheels (.whl)
<a name="best-practices-dependencies-python-wheels"></a>

Una ruota Python è un formato di pacchetto progettato per spedire librerie con artefatti compilati. I pacchetti wheel offrono diversi vantaggi come metodo per installare le dipendenze in Amazon MWAA:
+ **Installazione più rapida**: i file WHL vengono copiati nel contenitore come singolo ZIP e quindi installati localmente, senza dover scaricare ciascuno di essi.
+ **Meno conflitti**: è possibile determinare in anticipo la compatibilità delle versioni dei pacchetti. Di conseguenza, non è necessario elaborare in modo ricorsivo versioni compatibili. `pip`
+ **Maggiore resilienza**: con le librerie ospitate esternamente, i requisiti a valle possono cambiare, con conseguente incompatibilità di versione tra i contenitori in un ambiente Amazon MWAA. Non dipendendo da una fonte esterna per le dipendenze, ogni contenitore ha le stesse librerie indipendentemente dal momento in cui viene creata l'istanza di ogni contenitore.

Consigliamo i seguenti metodi per installare le dipendenze Python da un archivio Python wheel () nel tuo. `.whl` `requirements.txt`

**Topics**
+ [Utilizzo del `plugins.zip` file su un bucket Amazon S3](#best-practices-dependencies-python-wheels-s3)
+ [Utilizzando un file WHL ospitato su un URL](#best-practices-dependencies-python-wheels-url)
+ [Creazione di un file WHL da un DAG](#best-practices-dependencies-python-wheels-dag)

#### Utilizzo del `plugins.zip` file su un bucket Amazon S3
<a name="best-practices-dependencies-python-wheels-s3"></a>

Lo scheduler, i worker e il server web di Apache Airflow (per Apache Airflow v2.2.2 e versioni successive) cercano plugin personalizzati durante l'avvio nel contenitore Fargate gestito per il vostro ambiente in. AWS`/usr/local/airflow/plugins/{{*}}` Questo processo inizia prima dell'avvio del servizio Amazon MWAA `pip3 install -r requirements.txt` for Python e del servizio Apache Airflow. Un `plugins.zip` file può essere utilizzato per tutti i file che non si desidera modificare continuamente durante l'esecuzione dell'ambiente o per i quali non si desidera concedere l'accesso agli utenti che scrivono. DAGs Ad esempio, i file della ruota della libreria Python, i file PEM dei certificati e i file YAML di configurazione.

La sezione seguente descrive come installare una ruota contenuta nel `plugins.zip` file sul tuo bucket Amazon S3.

1. **Scarica i file WHL necessari**. Puoi utilizzarli [https://pip.pypa.io/en/stable/cli/pip_download/](https://pip.pypa.io/en/stable/cli/pip_download/)con quelli esistenti `requirements.txt` in Amazon MWAA o in un [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)altro contenitore [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2) per risolvere e scaricare i file di Python wheel necessari.

   ```
   pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins"
   cd "{{$AIRFLOW_HOME}}/plugins"
   zip "{{$AIRFLOW_HOME}}/plugins.zip" *
   ```

1. **Specificate il percorso nel vostro. `requirements.txt`** Specificate la directory dei plugins nella parte superiore del file requirements.txt usando [https://pip.pypa.io/en/stable/cli/pip_install/#install-find-links](https://pip.pypa.io/en/stable/cli/pip_install/#install-find-links)e chiedete di `pip` non installarlo da altre fonti utilizzando [https://pip.pypa.io/en/stable/cli/pip_install/#install-no-index](https://pip.pypa.io/en/stable/cli/pip_install/#install-no-index), come elencato nel codice seguente:

   ```
   --find-links /usr/local/airflow/plugins
   --no-index
   ```  
**Example ruota in requirements.txt**  

   L'esempio seguente presuppone che tu abbia caricato la ruota in un `plugins.zip` file nella radice del tuo bucket Amazon S3. Esempio:

   ```
   --find-links /usr/local/airflow/plugins
   --no-index
   
   numpy
   ```

   Amazon MWAA recupera la `numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl` ruota dalla `plugins` cartella e la installa nel tuo ambiente.

#### Utilizzando un file WHL ospitato su un URL
<a name="best-practices-dependencies-python-wheels-url"></a>

La sezione seguente descrive come installare una ruota ospitata su un URL. L'URL deve essere accessibile pubblicamente o dall'interno del VPC Amazon personalizzato specificato per il tuo ambiente Amazon MWAA.
+ **Fornisci un URL**. Fornisci l'URL a una ruota nel tuo`requirements.txt`.  
**Example archivio wheel su un URL pubblico**  

  L'esempio seguente scarica una ruota da un sito pubblico.

  ```
  --find-links https://files.pythonhosted.org/packages/
  --no-index
  ```

  Amazon MWAA recupera la ruota dall'URL specificato e la installa nel tuo ambiente.
**Nota**  
URLs non sono accessibili da server Web privati che installano i requisiti in Amazon MWAA v2.2.2 e versioni successive.

#### Creazione di un file WHL da un DAG
<a name="best-practices-dependencies-python-wheels-dag"></a>

Se disponi di un server Web privato che utilizza Apache Airflow v2.2.2 o versione successiva e non riesci a installare i requisiti perché il tuo ambiente non ha accesso a repository esterni, puoi utilizzare il seguente DAG per prendere i requisiti Amazon MWAA esistenti e impacchettarli su Amazon S3:

```
from airflow import DAG
 from airflow.operators.bash_operator import BashOperator
 from airflow.utils.dates import days_ago
					
 S3_BUCKET = 'my-s3-bucket'
 S3_KEY = 'backup/plugins_whl.zip' 
					
 with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
 cli_command = BashOperator(
 task_id="bash_command",
 bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://{{amzn-s3-demo-bucket}}/{{{S3_KEY}}}"
)
```

Dopo aver eseguito il DAG, usa questo nuovo file come Amazon MWAA`plugins.zip`, facoltativamente, impacchettato con altri plugin. Quindi, aggiorna il file preceduto da e senza aggiungere. `requirements.txt` `--find-links /usr/local/airflow/plugins` `--no-index` `--constraint`

Questo metodo è possibile utilizzare per utilizzare le stesse librerie offline.

### Opzione tre: dipendenze Python ospitate su un repository privato PyPi conforme a /PEP-503
<a name="best-practices-dependencies-custom-auth-url"></a>

La sezione seguente descrive come installare un extra Apache Airflow ospitato su un URL privato con autenticazione.

1. Aggiungi nome utente e password come opzioni di configurazione di [Apache Airflow](configuring-env-variables.md). Esempio:
   + `foo.user` : `{{YOUR_USER_NAME}}`
   + `foo.pass` : `{{YOUR_PASSWORD}}`

1. Crea il tuo file. `requirements.txt` Sostituisci i segnaposto nell'esempio seguente con il tuo URL privato e il nome utente e la password che hai aggiunto come opzioni di configurazione di Apache [Airflow](configuring-env-variables.md). Esempio:

   ```
   --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
   ```

1. Aggiungi eventuali librerie aggiuntive al tuo file. `requirements.txt` Esempio:

   ```
   --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
   my-private-package==1.2.3
   ```

## Abilitazione dei log sulla console Amazon MWAA
<a name="best-practices-dependencies-troubleshooting-enable"></a>

Il [ruolo di esecuzione](mwaa-create-role.md) per il tuo ambiente Amazon MWAA richiede l'autorizzazione per inviare log a Logs. CloudWatch Per aggiornare le autorizzazioni di un ruolo di esecuzione, consulta. [Ruolo di esecuzione di Amazon MWAA](mwaa-create-role.md)

È possibile abilitare i log di Apache Airflow a livello `INFO``WARNING`,, `ERROR` o. `CRITICAL` Quando scegli un livello di log, Amazon MWAA invia i log per quel livello e tutti i livelli di gravità più elevati. Ad esempio, se abiliti i log a `INFO` livello, Amazon MWAA invia `INFO` log e `WARNING``ERROR`, e livelli di `CRITICAL` log a Logs. CloudWatch Consigliamo di abilitare i log di Apache Airflow al livello che consente `INFO` allo scheduler di accedere ai log ricevuti per. `requirements.txt`

![Questa immagine mostra come abilitare i log a livello INFO.](http://docs.aws.amazon.com/it_it/mwaa/latest/userguide/images/mwaa-console-logs-info.png)


## Accesso ai log sulla console Logs CloudWatch
<a name="best-practices-dependencies-troubleshooting-view"></a>

Puoi accedere ai log di Apache Airflow per lo scheduler che pianifica i flussi di lavoro e analizza la cartella. `dags` I passaggi seguenti descrivono come aprire il gruppo di log per lo scheduler sulla console Amazon MWAA e accedere ai log di Apache Airflow sulla console Logs. CloudWatch 

**Per accedere ai log di un `requirements.txt`**

1. Apri la pagina [Ambienti](https://console.aws.amazon.com/mwaa/home#/environments) sulla console Amazon MWAA.

1. Scegli un ambiente.

1. Scegli il **gruppo di log dello scheduler Airflow** nel riquadro **Monitoraggio**.

1. Scegli il `requirements_install_ip` log in **Log** Streams.

1. Fate riferimento all'elenco dei pacchetti che sono stati installati nell'ambiente all'indirizzo`/usr/local/airflow/.local/bin`. Esempio:

   ```
   Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1))
   Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl  
   Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
   ```

1. Controlla l'elenco dei pacchetti e verifica se qualcuno di questi ha riscontrato un errore durante l'installazione. Se qualcosa è andato storto, potresti ricevere un errore simile al seguente:

   ```
   2021-03-05T14:34:42.731-07:00
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   ```

## Accesso agli errori nell'interfaccia utente di Apache Airflow
<a name="best-practices-dependencies-troubleshooting-aa"></a>

Puoi anche controllare l'interfaccia utente di Apache Airflow per identificare se un errore è correlato a un altro problema. L'errore più comune che puoi riscontrare con Apache Airflow su Amazon MWAA è:

```
Broken DAG: No module named {{x}}
```

Se trovi questo errore nell'interfaccia utente di Apache Airflow, è probabile che nel file manchi una dipendenza richiesta. `requirements.txt`

### Accedi ad Apache Airflow
<a name="airflow-access-and-login"></a>

Hai bisogno [Politica di accesso all'interfaccia utente di Apache Airflow: Amazon MWAAWeb ServerAccess](access-policies.md#web-ui-access) delle autorizzazioni per il tuo Account AWS in AWS Identity and Access Management (IAM) per accedere all'interfaccia utente di Apache Airflow.

**Per accedere all'interfaccia utente di Apache Airflow**

1. Apri la pagina [Ambienti](https://console.aws.amazon.com/mwaa/home#/environments) sulla console Amazon MWAA.

1. Scegli un ambiente.

1. Scegli **Open Airflow UI**.

## Scenari di esempio `requirements.txt`
<a name="best-practices-dependencies-ex-mix-match"></a>

Puoi mescolare e abbinare diversi formati nel tuo`requirements.txt`. L'esempio seguente utilizza una combinazione dei diversi modi per installare gli extra.

**Example Extra su PyPi .org e un URL pubblico**  
È necessario utilizzare l'`--index-url`opzione quando si specificano i pacchetti da PyPi .org, oltre ai pacchetti su un URL pubblico, come un repository personalizzato conforme a PEP 503. URLs  

```
aws-batch == 0.6
				phoenix-letter >= 0.3
				
				--index-url http://dist.repoze.org/zope2/2.10/simple
				zopelib
```