Con App Engine, puedes crear aplicaciones web con el lenguaje de programación Python y aprovechar las numerosas bibliotecas, herramientas y frameworks de Python que usan los desarrolladores profesionales para crear aplicaciones web de primera categoría. Tu aplicación de Python se ejecuta en la infraestructura escalable de Google y usa servicios y almacenamiento persistente a gran escala.
Introducción
App Engine ejecuta el código de tu aplicación Python mediante un intérprete de Python precargado en un entorno aislado seguro. Tu aplicación recibe solicitudes web, realiza tareas y envía respuestas interactuando con este entorno.
Una aplicación web de Python interactúa con el servidor web de App Engine mediante el protocolo WSGI, por lo que las aplicaciones pueden usar cualquier framework de aplicaciones web compatible con WSGI. App Engine incluye un framework de aplicaciones web sencillo llamado webapp2 para que te resulte fácil empezar. En el caso de las aplicaciones más grandes, los frameworks de terceros consolidados, como Django, funcionan bien con App Engine.
El intérprete de Python puede ejecutar cualquier código Python, incluidos los módulos de Python que incluyas en tu aplicación, así como la biblioteca estándar de Python. El intérprete no puede cargar módulos de Python con código C. Se trata de un entorno de Python "puro".
El entorno aislado seguro aísla tu aplicación para ofrecerte servicios y seguridad. De esta forma, se asegura de que las aplicaciones solo puedan realizar acciones que no interfieran con el rendimiento y la escalabilidad de otras aplicaciones. Por ejemplo, una aplicación no puede escribir datos en el sistema de archivos local ni establecer conexiones de red arbitrarias. En su lugar, las aplicaciones usan servicios escalables proporcionados por App Engine para almacenar datos y comunicarse a través de Internet. El intérprete de Python genera una excepción cuando una aplicación intenta importar un módulo de Python de la biblioteca estándar que se sabe que no funciona con las restricciones del entorno aislado.
La plataforma App Engine proporciona muchos servicios a los que puede llamar tu código. Tu aplicación también puede configurar tareas programadas que se ejecuten a intervalos especificados.
Seleccionar el entorno de ejecución de Python 2
El entorno de ejecución de Python se especifica en el archivo de configuración app.yaml
, que se usa para desplegar la aplicación en App Engine. Por ejemplo, puedes añadir lo siguiente al archivo app.yaml
para usar Python 2.7:
runtime: python27
api_version: 1
threadsafe: true
...
El primer elemento, runtime
, selecciona el entorno de ejecución de Python.
El segundo elemento, api_version
, selecciona la versión del entorno de tiempo de ejecución de Python que se va a usar. En el momento de escribir este artículo, App Engine solo tiene una versión del entorno de Python, 1
. Si el equipo de App Engine necesita lanzar cambios en el entorno que no sean compatibles con el código actual, lo hará con un nuevo identificador de versión. Tu aplicación seguirá usando la versión seleccionada hasta que cambies el ajuste api_version
y subas tu aplicación.
Para obtener más información sobre el archivo app.yaml
y cómo desplegar tu aplicación en App Engine, consulta los temas Referencia de app.yaml
, Migrar a Python 2.7 y Desplegar una aplicación Python.
El entorno aislado
Para permitir que App Engine distribuya las solicitudes de las aplicaciones en varios servidores web y para evitar que una aplicación interfiera con otra, la aplicación se ejecuta en un entorno de "zona de pruebas" restringido. En este entorno, la aplicación puede ejecutar código, almacenar y consultar los datos en Datastore, usar los servicios de correo, de obtención de URLs y de usuarios de App Engine, así como examinar la solicitud web del usuario y preparar la respuesta.Una aplicación App Engine no puede:
escribir en un sistema de archivos. Las aplicaciones deben usar Datastore para almacenar datos persistentes. Se permite la lectura del sistema de archivos y todos los archivos de la aplicación que se hayan subido con ella están disponibles.
Responde lentamente. Una solicitud web a una aplicación debe gestionarse en unos segundos. Los procesos que tardan mucho en responder se terminan para evitar que se sobrecargue el servidor web.
realizar otro tipo de llamadas al sistema.
Entorno aislado en Python
Puedes subir y usar archivos .pyc
cuando usas el tiempo de ejecución de Python 2.7, pero no puedes subir una versión .py
y una .pyc
del mismo archivo. Puedes subir archivos .zip que contengan archivos .py
o .pyc
(o una combinación de ambos). Si subes archivos .pyc
, debes tener en cuenta una serie de advertencias importantes:
- En el caso de una secuencia de comandos CGI, el controlador de secuencias de comandos debe seguir usando la extensión de archivo
.py
, aunque subas un archivo.pyc
. - De forma predeterminada, los archivos
.pyc
se omiten durante la implementación. Debes anular el elementoskip_files
en el archivoapp.yaml
para que el nuevo valor no provoque que se omitan los archivos.pyc
. - Debes usar Python 2.7 para crear el archivo
.pyc
. Si tienes una versión diferente de Python (como Python 2.6) en tu máquina de desarrollo, tendrás que obtener la versión 2.7 para crear un archivo.pyc
compatible.
Python 2 puro
Todo el código del entorno de tiempo de ejecución de Python debe ser Python puro y no incluir extensiones de C ni otro código que deba compilarse.
El entorno incluye la biblioteca estándar de Python.
Algunos módulos se han inhabilitado porque sus funciones principales no son compatibles con App Engine, como las redes o la escritura en el sistema de archivos. Además, el módulo os
está disponible, pero con las funciones no admitidas inhabilitadas.
Si se intenta importar un módulo no admitido o usar una función no admitida, se generará una excepción.
Algunos módulos de la biblioteca estándar se han sustituido o personalizado para que funcionen con App Engine. Estos módulos varían entre los dos tiempos de ejecución de Python, tal como se describe a continuación.
Bibliotecas personalizadas en Python 2.7
En el entorno de ejecución de Python 2.7, se han sustituido o personalizado los siguientes módulos:
tempfile está inhabilitado, excepto
TemporaryFile
, que tiene el alias StringIO.El registro está disponible y te recomendamos que lo uses. Consulta Registro.
Además de la biblioteca estándar de Python y las bibliotecas de App Engine, el entorno de ejecución de Python 2.7 incluye varias bibliotecas de terceros.
Añadir bibliotecas de Python de terceros
Puedes incluir bibliotecas de Python de terceros en tu aplicación colocando el código en el directorio de la aplicación. Si crea un enlace simbólico al directorio de una biblioteca en el directorio de su aplicación, se seguirá ese enlace y la biblioteca se incluirá en la aplicación que implemente en App Engine.
La ruta de inclusión del módulo de Python incluye el directorio raíz de tu aplicación, que es el directorio que contiene el archivo app.yaml
. Los módulos de Python que crees en el directorio raíz de tu aplicación están disponibles mediante una ruta desde la raíz. No olvides crear los archivos __init__.py
necesarios en tus subdirectorios para que Python los reconozca como paquetes.
Asegúrese también de que sus bibliotecas no necesiten ninguna extensión de C.
Conversaciones
Los hilos se pueden crear en Python 2.7 con los módulos thread
o threading
. Ten en cuenta que el tiempo de ejecución unirá los subprocesos cuando finalice la solicitud, por lo que los subprocesos no podrán ejecutarse después de que finalice la solicitud.
Hilos en segundo plano
El código que se ejecuta en una instancia con escalado manual o básico puede iniciar un subproceso en segundo plano que sobreviva a la solicitud que lo genera. Esto permite que una instancia realice tareas periódicas o programadas arbitrarias, o que siga trabajando en segundo plano después de que una solicitud haya vuelto al usuario.
Los os.environ
y las entradas de registro de un subproceso en segundo plano son independientes de los del subproceso que lo genera.
Debes importar el módulo google.appengine.api.background_thread
del SDK de App Engine.
La clase BackgroundThread es como threading.Threadclass
de Python, pero puede "sobrevivir" a la solicitud que la genera. También existe la función start_new_background_thread()
que crea un subproceso en segundo plano y lo inicia:
Herramientas
El SDK de App Engine incluye herramientas para probar tu aplicación, subir sus archivos, gestionar los índices de Datastore, descargar datos de registro y subir grandes cantidades de datos a Datastore.
El servidor de desarrollo ejecuta tu aplicación en tu ordenador local para que puedas probarla. El servidor simula los servicios de Datastore y las restricciones del sandbox. El servidor de desarrollo también puede generar la configuración de los índices de Datastore en función de las consultas que realice la aplicación durante las pruebas.
La herramienta gcloud
gestiona todas las interacciones de línea de comandos con tu aplicación que se ejecuta en App Engine. gcloud app deploy
se usa para subir tu aplicación a App Engine o para actualizar archivos de configuración individuales, como la configuración del índice de Datastore, que te permite crear nuevos índices antes de desplegar tu código. También puedes ver los datos de registro de tu aplicación para analizar su rendimiento con tus propias herramientas.
Simultaneidad y latencia
La latencia de tu aplicación es el factor que más influye en el número de instancias necesarias para atender tu tráfico. Si procesas las solicitudes rápidamente, una sola instancia puede gestionar muchas solicitudes.
Las instancias de un solo subproceso pueden gestionar una solicitud simultánea. Por lo tanto, existe una relación directa entre la latencia y el número de solicitudes que se pueden gestionar en la instancia por segundo. Por ejemplo, una latencia de 10 ms equivale a 100 solicitudes por segundo y por instancia.Las instancias multihilo pueden gestionar muchas solicitudes simultáneas. Por lo tanto, existe una relación directa entre la CPU consumida y el número de solicitudes por segundo.
Las aplicaciones de Python 2.7 admiten solicitudes simultáneas, por lo que una sola instancia puede gestionar nuevas solicitudes mientras espera a que se completen otras. La simultaneidad reduce significativamente el número de instancias que necesita tu aplicación, pero debes diseñar tu aplicación para que sea multihilo.
Por ejemplo, si una instancia B4 (aproximadamente 2,4 GHz) consume 10 Mciclos/solicitud, puedes procesar 240 solicitudes/segundo/instancia. Si consume 100 Mciclos por solicitud, puedes procesar 24 solicitudes por segundo y por instancia. Estas cifras son las ideales, pero son bastante realistas en cuanto a lo que puedes conseguir en una instancia.
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_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. |
Puede definir variables de entorno adicionales en el archivo app.yaml
,
pero los valores anteriores no se pueden anular.