Entorno de ejecución de Python 3 - App Engine - Google Cloud.

El tiempo de ejecución de Python es la pila de software encargada de instalar el código de tu servicio web y sus dependencias, así como de ejecutar tu servicio de App Engine.

El tiempo de ejecución de Python para App Engine en el entorno estándar se declara en el archivo app.yaml:

runtime: pythonVERSION

Donde VERSION es la versión de Python MAJOR y MINOR. Por ejemplo, para usar la versión más reciente de Python, Python 3.14, especifica 314.

Para ver otras versiones de Python compatibles y la versión de Ubuntu correspondiente a tu versión de Python, consulta el calendario de asistencia de tiempo de ejecución.

Versiones de Python 3

La última versión de Python compatible es la 3.14. El tiempo de ejecución de Python usa la última versión estable de la versión especificada en el archivo app.yaml. App Engine se actualiza automáticamente a las nuevas versiones de parche, pero no a las versiones secundarias.

Por ejemplo, tu aplicación puede implementarse en Python 3.7.0 y versiones posteriores, y actualizarse automáticamente a Python 3.7.1, pero no se actualizará automáticamente a la siguiente versión secundaria, Python 3.8.0.

Pruébalo

Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de App Engine en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito sin coste económico para ejecutar, probar y desplegar cargas de trabajo.

Probar App Engine sin coste económico

App Engine ejecuta aplicaciones Python en un contenedor protegido por gVisor en una distribución de Ubuntu Linux actualizada.

Dependencias

Durante la implementación, App Engine usa el administrador de paquetes de Python pip para instalar las dependencias definidas en el archivo de metadatos requirements.txt, que se encuentra en el directorio raíz de tu proyecto. No es necesario que subas las dependencias, ya que App Engine realiza una instalación nueva.

Actualmente, no se admite la especificación de dependencias mediante el estándar Pipfile/Pipfile.lock, por lo que tu proyecto no debe tener estos archivos.

Inicio de la aplicación

El tiempo de ejecución inicia tu aplicación ejecutando el comando que especifiques en el campo entrypoint de tu archivo app.yaml. Si has configurado un punto de entrada del servidor web Gunicorn en el archivo app.yaml, también debes añadir gunicorn al archivo requirements.txt.

El punto de entrada debe iniciar un servidor web que escuche en el puerto especificado por la variable de entorno PORT. Por ejemplo:

entrypoint: gunicorn -b :$PORT main:app

El framework web que usa tu aplicación es el responsable de enrutar las solicitudes a los controladores adecuados de tu aplicación.

Si tu aplicación cumple los siguientes requisitos, App Engine la iniciará con el servidor web gunicorn si no especificas el campo entrypoint:

  • La raíz del directorio de tu aplicación contiene un archivo main.py con un objeto compatible con WSGI llamado app.

  • Tu aplicación no contiene archivos Pipfile ni Pipfile.lock.

Si no especificas un punto de entrada para el tiempo de ejecución de Python 3, App Engine configurará e iniciará el servidor web Gunicorn predeterminado.

Prácticas recomendadas para los puntos de entrada

  • Asegúrate de que el módulo de Python necesario para ejecutar el punto de entrada especificado en app.yaml esté presente en el archivo requirements.txt. Añade gunicorn al archivo requirements.txt solo si se especifica explícitamente un endpoint gunicorn en el archivo app.yaml.

  • Para obtener el mejor rendimiento, el punto de entrada debe ser ligero, ya que se ejecuta cada vez que se crea una instancia nueva de la aplicación.

  • Puedes usar el campo de punto de entrada para optimizar el rendimiento de tu aplicación. Por ejemplo, si usas gunicorn como servidor web, puedes usar la marca --workers en el campo de punto de entrada para configurar el número de trabajadores que sirven tu aplicación.

    El número de trabajadores que especifiques debe coincidir con la clase de instancia de tu aplicación de App Engine:

    Clase de instancia Trabajadores
    F1 2
    F2 4
    F4 8
    F4_1G 8
    B1 2
    B2 4
    B4 8
    B4_1G 8
    B8 8

    Estas directrices sirven como punto de partida para seleccionar el número de trabajadores. Es posible que tengas que usar un número diferente de workers en función de las características de rendimiento de tu aplicación. En el ejemplo siguiente se muestra una implementación de App Engine que usa dos gunicorn workers para servir aplicaciones:

    entrypoint: gunicorn -b :$PORT -w 2 main:app
    
  • Te recomendamos que configures tu servidor web para que reciba y responda a las solicitudes HTTP en el puerto especificado por la $PORT variable de entorno. Si se usa el puerto predeterminado, 8080 App Engine no podrá usar su capa NGINX para comprimir las respuestas HTTP. Ten en cuenta que, si usas el puerto 8080, se mostrarán advertencias sobre el puerto 8080 y NGINX en los archivos de registro de tu aplicación.

Otros frameworks web

Además de Django y Flask, puedes usar otros frameworks web con App Engine, como uwsgi y Tornado. En el siguiente ejemplo se muestra cómo usar uwsgi con App Engine:

runtime: python313
entrypoint: uwsgi --http-socket :$PORT --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.22
Flask==3.0.0

Variables de entorno

El tiempo de ejecución define las siguientes variables de entorno:

Variable de entorno Descripción
GAE_APPLICATION El ID de tu aplicación de App Engine. Este ID tiene el prefijo "region code~", como "e~" en el caso de las aplicaciones desplegadas en Europa.
GAE_DEPLOYMENT_ID ID de la implementación actual.
GAE_ENV El entorno de App Engine. Su valor debe ser standard.
GAE_INSTANCE El ID de la instancia en la que se está ejecutando tu servicio.
GAE_MEMORY_MB Cantidad de memoria disponible para el proceso de la aplicación, en MB.
GAE_RUNTIME El tiempo de ejecución especificado en el archivo app.yaml.
GAE_SERVICE El nombre del servicio especificado en el archivo app.yaml. Si no se especifica ningún nombre de servicio, se le asigna el valor default.
GAE_VERSION La etiqueta de la versión actual de tu servicio.
GOOGLE_CLOUD_PROJECT El ID de proyecto Google Cloud asociado a tu aplicación.
PORT El puerto que recibe solicitudes HTTP.
NODE_ENV (solo disponible en el entorno de ejecución de Node.js) Tiene el valor production cuando se implementa el servicio.

Puede definir variables de entorno adicionales en el archivo app.yaml, pero los valores anteriores no se pueden anular, excepto NODE_ENV.

Proxies HTTPS y de reenvío

App Engine finaliza las conexiones HTTPS en el balanceador de carga y reenvía las solicitudes a tu aplicación. Algunas aplicaciones necesitan determinar la IP y el protocolo de la solicitud original. La dirección IP del usuario está disponible en el encabezado estándar X-Forwarded-For. Las aplicaciones que requieran esta información deben configurar su framework web para que confíe en el proxy.

Sistema de archivos

El tiempo de ejecución incluye un sistema de archivos completo. El sistema de archivos es de solo lectura, excepto en la ubicación /tmp, que es un disco virtual que almacena datos en la RAM de tu instancia de App Engine.

Servidor de metadatos

Cada instancia de tu aplicación puede usar el servidor de metadatos de App Engine para consultar información sobre la instancia y tu proyecto.

Puede acceder al servidor de metadatos a través de los siguientes endpoints:

  • http://metadata
  • http://metadata.google.internal

Las solicitudes enviadas al servidor de metadatos deben incluir el encabezado de solicitud Metadata-Flavor: Google. Este encabezado indica que la solicitud se ha enviado para recuperar valores de metadatos.

En la siguiente tabla se enumeran los endpoints en los que puedes hacer solicitudes HTTP para obtener metadatos específicos:

Punto final de metadatos Descripción
/computeMetadata/v1/project/numeric-project-id El número de proyecto asignado a tu proyecto.
/computeMetadata/v1/project/project-id El ID del proyecto asignado a tu proyecto.
/computeMetadata/v1/instance/region La región en la que se está ejecutando la instancia.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email La dirección de correo de la cuenta de servicio predeterminada asignada a tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/ Muestra todas las cuentas de servicio predeterminadas de tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/scopes Enumera todos los ámbitos admitidos de las cuentas de servicio predeterminadas.
/computeMetadata/v1/instance/service-accounts/default/token Devuelve el token de autenticación que se puede usar para autenticar tu aplicación en otras APIs de Google Cloud.

Por ejemplo, para obtener tu ID de proyecto, envía una solicitud a http://metadata.google.internal/computeMetadata/v1/project/project-id.