

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

# Utilizzo della piattaforma Python di Elastic Beanstalk
<a name="create-deploy-python-container"></a>

Questo argomento descrive come configurare, creare ed eseguire le applicazioni Python su Elastic Beanstalk.

AWS Elastic Beanstalk supporta una serie di rami di piattaforma per diverse versioni del linguaggio di programmazione Python. Vedi [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) nel documento *AWS Elastic Beanstalk Piattaforme* per un elenco completo.

Le applicazioni web Python possono essere eseguite dietro un server proxy con WSGI. Elastic [Beanstalk](https://gunicorn.org/) fornisce Gunicorn come server WSGI predefinito. 

È possibile aggiungere un `Procfile` al bundle di origine per specificare e configurare il server WSGI per l'applicazione. Per informazioni dettagliate, vedi [Configurazione del server WSGI con un profilo su Elastic Beanstalk](python-configuration-procfile.md).

È possibile utilizzare i file `Pipfile.lock` e `Pipfile` creati da Pipenv per specificare le dipendenze dei pacchetti Python e altri requisiti. Per informazioni dettagliate sulla definizione delle dipendenze, consulta [Specificazione delle dipendenze utilizzando un file dei requisiti su Elastic Beanstalk](python-configuration-requirements.md).

Elastic [Beanstalk offre](command-options.md) opzioni di configurazione che puoi utilizzare per personalizzare il software che viene eseguito EC2 sulle istanze nell'ambiente Elastic Beanstalk. Puoi configurare le variabili di ambiente necessarie per la tua applicazione, accedere alla rotazione dei log su Amazon S3 e mappare le cartelle nel codice sorgente dell'applicazione che contengono i file statici ai percorsi serviti dal server proxy.

Sono disponibili opzioni di configurazione specifiche della piattaforma nella console Elastic Beanstalk per la [modifica della configurazione di un ambiente in esecuzione](environment-configuration-methods-after.md). Per conservare la configurazione dell'ambiente una volta terminata, puoi utilizzare [configurazioni salvate](environment-configuration-savedconfig.md) per salvare le impostazioni e applicarle successivamente a un altro ambiente.

Per salvare le impostazioni nel codice sorgente, puoi includere i [file di configurazione](ebextensions.md). Le impostazioni nei file di configurazione vengono applicate ogni volta che crei un ambiente o distribuisci l'applicazione. Puoi inoltre utilizzare i file di configurazione per installare pacchetti, eseguire script o altre operazioni di personalizzazione delle istanze durante le distribuzioni.

Le impostazioni applicate nella console Elastic Beanstalk sostituiscono le stesse impostazioni nei file di configurazione, se esistenti. Ciò ti consente di disporre di impostazioni predefinite nei file di configurazione, sostituibili con impostazioni specifiche per l'ambiente nella console. Per ulteriori informazioni sulla precedenza e altri metodi di modifica delle impostazioni, consulta [Opzioni di configurazione](command-options.md).

Per i pacchetti Python disponibili in `pip`, puoi includere un file di requisiti nella radice del codice sorgente dell'applicazione. Elastic Beanstalk installa tutti i pacchetti delle dipendenze specificati in un file dei requisiti durante la distribuzione. Per informazioni dettagliate, vedi [Specificazione delle dipendenze utilizzando un file dei requisiti su Elastic Beanstalk](python-configuration-requirements.md).

Per informazioni dettagliate sui vari modi in cui è possibile estendere una piattaforma Elastic Beanstalk basata su Linux, consulta [Estensione delle piattaforme Elastic Beanstalk Linux](platforms-linux-extend.md).

## Configurazione dell'ambiente Python
<a name="create-deploy-python-container-console"></a>

Le impostazioni della piattaforma Python ti consentono di ottimizzare il comportamento delle tue istanze Amazon. EC2 Puoi modificare la configurazione dell'istanza Amazon dell'ambiente Elastic Beanstalk utilizzando EC2 la console Elastic Beanstalk.

Usa la console Elastic Beanstalk per configurare AWS X-Ray le impostazioni dei processi Python, abilitare, abilitare la rotazione dei log su Amazon S3 e configurare le variabili che l'applicazione può leggere dall'ambiente.

**Per configurare l'ambiente Python nella console Elastic Beanstalk**

1. Apri la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) e, **nell'elenco Regioni, seleziona la tua**. Regione AWS

1. Nel pannello di navigazione selezionare **Environments** (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

1. Nel riquadro di navigazione, seleziona **Configuration** (Configurazione).

1. Nella categoria di configurazione **Monitoring**  (Monitoraggio), scegli **Edit** (Modifica).

### Impostazioni Python
<a name="python-console-settings"></a>
+ **Proxy server (Server proxy)**: il server proxy da utilizzare nelle istanze dell'ambiente. Per impostazione predefinita, viene utilizzato nginx.
+ **WSGI Path (Percorso WSGI)**: nome del file principale dell'applicazione o il relativo percorso. Ad esempio, `application.py` o `django/wsgi.py`.
+ **NumProcesses**— Il numero di processi da eseguire su ciascuna istanza dell'applicazione.
+ **NumThreads**— Il numero di thread da eseguire in ogni processo.

### AWS X-Ray impostazioni
<a name="python-console-xray"></a>
+ Demone **X-Ray: esegue il demone** per elaborare i AWS X-Ray dati di traccia da. [SDK AWS X-Ray per Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)

### Opzioni di log
<a name="create-deploy-python-container.console.logoptions"></a>

La sezione Log Options (Opzioni di log) ha due impostazioni:
+ **Instance profile (Profilo dell'istanza)**: specifica il profilo dell'istanza che dispone dell'autorizzazione ad accedere al bucket Amazon S3 associato all'applicazione.
+ **Abilita la rotazione dei file di registro su Amazon S3**: specifica se i file di log per le EC2 istanze Amazon dell'applicazione vengono copiati nel bucket Amazon S3 associato all'applicazione.

### File statici
<a name="python-platform-staticfiles"></a>

Per migliorare le prestazioni, la sezione **Static files** (File statici) consente di configurare il server proxy affinché fornisca file statici (ad esempio, HTML o immagini) da un set di directory all'interno dell'applicazione Web. Per ogni directory, è possibile impostare il percorso virtuale per la mappatura delle directory. Quando il server proxy riceve una richiesta da un file nel percorso specificato, questo serve il file direttamente anziché instradare la richiesta all'applicazione.

Per informazioni dettagliate sulla configurazione di file statici utilizzando file di configurazione o la console Elastic Beanstalk, consulta [Fornire i file statici](environment-cfg-staticfiles.md).

Per impostazione predefinita, il server proxy in un ambiente Python serve qualsiasi file in una cartella denominata `static` nel percorso `/static`. Ad esempio, se il codice sorgente dell'applicazione contiene un file con nome `logo.png` in una cartella chiamata `static`, il server proxy lo servirà agli utenti su `subdomain.elasticbeanstalk.com/static/logo.png`. È possibile configurare mappature aggiuntive come indicato in questa sezione.

### Proprietà dell'ambiente
<a name="create-deploy-python-custom-container-envprop"></a>

Puoi utilizzare le proprietà dell'ambiente per fornire informazioni alla tua applicazione e configurare variabili di ambiente. Ad esempio, puoi creare una proprietà di ambiente denominata `CONNECTION_STRING` che specifica una stringa di connessione che la tua applicazione può utilizzare per connettersi a un database.

All'interno dell'ambiente Python in esecuzione in Elastic Beanstalk, questi valori sono accessibili tramite il dizionario `os.environ` di Python. [Per ulteriori informazioni, consulta http://docs.python. org/library/os.html](http://docs.python.org/library/os.html).

Puoi utilizzare un codice simile al seguente per accedere alle chiavi e ai parametri:

```
import os
endpoint = os.environ['API_ENDPOINT']
```

Le proprietà dell'ambiente sono inoltre in grado di fornire informazioni a un framework. Ad esempio, è possibile creare una proprietà denominata `DJANGO_SETTINGS_MODULE` per configurare Django in modo che utilizzi un modulo specifico di impostazioni. A seconda dell'ambiente, il valore potrebbe essere `development.settings`, `production.settings` e così via.

Per ulteriori informazioni, consultare [Variabili di ambiente e altre impostazioni software](environments-cfg-softwaresettings.md).

## Spazio dei nomi di configurazione di Python
<a name="python-namespaces"></a>

È possibile utilizzare un [file di configurazione](ebextensions.md) per impostare le opzioni di configurazione ed eseguire alte attività di configurazione delle istanze durante le distribuzioni. Le opzioni di configurazione possono essere [specifiche della piattaforma](command-options-specific.md) o essere applicate a [tutte le piattaforme](command-options-general.md) del servizio Elastic Beanstalk nel suo complesso. *Le opzioni di configurazione sono organizzate in namespace.*

La piattaforma Python definisce le opzioni negli spazi dei nomi `aws:elasticbeanstalk:environment:proxy`, `aws:elasticbeanstalk:environment:proxy:staticfiles` e `aws:elasticbeanstalk:container:python`.

Il seguente file di configurazione di esempio specifica le impostazioni delle opzioni di configurazione per creare una proprietà di ambiente denominata `DJANGO_SETTINGS_MODULE`, scegliere il server proxy Apache, specificare due opzioni di file statici che mappano una directory denominata `statichtml` sul percorso `/html` e una directory denominata `staticimages` sul percorso `/images` e specificare le impostazioni aggiuntive nello spazio dei nomi `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)`. Questo spazio dei nomi contiene le opzioni che consentono di specificare il percorso dello script WSGI nel tuo codice sorgente e il numero di thread e processi in esecuzione in WSGI.

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /html: statichtml
    /images: staticimages
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
    NumProcesses: 3
    NumThreads: 20
```

**Note**  
Se stai utilizzando una versione di piattaforma Python in AMI Amazon Linux (precedente ad Amazon Linux 2), sostituisci il valore `WSGIPath` con `ebdjango/wsgi.py`. Il valore nell'esempio funziona con il server Gunicorn WSGI, che non è supportato nelle versioni della piattaforma AMI Amazon Linux.
Inoltre, queste versioni della piattaforma precedenti utilizzano uno spazio dei nomi diverso per la configurazione dei file statici, ovvero `aws:elasticbeanstalk:container:python:staticfiles`. Ha gli stessi nomi di opzioni e semantica dello spazio dei nomi dei file statici standard.

I file di configurazione, supportano inoltre diverse chiavi per [modificare ulteriormente il software delle istanze del tuo ambiente](customize-containers-ec2.md). Questo esempio utilizza la chiave [pacchetti](customize-containers-ec2.md#linux-packages) per installare Memcached con `yum` e i [comandi dei container](customize-containers-ec2.md#linux-container-commands) per eseguire comandi che consentono di configurare il server durante la distribuzione:

```
packages:
  yum:
    libmemcached-devel: '0.31'

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  03wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
  99customize:
    command: "scripts/customize.sh"
```

In Elastic Beanstalk sono disponibili varie opzioni di configurazione per la personalizzazione dell'ambiente. Oltre ai file di configurazione, puoi impostare le opzioni di configurazione tramite la console, le configurazioni salvate, la CLI EB o AWS CLI. Per ulteriori informazioni, consulta [Opzioni di configurazione](command-options.md).

## L'`python3`eseguibile
<a name="python3-executable"></a>

La versione dell'`python3`eseguibile disponibile nelle EC2 istanze negli ambienti Elastic Beanstalk Python non corrisponderà sempre alla stessa versione di Python utilizzata dalla piattaforma. Ad esempio, sulla piattaforma Python 3.12 AL2 023, punta `/usr/bin/python3` a Python 3.9. Questo perché Python 3.9 è il sistema *Python* su 023. AL2 Per ulteriori informazioni, consulta [Python in AL2 023 nella Guida](https://docs.aws.amazon.com/linux/al2023/ug/python.html) per l'utente di *Amazon Linux 2023*. È possibile accedere a un eseguibile corrispondente alla versione di Python utilizzata dalla piattaforma in una posizione con versione (ad esempio`/usr/bin/python3.12`) o nella `bin` directory dell'ambiente virtuale dell'applicazione (ad esempio). `/var/app/venv/staging-LQM1lest/bin/python3` La piattaforma utilizza l'eseguibile Python corretto che corrisponde al ramo della piattaforma. 

# Configurazione del server WSGI con un profilo su Elastic Beanstalk
<a name="python-configuration-procfile"></a>

È possibile aggiungere un [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) al bundle di origine per specificare e configurare il server WSGI per l'applicazione. È possibile specificare comandi di avvio ed esecuzione personalizzati in. `Procfile`

Quando utilizzi un `Procfile`, vengono sovrascritte le opzioni dello spazio dei nomi `aws:elasticbeanstalk:container:python` impostate utilizzando i file di configurazione.

Nell'esempio seguente viene utilizzato un `Procfile` per specificare uWSGI come server e configurarlo.

**Example Procfile**  

```
web: uwsgi --http :8000 --wsgi-file application.py --master --processes 4 --threads 2
```

Nell'esempio seguente viene utilizzato un `Procfile` per configurare Gunicorn, il server WSGI predefinito.

**Example Procfile**  

```
web: gunicorn --bind :8000 --workers 3 --threads 2 project.wsgi:application
```

**Note**  
Se configuri un server WSGI diverso da Gunicorn, assicurati di specificarlo anche come dipendenza dell'applicazione, in modo che venga installato nelle istanze dell'ambiente. Per informazioni dettagliate sulla specifica delle dipendenze, consulta [Specificazione delle dipendenze utilizzando un file dei requisiti su Elastic Beanstalk](python-configuration-requirements.md).
La porta predefinita per il server WSGI è 8000. Se specifichi un numero di porta diverso nel comando `Procfile`, imposta anche la [proprietà `PORT` dell'ambiente](environments-cfg-softwaresettings.md) su questo numero di porta.

# Specificazione delle dipendenze utilizzando un file dei requisiti su Elastic Beanstalk
<a name="python-configuration-requirements"></a>

Questo argomento descrive come configurare l'applicazione per installare altri pacchetti Python richiesti. Un'applicazione Python tipica dispone di dipendenze da altri pacchetti Python di terze parti. Con la piattaforma Elastic Beanstalk Python, hai diversi modi per specificare i pacchetti Python da cui dipende la tua applicazione.

## Uso di `pip` e `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

Lo strumento standard per l'installazione di pacchetti Python è `pip`. Dispone di una funzionalità che consente di specificare tutti i pacchetti di cui hai bisogno (nonché le loro versioni) in un singolo file di requisiti. Per ulteriori informazioni sul file di requisiti, consulta [Formato del file di requisiti](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format) sul sito Web della documentazione pip.

Crea un file denominato `requirements.txt` e inseriscilo nella directory di livello superiore del tuo bundle di origine. Di seguito è riportato un file `requirements.txt` di esempio per Django.

```
Django==2.2
mysqlclient==2.0.3
```

Nel tuo ambiente di sviluppo, puoi utilizzare il comando `pip freeze` per generare il tuo file di requisiti.

```
~/my-app$ pip freeze > requirements.txt
```

Per verificare che il tuo file di requisiti contenga solo i pacchetti che sono effettivamente utilizzati dall'applicazione, usa un [ambiente virtuale](python-development-environment.md#python-common-setup-venv) che contenga solo quei pacchetti installati. Al di fuori di un ambiente virtuale, l'output di `pip freeze` includerà tutti i pacchetti `pip` installati sul computer di sviluppo, inclusi quelli forniti con il sistema operativo.

**Nota**  
Nelle versioni della piattaforma Python in AMI Amazon Linux, Elastic Beanstalk non supporta Pipenv o Pipfiles a livello nativo. Se utilizzi Pipenv per gestire le dipendenze dell'applicazione, esegui il comando seguente per generare un file `requirements.txt`.  

```
~/my-app$ pipenv lock -r > requirements.txt
```
Per ulteriori informazioni, consulta [Generating a requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt) nella documentazione di Pipenv.

## Uso di Pipenv e `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv è uno strumento di creazione pacchetti Python moderno. Combina l'installazione del pacchetto con la creazione e la gestione di un file delle dipendenze e di un virtualenv per l'applicazione. Per ulteriori informazioni, consulta [Pipenv: Python Dev Workflow for Humans](https://pipenv.readthedocs.io/en/latest/).

Pipenv mantiene due file: 
+ `Pipfile`: questo file contiene vari tipi di dipendenze e requisiti.
+ `Pipfile.lock`: questo file contiene uno snapshot della versione che abilita le build deterministiche.

Puoi crearli nell'ambiente di sviluppo e includerli nella directory di primo livello del bundle di origine che implementi in Elastic Beanstalk. Per ulteriori informazioni su questi due file, consulta [Esempio di Pipfile e PipFile.lock](https://pipenv.pypa.io/en/latest/basics/#).



Nell'esempio seguente viene utilizzato Pipenv per installare Django e il framework REST Django. Questi comandi creano i file `Pipfile` e `Pipfile.lock`.

```
~/my-app$ pipenv install django
~/my-app$ pipenv install djangorestframework
```

 

## Priorità
<a name="python-configuration-requirements.precedence"></a>

Se includi più di un file dei requisiti tra quelli descritti qui, Elastic Beanstalk ne utilizzerà uno solo. L'elenco seguente mostra la precedenza, in ordine decrescente.

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**Nota**  
A partire dalla versione della piattaforma Amazon Linux 2 del 7 marzo 2023, se fornisci più di uno di questi file, Elastic Beanstalk emetterà un messaggio sulla console indicando quale dei file di dipendenza è stato utilizzato durante una implementazione.

La seguente procedura descrive la logica seguita da Elastic Beanstalk per installare le dipendenze durante l'implementazione di un'istanza.
+ Se è presente un file `requirements.txt`, usiamo il comando `pip install -r requirements.txt`.
+ A partire dalla versione della piattaforma Amazon Linux 2 del 7 marzo 2023, se non è presente alcun file `requirements.txt` ma ce n'è uno `Pipfile.lock`, utilizziamo il comando `pipenv sync`. Prima di quella versione, usavamo `pipenv install --ignore-pipfile`.
+ Se non c'è né un file `requirements.txt` né un `Pipfile.lock`, ma è presente un `Pipfile`, usiamo il comando `pipenv install --skip-lock`.
+ Se non viene trovato nessuno dei tre file dei requisiti, non installiamo alcuna dipendenza dall'applicazione.