Uso de la plataforma Elastic Beanstalk Python - AWS Elastic Beanstalk

Uso de la plataforma Elastic Beanstalk Python

La plataforma Python de AWS Elastic Beanstalk es un conjunto de versiones de la plataforma para aplicaciones web Python que se pueden ejecutar detrás de un servidor proxy con WSGI. Cada ramificación de plataforma corresponde a una versión de Python, como Python 3.8.

A partir de las ramas de la plataforma Amazon Linux 2, Elastic Beanstalk proporciona Gunicorn 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.

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 Especificar dependencias mediante un archivo de requisitos.

Elastic Beanstalk proporciona opciones de configuración que se pueden usar para personalizar el software que se ejecuta en las instancias EC2 del 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. Para evitar perder la configuración del entorno cuando lo termina, puede usar las configuraciones guardadas 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. 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.

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 Especificar dependencias mediante un archivo de requisitos.

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.

Configuración del entorno de Python

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

Utilice la consola de Elastic Beanstalk para configurar los parámetros del proceso Python, habilitar AWS X-Ray, habilitar la rotación de registros en Amazon S3 y configurar variables que su aplicación pueda leer en el entorno.

Para configurar su entorno Python en la consola de Elastic Beanstalk

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

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

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En el panel de navegación, elija Configuration (Configuración).

  4. En la categoría de configuración Software, elija Edit (Editar).

Configuración de Python

  • 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 para ejecutar en cada proceso.

AWS X-RayConfiguración de

  • X-Ray daemon (Daemon de X-Ray): ejecute el daemon de AWS X-Ray para procesar datos de rastreo desde AWS X-Ray SDK para Python.

Log Options (Opciones de registro)

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.

  • Enable log file rotation to Amazon S3 (Habilitar la rotación de archivos de registro para Amazon S3): especifica si los archivos de registro de las instancias de Amazon EC2 de la aplicación deben copiarse en el bucket de Amazon S3 asociado a la aplicación.

Archivos estáticos

Para mejorar el rendimiento, la sección Static files (Archivos estáticos) le permite configurar el servidor proxy para servir archivos estáticos de servidor (por ejemplo, HTML o imágenes) desde un conjunto de directorios incluidos en 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.

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

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.

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 Propiedades del entorno y otras opciones del software.

Espacios de nombres de configuración de Python

Puede usar un archivo de configuración para definir opciones de configuración y realizar otras tareas de configuración en las instancias durante las implementaciones. Las opciones de configuración se pueden definir a través del servicio de Elastic Beanstalk o la plataforma que utilice y están organizadas por 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 ejemplo 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. 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. En este ejemplo, se utiliza la clave packages para instalar Memcached con yum y 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.