

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.

# Utilisation de la plateforme Python Elastic Beanstalk
<a name="create-deploy-python-container"></a>

Cette rubrique explique comment configurer, créer et exécuter vos applications Python sur Elastic Beanstalk.

AWS Elastic Beanstalk prend en charge un certain nombre de branches de plate-forme pour différentes versions du langage de programmation Python. Voir [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) dans le document *AWS Elastic Beanstalk Platforms* pour une liste complète.

Les applications Web Python peuvent s'exécuter derrière un serveur proxy avec WSGI. Elastic [Beanstalk](https://gunicorn.org/) fournit Gunicorn comme serveur WSGI par défaut. 

Vous pouvez ajouter un `Procfile` à votre solution groupée source pour spécifier et configurer le serveur WSGI pour votre application. Pour en savoir plus, consultez [Configuration du serveur WSGI avec un profil sur Elastic Beanstalk](python-configuration-procfile.md).

Vous pouvez utiliser les fichiers `Pipfile.lock` et `Pipfile` créés par Pipenv pour spécifier les dépendances du package Python et d'autres exigences. Pour plus d'informations sur la spécification des dépendances, consultez [Spécification des dépendances à l'aide d'un fichier d'exigences sur Elastic Beanstalk](python-configuration-requirements.md).

Elastic [Beanstalk propose](command-options.md) des options de configuration que vous pouvez utiliser pour personnaliser le logiciel qui s'exécute EC2 sur les instances de votre environnement Elastic Beanstalk. Vous pouvez configurer des variables d'environnement nécessaires pour votre application, activer la rotation des journaux sur Amazon S3 et mapper des dossiers dans la source de votre application contenant des fichiers statiques vers des chemins desservis par le serveur proxy.

Des options de configuration sont disponibles dans la console Elastic Beanstalk pour [modifier la configuration d'un environnement en cours d'exécution](environment-configuration-methods-after.md). Pour éviter de perdre la configuration de votre environnement en le résiliant, vous pouvez utiliser des [configurations enregistrées](environment-configuration-savedconfig.md) pour enregistrer vos paramètres et les appliquer par la suite à un autre environnement.

Pour enregistrer les paramètres dans votre code source, vous pouvez inclure des [fichiers de configuration](ebextensions.md). Les paramètres des fichiers de configuration sont appliquées chaque fois que vous créez un environnement ou que vous déployez votre application. Vous pouvez également utiliser des fichiers de configuration pour installer des packages, exécuter des scripts ou effectuer d'autres opérations de personnalisation d'instance lors des déploiements.

Les paramètres appliqués dans la console Elastic Beanstalk remplacent les mêmes paramètres des fichiers de configuration, s'ils existent. Cela vous permet d'utiliser les paramètres par défaut dans les fichiers de configuration et de les remplacer par des paramètres spécifiques à l'environnement dans la console. Pour plus d'informations sur la priorité et les autres méthodes de modification des paramètres, consultez [Options de configuration](command-options.md).

Pour les packages Python disponibles à partir de `pip`, vous pouvez également inclure un fichier d'exigences dans la racine du code source de votre application. Elastic Beanstalk installe tous les packages de dépendance spécifiés dans un fichier de configuration lors du déploiement. Pour en savoir plus, consultez [Spécification des dépendances à l'aide d'un fichier d'exigences sur Elastic Beanstalk](python-configuration-requirements.md).

Pour plus d'informations sur les différentes manières d'étendre une plateforme Elastic Beanstalk basée sur Linux, consultez [Extension des plateformes Linux Elastic Beanstalk](platforms-linux-extend.md).

## Configuration de votre environnement Python
<a name="create-deploy-python-container-console"></a>

Les paramètres de la plateforme Python vous permettent d'affiner le comportement de vos EC2 instances Amazon. Vous pouvez modifier la configuration de l'instance Amazon de l'environnement Elastic Beanstalk à l'aide EC2 de la console Elastic Beanstalk.

Utilisez la console Elastic Beanstalk pour configurer les AWS X-Ray paramètres des processus Python, activer, activer la rotation des journaux vers Amazon S3 et configurer les variables que votre application peut lire depuis l'environnement.

**Pour configurer votre environnement Python dans la console Elastic Beanstalk**

1. Ouvrez la console [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk), puis **dans la liste des régions, sélectionnez votre**. Région AWS

1. Dans le panneau de navigation, choisissez **Environments** (Environnements), puis choisissez le nom de votre environnement dans la liste.

1. Dans le panneau de navigation, choisissez **Configuration**.

1. Dans la catégorie de configuration **Mises à jour, surveillance et journalisation**, sélectionnez **Modifier**.

### Paramètres Python
<a name="python-console-settings"></a>
+ **Proxy server (Serveur proxy)** – Serveur proxy à utiliser sur vos instances d'environnement. Le serveur nginx est utilisé par défaut.
+ **Chemin WSGI** – Nom du chemin d'accès à votre fichier d'application principal. Par exemple, `application.py` ou `django/wsgi.py`.
+ **NumProcesses**— Le nombre de processus à exécuter sur chaque instance d'application.
+ **NumThreads**— Le nombre de threads à exécuter dans chaque processus.

### AWS X-Ray paramètres
<a name="python-console-xray"></a>
+ **Démon X-Ray** — Exécutez le AWS X-Ray démon pour traiter les données de trace provenant du. [Kit SDK AWS X-Ray pour Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)

### Options du journal
<a name="create-deploy-python-container.console.logoptions"></a>

La section Options du journal a deux paramètres :
+ **Instance profile (Profil d'instance)** – Spécifie le profil d'instance qui est autorisé à accéder au compartiment Amazon S3 associé à votre application.
+ **Activer la rotation des fichiers journaux vers Amazon S3** : indique si les fichiers journaux des EC2 instances Amazon de votre application sont copiés dans le compartiment Amazon S3 associé à votre application.

### Fichiers statiques
<a name="python-platform-staticfiles"></a>

Pour améliorer les performances, la section des **Fichiers statiques** vous permet de configurer le serveur proxy pour proposer des fichiers statiques (HTML ou images, par exemple) à partir d'un ensemble de répertoires dans votre application web. Pour chaque répertoire, vous définissez le chemin virtuel sur le mappage de répertoires. Lorsque le serveur proxy reçoit une demande pour un fichier dans le chemin spécifié, il fournit le fichier directement au lieu d'acheminer la demande vers votre application.

Pour en savoir plus sur la configuration des fichiers statiques à l'aide des fichiers de configuration ou de la console Elastic Beanstalk, consultez [Service de fichiers statiques](environment-cfg-staticfiles.md).

Par défaut, le serveur proxy d'un environnement Python sert tous les fichiers dans un dossier nommé `static` sur le chemin d'accès `/static`. Par exemple, si votre code source d'application contient un fichier nommé `logo.png` dans un dossier nommé `static`, le serveur proxy le sert aux utilisateurs dans `subdomain.elasticbeanstalk.com/static/logo.png`. Vous pouvez configurer d'autres mappages comme expliqué dans cette section.

### Propriétés de l'environnement
<a name="create-deploy-python-custom-container-envprop"></a>

Vous pouvez utiliser les propriétés de l'environnement afin de fournir des informations à votre application et de configurer des variables d'environnement. Par exemple, vous pouvez créer une propriété de l'environnement nommée `CONNECTION_STRING` qui spécifie une chaîne de connexion que votre application peut utiliser pour se connecter à une base de données.

A l'intérieur de l'environnement Python s'exécutant dans Elastic Beanstalk, ces valeurs sont accessibles à l'aide du dictionnaire `os.environ` Python. Pour plus d'informations, consultez [http://docs.python. org/library/os.html](http://docs.python.org/library/os.html).

Vous pouvez utiliser un code similaire au suivant pour accéder aux clés et aux paramètres :

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

Les propriétés de l'environnement peuvent également fournir des informations à une infrastructure. Par exemple, vous pouvez créer une propriété nommée `DJANGO_SETTINGS_MODULE` pour configurer Django pour utiliser un module de paramètres spécifique. Selon l'environnement, cette valeur peut être `development.settings`, `production.settings`, etc.

Pour plus d’informations, consultez [Variables d'environnement et autres paramètres du logiciel](environments-cfg-softwaresettings.md).

## Espaces de noms de la configuration Python
<a name="python-namespaces"></a>

Vous pouvez utiliser un [fichier de configuration](ebextensions.md) pour définir des options de configuration et exécuter d'autres tâches de configuration d'instance pendant les déploiements. Les options de configuration peuvent être [spécifiques à la plate-forme](command-options-specific.md) ou s'appliquer à [toutes les plateformes](command-options-general.md) du service Elastic Beanstalk dans son ensemble. Les options de configuration sont organisées en *espaces de noms.*

La plateforme Python définit des options dans les espaces de noms `aws:elasticbeanstalk:environment:proxy`, `aws:elasticbeanstalk:environment:proxy:staticfiles` et `aws:elasticbeanstalk:container:python`.

L'exemple suivant de fichier de configuration spécifie des paramètres d'option de configuration pour créer une propriété d'environnement nommée `DJANGO_SETTINGS_MODULE`, deux options de fichiers statiques qui mappent un répertoire nommé `statichtml` avec le chemin d'accès `/html`, un répertoire nommé `staticimages` avec le chemin d'accès `/images` et des paramètres supplémentaires dans l'espace de noms `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)`. Cet espace de noms contient des options qui vous permettent de spécifier l'emplacement du script WSGI dans votre code source et le nombre de threads et de processus à exécuter dans 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
```

**Remarques**  
Si vous utilisez une version de plateforme AMI Python Amazon Linux (antérieure à Amazon Linux 2), remplacez la valeur `WSGIPath` par `ebdjango/wsgi.py`. La valeur de l'exemple fonctionne avec le serveur WSGI Gunicorn, qui n'est pas pris en charge sur les versions de la plateforme AMI Amazon Linux.
De plus, ces anciennes versions de plateforme utilisent un espace de noms différent pour configurer les fichiers statiques `aws:elasticbeanstalk:container:python:staticfiles`. Il a les mêmes noms d'option et la même sémantique que l'espace de noms de fichier statique standard.

Les fichiers de configuration prennent également en charge plusieurs clés permettant de [modifier davantage le logiciel sur les instances de votre environnement](customize-containers-ec2.md). Cet exemple utilise la clé de [packages](customize-containers-ec2.md#linux-packages) pour installer Memcached avec `yum` et des [commandes de conteneur](customize-containers-ec2.md#linux-container-commands) pour exécuter des commandes qui configurent le serveur durant le déploiement :

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

Elastic Beanstalk fournit de nombreuses options de configuration pour personnaliser votre environnement. En plus des fichiers de configuration, vous pouvez également définir des options de configuration à l'aide de la console, de configurations enregistrées, de la CLI EB ou d' AWS CLI. Pour plus d’informations, consultez [Options de configuration](command-options.md).

## L'`python3`exécutable
<a name="python3-executable"></a>

La version de l'`python3`exécutable disponible sur les EC2 instances dans les environnements Python d'Elastic Beanstalk ne correspondra pas toujours à la même version de Python utilisée par la plateforme. Par exemple, sur la plate-forme Python 3.12 AL2 023, `/usr/bin/python3` pointe vers Python 3.9. Cela est dû au fait que Python 3.9 est le *système Python* sur AL2 023. Pour plus d'informations, consultez [Python in AL2 023](https://docs.aws.amazon.com/linux/al2023/ug/python.html) dans le *guide de l'utilisateur Amazon Linux 2023*. Vous pouvez accéder à un exécutable correspondant à la version de Python utilisée par la plateforme à un emplacement versionné (par exemple`/usr/bin/python3.12`) ou dans le `bin` répertoire de l'environnement virtuel de l'application (par exemple`/var/app/venv/staging-LQM1lest/bin/python3`). La plate-forme utilise le bon exécutable Python correspondant à la branche de plate-forme. 

# Configuration du serveur WSGI avec un profil sur Elastic Beanstalk
<a name="python-configuration-procfile"></a>

Vous pouvez ajouter un [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) à votre solution groupée source pour spécifier et configurer le serveur WSGI pour votre application. Vous pouvez spécifier des commandes de démarrage et d'exécution personnalisées dans le`Procfile`.

Lorsque vous utilisez un `Procfile`, il remplace les options d'espace de noms `aws:elasticbeanstalk:container:python` que vous définissez à l'aide des fichiers de configuration.

L'exemple suivant utilise un `Procfile` pour spécifier UWSGi comme serveur et le configurer.

**Example Procfile**  

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

L'exemple suivant utilise un `Procfile` pour configurer Gunicorn, le serveur WSGI par défaut.

**Example Procfile**  

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

**Remarques**  
Si vous configurez un serveur WSGI autre que Gunicorn, assurez-vous de le spécifier également en tant que dépendance de votre application, afin qu'il soit installé sur vos instances d'environnement. Pour plus d'informations sur la spécification de dépendance, consultez [Spécification des dépendances à l'aide d'un fichier d'exigences sur Elastic Beanstalk](python-configuration-requirements.md).
Le port par défaut du serveur WSGI est 8 000. Si vous spécifiez un numéro de port différent dans votre commande `Procfile`, définissez également la [propriété d'environnement](environments-cfg-softwaresettings.md) `PORT` sur ce numéro de port.

# Spécification des dépendances à l'aide d'un fichier d'exigences sur Elastic Beanstalk
<a name="python-configuration-requirements"></a>

Cette rubrique décrit comment configurer votre application pour installer les autres packages Python dont elle a besoin. Une application Python classique comporte des dépendances par rapport à d'autres packages Python tiers. Avec la plateforme Elastic Beanstalk Python, vous disposez de plusieurs méthodes pour spécifier les packages Python dont dépend votre application.

## Utilisation de `pip` et `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

L'outil standard pour installer les packages Python est `pip`. Il s'agit d'une fonctionnalité qui vous permet de spécifier tous les packages dont vous avez besoin (ainsi que leurs versions) dans un fichier Requirements unique. Pour plus d'informations sur le fichier d'exigences, consultez [Format du fichier d'exigences](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format) (français non garanti) sur le site web de documentation de pip.

Créez un fichier `requirements.txt` et placez-le dans le répertoire de niveau supérieur de votre solution groupée source. Voici un exemple de fichier `requirements.txt` pour Django.

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

Dans votre environnement de développement, vous pouvez utiliser la commande `pip freeze` pour générer votre fichier Requirements.

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

Pour vous assurer que votre fichier Requirements contient uniquement des packages qui sont réellement utilisés par votre application, utilisez un [environnement virtuel](python-development-environment.md#python-common-setup-venv) sur lequel seuls ces packages sont installés. En dehors d'un environnement virtuel, le résultat de `pip freeze` comprendra tous les packages `pip` installés sur votre ordinateur de développement, y compris ceux livrés avec votre système d'exploitation.

**Note**  
Sur les versions de la plateforme AMI Python Amazon Linux, Elastic Beanstalk ne prend pas en charge nativement Pipenv ou Pipfiles. Si vous utilisez Pipenv pour gérer les dépendances de votre application, exécutez la commande suivante pour générer un fichier `requirements.txt`.  

```
~/my-app$ pipenv lock -r > requirements.txt
```
Pour en savoir plus, consultez [Generating a requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt) dans la documentation.

## Utilisation de Pipenv et `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv est un outil d'emballage Python moderne. Il combine l'installation de packages avec la création et la gestion d'un fichier de dépendance et d'un environnement virtuel pour votre application. Pour plus d'informations, consultez [Pipenv: Python Dev Workflow for Humans](https://pipenv.readthedocs.io/en/latest/).

Pipenv maintient deux fichiers : 
+ `Pipfile` – Ce fichier contient différents types de dépendances et d'exigences.
+ `Pipfile.lock` – Ce fichier contient un instantané de version qui permet des créations déterministes.

Vous pouvez créer ces fichiers dans votre environnement de développement et les inclure dans le répertoire de premier niveau de la solution groupée source que vous déployez sur Elastic Beanstalk. Pour plus d'informations sur ces deux fichiers, consultez [Exemples de Pipfile et de Pipfile.lock](https://pipenv.pypa.io/en/latest/basics/#) (français non garanti).



L'exemple suivant utilise Pipenv pour installer Django et le framework REST Django. Ces commandes créent les fichiers `Pipfile` et `Pipfile.lock`.

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

 

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

Si vous incluez plusieurs fichiers d'exigences décrits dans cette rubrique, Elastic Beanstalk n'en utilise qu'un. La liste suivante montre la priorité, par ordre décroissant.

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**Note**  
À partir de la version de la plateforme Amazon Linux 2 du 7 mars 2023, si vous fournissez plusieurs de ces fichiers, Elastic Beanstalk émettra un message de console indiquant lequel des fichiers de dépendances a été utilisé lors d'un déploiement.

Les étapes suivantes décrivent la logique suivie par Elastic Beanstalk pour installer les dépendances lors du déploiement d'une instance.
+ S'il existe un fichier `requirements.txt`, nous utilisons la commande `pip install -r requirements.txt`.
+ À partir de la version de la plateforme Amazon Linux 2 du 7 mars 2023, s'il n'y a pas de fichier `requirements.txt`, mais qu'il y a un fichier `Pipfile.lock`, nous utilisons la commande `pipenv sync`. Avant cette version, nous utilisions `pipenv install --ignore-pipfile`.
+ S'il n'y a ni fichier `requirements.txt` ni fichier `Pipfile.lock`, mais qu'il y en a un fichier `Pipfile`, on utilise la commande `pipenv install --skip-lock`.
+ Si aucun des trois fichiers d'exigences n'est trouvé, nous n'installons aucune dépendance d'application.