El entorno 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 entorno de ejecución de Python para App Engine en el entorno estándar se declara en el archivo app.yaml
:
runtime: pythonVERSION
En el ejemplo anterior, VERSION son los números de versión MAJOR
y MINOR
de Python. Por
ejemplo, para usar la versión más reciente de Python, Python 3.12, especifica
312
.
Para otras versiones de Python compatibles y la versión de Ubuntu correspondiente para tu versión de Python, consulta el programa de asistencia del entorno de ejecución.
Versiones de Python 3
El entorno de ejecución de Python usa la última versión estable de la
versión que se especifica en tu archivo app.yaml
.
App Engine se actualiza de forma automática a las nuevas versiones de parche, pero no se actualiza automáticamente a las versiones secundarias.
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 siguiente versión secundaria de Python 3.8.0.
Pruébalo tú mismo
Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de App Engine en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
Probar App Engine gratisApp Engine ejecuta apps de 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
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
. Si configuraste un punto de entrada del servidor web de
Gunicorn en el archivo app.yaml
, también debes agregar gunicorn
a tu
archivo requirements.txt
.
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 llamadoapp
.La app no contiene archivos
Pipfile
oPipfile.lock
.
Si no especificas un punto de entrada para el entorno de ejecución de Python 3, App Engine configura y, luego, inicia el servidor web predeterminado de Gunicorn.
Prácticas recomendadas sobre 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 archivorequirements.txt
. Agregagunicorn
al archivorequirements.txt
solo si se especifica de forma explícita un extremogunicorn
en el archivoapp.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 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 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 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 :$PORT -w 2 main:app
Te recomendamos que configures tu servidor web para escuchar y responder solicitudes HTTP en el puerto que especifica tu variable de entorno
$PORT
. El uso del puerto predeterminado8080
evita que App Engine use su capa NGINX para comprimir las respuestas HTTP. Ten en cuenta que si usas el puerto8080
, las advertencias sobre el puerto8080
y NGINX se mostrarán en los archivos de registro de la 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:
Variables de entorno
El entorno de ejecución configura las siguientes variables del entorno:
Variable de 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 Google Cloud asociado a tu aplicación. |
PORT |
Puerto que recibe las solicitudes HTTP. |
NODE_ENV (solo disponible en el entorno de ejecución de Node.js) |
Se establece en production cuando se implementa tu servicio. |
Puedes definir variables de entorno adicionales en tu archivo app.yaml
, pero no es posible anular los valores anteriores, excepto NODE_ENV
.
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 del proyecto.
Puedes acceder al servidor de metadatos a través de los siguientes extremos:
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 envió con la intención de recuperar valores de metadatos.
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 |
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 |
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 APIs 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
.