Python 38.8 ahora está disponible a nivel general.

Entorno de ejecución de Python 3

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

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

Versiones de Python 3

El entorno de ejecución de Python 3 es compatible con Python 3.7 y Python 3.8, y usa la última versión estable de la versión que seleccionaste. Una vez implementada la app, App Engine realiza actualizaciones automáticas a versiones de actualización nuevas, pero no actualiza la versión secundaria de forma automática.

Por ejemplo, tu aplicación podría implementarse en Python 3.7.0 y, luego, actualizarse de forma automática a la versión 3.7.1, pero no se actualizará de forma automática a la versión 3.8.0.

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 ubicado en el directorio raíz de tu proyecto. No es necesario subir dependencias porque App Engine realiza una instalación nueva.

En este momento, la especificación de dependencias que usa el estándar Pipfile/Pipfile.lock no es compatible, por lo que el proyecto no debe contener estos archivos.

Inicio de la aplicación

El entorno de ejecución inicia la app mediante la ejecución del comando que especificaste en el campo entrypoint del archivo app.yaml. El punto de entrada debería iniciar un servidor web que escuche en el puerto que especifica la variable de entorno PORT. Por ejemplo:

entrypoint: gunicorn -b :$PORT main:app

El framework web que usa tu app se encarga de enrutar las solicitudes a los controladores adecuados de la app.

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

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

  • La app no contiene archivos Pipfile o Pipfile.lock.

App Engine también agregará gunicorn a tu archivo requirements.txt de forma automática si no especificas el campo entrypoint.

Prácticas recomendadas sobre puntos de entrada

  • No incluyas gunicorn en tu archivo requirements.txt, a menos que especifiques el punto de entrada.

  • 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 ajustar el rendimiento de la app. Por ejemplo, si usas gunicorn como servidor web, puedes usar la marca --workers en el campo de punto de entrada a fin de configurar la cantidad de trabajadores que entregan la app.

    La cantidad de trabajadores que especifiques debe coincidir con la clase de instancia de la app de App Engine:

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

    Esta guía sirve como punto de partida para seleccionar la cantidad de trabajadores. Es posible que debas usar una cantidad diferente de trabajadores según las características de rendimiento de tu app. En el siguiente ejemplo, se muestra una implementación de App Engine que usa dos trabajadores gunicorn para entregar apps:

    entrypoint: gunicorn -b :8080 -w 2 main:app
    

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: python38
entrypoint: uwsgi --http-socket :8080 --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.19.1
flask==1.1.2

Variables de entorno

El entorno de ejecución configura las siguientes variables del entorno:

Variable del entorno Descripción
GAE_APPLICATION ID de tu aplicación de App Engine. Este ID tiene el prefijo “region code~”, como “e~”, para aplicaciones implementadas en Europa.
GAE_DEPLOYMENT_ID ID de la implementación actual.
GAE_ENV Entorno de App Engine. Se define en standard.
GAE_INSTANCE 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 Entorno de ejecución especificado en el archivo app.yaml.
GAE_SERVICE Nombre de servicio especificado en el archivo app.yaml. Si no se especifica un nombre de servicio, se asigna default.
GAE_VERSION Etiqueta de la versión actual de tu servicio.
GOOGLE_CLOUD_PROJECT ID del proyecto de Cloud asociado a tu aplicación.
PORT Puerto que recibe las solicitudes HTTP.

Puedes definir variables de entorno adicionales en tu archivo app.yaml, pero los valores anteriores no se pueden anular.

Proxies HTTPS y de reenvío

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

Sistema de archivos

El entorno de ejecución incluye un sistema de archivos completo. El sistema de archivos es de solo lectura, a excepción de la ubicación /tmp, que es un disco virtual que almacena datos en la memoria 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 acerca de la instancia y de tu proyecto.

Puedes acceder al servidor de metadatos a través de los siguientes extremos:

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

La siguiente tabla enumera los extremos en los que puedes realizar solicitudes HTTP para metadatos específicos:

Extremo 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/zone La zona en la que se está ejecutando la instancia.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email El correo electrónico de la cuenta de servicio predeterminada asignado a tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/ Enumera todas las cuentas de servicio predeterminadas para tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/scopes Enumera todos los alcances compatibles para las cuentas de servicio predeterminadas.
/computeMetadata/v1/instance/service-accounts/default/token Muestra el token de autenticación que puede usarse para autenticar tu aplicación en otras API de Google Cloud.

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