

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

En este tema se describe cómo configurar, crear y ejecutar las aplicaciones Python en Elastic Beanstalk.

AWS Elastic Beanstalk admite varias ramas de plataforma para diferentes versiones del lenguaje de programación Python. Consulte [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) en el documento *Plataformas de AWS Elastic Beanstalk * para ver una lista completa.

Las aplicaciones web Python se pueden ejecutar detrás de un servidor proxy con WSGI. Elastic Beanstalk proporciona [Gunicorn](https://gunicorn.org/) como el servidor WSGI predeterminado. 

Puede añadir un `Procfile` a su paquete de código fuente para especificar y configurar el servidor WSGI de su aplicación. Para obtener más información, consulte [Configuración del servidor WSGI con un archivo Procfile en Elastic Beanstalk](python-configuration-procfile.md).

Puede usar los archivos `Pipfile` y `Pipfile.lock` creados por Pipenv para especificar las dependencias del paquete de Python y otros requisitos. Para obtener más información sobre cómo especificar dependencias, consulte [Especificación de dependencias mediante un archivo de requisitos en Elastic Beanstalk](python-configuration-requirements.md).

Elastic [Beanstalk proporciona](command-options.md) opciones de configuración que puede usar para personalizar el software que se ejecuta EC2 en las instancias de su entorno de Elastic Beanstalk. Puede configurar las variables de entorno que necesita la aplicación, habilitar la rotación de logs en Amazon S3 y asignar carpetas del código fuente de la aplicación que contengan archivos estáticos a rutas proporcionadas por el servidor proxy.

En la consola de Elastic Beanstalk hay opciones de configuración disponibles para [modificar la configuración de un entorno en ejecución](environment-configuration-methods-after.md). Para evitar perder la configuración del entorno cuando lo termina, puede usar las [configuraciones guardadas](environment-configuration-savedconfig.md) para guardar la configuración y aplicarla posteriormente a otro entorno.

Para guardar la configuración en el código fuente, puede incluir [archivos de configuración](ebextensions.md). Los valores de configuración de los archivos de configuración se aplican cada vez que crea un entorno o que implementa la aplicación. También puede usar archivos de configuración para instalar paquetes, ejecutar scripts y llevar a cabo otras operaciones de personalización de instancias durante las implementaciones.

La configuración aplicada en la consola de Elastic Beanstalk anula la misma configuración en los archivos de configuración, si existe. Esto le permite tener la configuración predeterminada en los archivos de configuración y anularla con la configuración específica del entorno en la consola. Para obtener más información acerca de la prioridad y otros métodos para cambiar valores de configuración, consulte [Opciones de configuración](command-options.md).

En los paquetes de Python disponibles de `pip`, también puede incluir un archivo de requisitos en la raíz del código fuente de la aplicación. Elastic Beanstalk instala los paquetes de dependencias especificados en un archivo de requisitos durante la implementación. Para obtener más información, consulte [Especificación de dependencias mediante un archivo de requisitos en Elastic Beanstalk](python-configuration-requirements.md).

Para obtener más información sobre las diversas formas en las que puede ampliar una plataforma Elastic Beanstalk basada en Linux, consulte [Ampliación de las plataformas Linux de Elastic Beanstalk](platforms-linux-extend.md).

## Configuración del entorno de Python
<a name="create-deploy-python-container-console"></a>

La configuración de la plataforma Python te permite ajustar el comportamiento de tus instancias de Amazon EC2 . Puede editar la configuración de instancias de Amazon del entorno de Elastic Beanstalk mediante EC2 la consola de Elastic Beanstalk.

Utilice la consola de Elastic Beanstalk para configurar los AWS X-Ray ajustes del proceso de Python, habilitar y habilitar la rotación de registros a Amazon S3 y configurar las variables que la aplicación pueda leer del entorno.

**Para configurar su entorno Python en la consola de Elastic Beanstalk**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. En el panel de navegación, elija **Configuración**.

1. En la categoría de configuración **Actualizaciones, supervisión y registro**, seleccione **Edición de**.

### Configuración de Python
<a name="python-console-settings"></a>
+ **Proxy server (Servidor proxy)**: el servidor proxy que utilizar en las instancias del entorno. De forma predeterminada, se utiliza nginx.
+ **WSGI Path (Ruta de WSGI)**: el nombre de una ruta a su archivo de la aplicación principal. Por ejemplo, `application.py` o `django/wsgi.py`.
+ **NumProcesses**— El número de procesos que se van a ejecutar en cada instancia de la aplicación.
+ **NumThreads**— El número de subprocesos que se van a ejecutar en cada proceso.

### AWS X-Ray ajustes
<a name="python-console-xray"></a>
+ **Demonio X-Ray**: ejecute el AWS X-Ray demonio para procesar los datos de rastreo del. [AWS X-Ray SDK para Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html)

### Log Options (Opciones de registro)
<a name="create-deploy-python-container.console.logoptions"></a>

La sección Log Options tiene dos valores:
+ **Instance profile (Perfil de instancia)**: especifica el perfil de instancia que tiene permiso para obtener acceso al bucket de Amazon S3 asociado con la aplicación.
+ **Habilite la rotación de archivos de registro a Amazon S3**: especifica si los archivos de registro de las EC2 instancias de Amazon de su aplicación se copian en el bucket de Amazon S3 asociado a su aplicación.

### Archivos estáticos
<a name="python-platform-staticfiles"></a>

Para mejorar el rendimiento, puede utilizar la sección **Static files** (Archivos estáticos) para configurar el servidor proxy para entregar archivos estáticos de servidor (por ejemplo, HTML o imágenes) desde un conjunto de directorios dentro de su aplicación web. Para cada directorio, se establece la ruta virtual para la asignación de directorios. Cuando el servidor proxy recibe una solicitud de un archivo en la ruta especificada, proporciona directamente el archivo en lugar de direccionar la solicitud la aplicación.

Para obtener más información sobre la configuración de archivos estáticos mediante archivos de configuración o la consola de Elastic Beanstalk, consulte [Distribución de archivos estáticos](environment-cfg-staticfiles.md).

De forma predeterminada, el servidor proxy en un entorno de Python proporciona los archivos en una carpeta llamada `static` situada en la ruta `/static`. Por ejemplo, si el código fuente de la aplicación contiene un archivo llamado `logo.png` en una carpeta denominada `static`, el servidor proxy lo proporciona a los usuarios en `subdomain.elasticbeanstalk.com/static/logo.png`. Puede configurar mapeos adicionales como se explica en esta sección.

### Propiedades del entorno
<a name="create-deploy-python-custom-container-envprop"></a>

Puede utilizar las propiedades del entorno para proporcionar información a la aplicación y configurar las variables de entorno. Por ejemplo, puede crear una propiedad de entorno llamada `CONNECTION_STRING` que especifique una cadena de conexión que la aplicación pueda usar para conectarse a la base de datos.

Dentro del entorno de Python que se ejecuta en Elastic Beanstalk, estos valores son accesibles a través del diccionario `os.environ` de Python. Para obtener más información, consulte [http://docs.python. org/library/os.html](http://docs.python.org/library/os.html).

Puede utilizar un código similar al siguiente para tener acceso a las claves y los parámetros:

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

Las propiedades de entorno también pueden proporcionar información a un marco de trabajo. Por ejemplo, puede crear una propiedad llamada `DJANGO_SETTINGS_MODULE` para configurar Django de forma que utilice un módulo de configuración específico. En función del entorno, el valor podría ser `development.settings`, `production.settings`, etc.

Para obtener más información, consulte [Configuración de las variables de entorno y otras opciones de software](environments-cfg-softwaresettings.md).

## Espacios de nombres de configuración de Python
<a name="python-namespaces"></a>

Puede usar un [archivo de configuración](ebextensions.md) para definir opciones de configuración y realizar otras tareas de configuración en las instancias durante las implementaciones. Las opciones de configuración pueden ser [específicas de la plataforma](command-options-specific.md) o aplicarse a [todas las plataformas](command-options-general.md) del servicio de Elastic Beanstalk en su conjunto. Las opciones de configuración se organizan en *espacios de nombres*.

La plataforma Python define opciones en los espacios de nombres `aws:elasticbeanstalk:environment:proxy`, `aws:elasticbeanstalk:environment:proxy:staticfiles` y `aws:elasticbeanstalk:container:python`.

El siguiente archivo de configuración de muestra especifica los valores de las opciones de configuración para crear una propiedad de entorno denominada `DJANGO_SETTINGS_MODULE`, elija el servidor proxy Apache, especifique dos opciones de archivos estáticos que asignan un directorio denominado `statichtml` a la ruta `/html` y un directorio denominado `staticimages` a la ruta `/images`, así como opciones de configuración adicionales del espacio de nombres `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)`. Este espacio de nombres contiene opciones que permiten especificar la ubicación del script WSGI del código fuente y el número de subprocesos y procesos que se van a ejecutar en 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
```

**Notas**  
Si está utilizando una versión de la plataforma Python AMI de Amazon Linux (anterior a Amazon Linux 2), reemplace el valor `WSGIPath` por `ebdjango/wsgi.py`. El valor del ejemplo funciona con el servidor WSGI de Gunicorn, que no es compatible con las versiones de la plataforma de la AMI de Amazon Linux.
Además, estas versiones antiguas de la plataforma utilizan un espacio de nombres diferente para configurar archivos estáticos: `aws:elasticbeanstalk:container:python:staticfiles`. Tiene los mismos nombres de opción y semántica que el espacio de nombres de archivo estático estándar.

Los archivos de configuración también admiten varias claves para [modificar aún más el software en las instancias del entorno](customize-containers-ec2.md). En este ejemplo, se utiliza la clave [packages](customize-containers-ec2.md#linux-packages) para instalar Memcached con `yum` y [container commands](customize-containers-ec2.md#linux-container-commands) para ejecutar comandos que configuren el servidor durante la implementación:

```
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 cuenta con numerosas opciones de configuración para personalizar el entorno. Además de los archivos de configuración, también puede definir opciones en la consola, configuraciones guardadas, la CLI de EB o la AWS CLI. Para obtener más información, consulte [Opciones de configuración](command-options.md).

## El ejecutable de `python3`
<a name="python3-executable"></a>

La versión del `python3` ejecutable disponible en las EC2 instancias de los entornos Python de Elastic Beanstalk no siempre corresponderá a la misma versión de Python utilizada por la plataforma. Por ejemplo, en la plataforma Python 3.12 AL2 023, `/usr/bin/python3` apunta a Python 3.9. Esto se debe a que Python 3.9 es el *sistema Python* en AL2 023. Para obtener más información, consulte [Python en AL2 023](https://docs.aws.amazon.com/linux/al2023/ug/python.html) en la *Guía del usuario de Amazon Linux 2023*. Puede acceder a un ejecutable correspondiente a la versión de Python utilizada por la plataforma en una ubicación versionada (por ejemplo, `/usr/bin/python3.12`) o en el directorio de `bin` del entorno virtual de la aplicación (por ejemplo, `/var/app/venv/staging-LQM1lest/bin/python3`). La plataforma utiliza el ejecutable de Python correcto que corresponde a la ramificación de la plataforma. 

# Configuración del servidor WSGI con un archivo Procfile en Elastic Beanstalk
<a name="python-configuration-procfile"></a>

Puede añadir un [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc) a su paquete de código fuente para especificar y configurar el servidor WSGI de su aplicación. Puede especificar comandos de inicio y ejecución personalizados en `Procfile`.

Cuando se utiliza un `Procfile`, este anula las opciones de espacio de nombres de `aws:elasticbeanstalk:container:python` que se establecen mediante archivos de configuración.

En el ejemplo siguiente se utiliza `Procfile` para especificar uWSGI como servidor y configurarlo.

**Example Procfile**  

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

En el ejemplo siguiente se utiliza `Procfile` para configurar Gunicorn, el servidor WSGI predeterminado.

**Example Procfile**  

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

**Notas**  
Si configura cualquier servidor WSGI que no sea Gunicorn, asegúrese de especificarlo también como una dependencia de la aplicación, de modo que esté instalado en las instancias de su entorno. Para obtener más información sobre la especificación de dependencias, consulte [Especificación de dependencias mediante un archivo de requisitos en Elastic Beanstalk](python-configuration-requirements.md).
El puerto predeterminado para el servidor WSGI es 8000. Si especifica un número de puerto diferente en el comando `Procfile`, establezca también el `PORT` [propiedad del entorno](environments-cfg-softwaresettings.md) en este número de puerto.

# Especificación de dependencias mediante un archivo de requisitos en Elastic Beanstalk
<a name="python-configuration-requirements"></a>

En este tema se describe cómo configurar la aplicación para instalar otros paquetes de Python que necesite. Una aplicación de Python típica tiene dependencias de otros paquetes de Python de terceros. Con la plataforma Python de Elastic Beanstalk, tiene varias formas de especificar paquetes Python de los que depende su aplicación.

## Utilice `pip` y `requirements.txt`
<a name="python-configuration-requirements.txt"></a>

La herramienta estándar para instalar paquetes de Python es `pip`. Esta tiene una característica que permite especificar todos los paquetes necesarios (así como las versiones) en un único archivo de requisitos. Para obtener más información sobre el archivo de requisitos, consulte [Requirements File Format](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format) en el sitio web de documentación de pip.

Cree un archivo llamado `requirements.txt` y sitúelo en el directorio principal del paquete de código fuente. A continuación se muestra un ejemplo del archivo `requirements.txt` para Django.

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

En el entorno de desarrollo, puede utilizar el comando `pip freeze` para generar el archivo de requisitos.

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

Para asegurarse de que el archivo de requisitos solo contiene los paquetes que se utilizan realmente en la aplicación, utilice un [entorno virtual](python-development-environment.md#python-common-setup-venv) que solo tenga instalado esos paquetes. Fuera del entorno virtual, la salida de `pip freeze` incluirá todos los paquetes de `pip` instalados en el equipo de desarrollo, incluidos aquellos que venían con el sistema operativo.

**nota**  
En las versiones de la plataforma Python AMI de Amazon Linux, Elastic Beanstalk no admite de forma nativa Pipenv o Pipfiles. Si utiliza Pipenv para administrar las dependencias de la aplicación, ejecute el siguiente comando para generar un archivo `requirements.txt`.  

```
~/my-app$ pipenv lock -r > requirements.txt
```
Para obtener más información, consulte [Generación de un requirements.txt](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt) en la documentación de Pipenv.

## Use Pipenv y `Pipfile`
<a name="python-configuration-requirements.pipenv"></a>

Pipenv es una herramienta de empaquetado de Python moderna. Combina la instalación de paquetes con la creación y administración de un archivo de dependencia y un virtualenv para su aplicación. Para obtener más información, consulte [Pipenv: Python Dev Workflow for Humans](https://pipenv.readthedocs.io/en/latest/).

Pipenv mantiene dos archivos: 
+ `Pipfile`: este archivo contiene varios tipos de dependencias y requisitos.
+ `Pipfile.lock`: este archivo contiene una instantánea de la versión que permite compilaciones deterministas.

Puede crear estos archivos en su entorno de desarrollo e incluirlos en el directorio de nivel superior del paquete de origen que se implementa en Elastic Beanstalk. Para obtener más información sobre estos dos archivos, visite [Example Pipfile and Pipfile.lock](https://pipenv.pypa.io/en/latest/basics/#).



El siguiente ejemplo utiliza Pipenv para instalar Django y el marco REST de Django. Estos comandos crean los archivos `Pipfile` y `Pipfile.lock`.

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

 

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

Si incluye más de uno de los archivos de requisitos descritos en este tema, Elastic Beanstalk utiliza solo uno de ellos. La siguiente lista muestra la prioridad, en orden descendente.

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**nota**  
A partir de la versión de la plataforma Amazon Linux 2 del 7 de marzo de 2023, si proporciona más de uno de estos archivos, Elastic Beanstalk emitirá un mensaje en la consola donde se indicará cuál de los archivos de dependencia se utilizó durante la implementación.

En los siguientes pasos se describe la lógica que sigue Elastic Beanstalk para instalar las dependencias al implementar una instancia.
+ Si hay un archivo `requirements.txt`, utilizamos el comando `pip install -r requirements.txt`.
+ A partir del lanzamiento de la plataforma Amazon Linux 2 del 7 de marzo de 2023, si no hay ningún archivo `requirements.txt`, pero hay un `Pipfile.lock`, utilizamos el comando `pipenv sync`. Antes de ese lanzamiento, usábamos `pipenv install --ignore-pipfile`.
+ Si no hay ni un archivo `requirements.txt` ni un `Pipfile.lock`, pero hay un `Pipfile`, entonces usamos el comando `pipenv install --skip-lock`.
+ Si no se encuentra ninguno de los tres archivos de requisitos, no instalamos ninguna de las dependencias de la aplicación.