Historia
Google App Engine o también conocido más comúnmente como GAE o App Engine
nos abre la infraestructura de producción de Google de forma gratuita
como plataforma de desarrollo y hospedaje de aplicaciones web.
El servicio fue lanzado el 7 de abril del 2008 como un servicio de cloud pero a diferencia de otros servicios en la nube como Amazon Web Services o Azure Services Platform de Microsoft, el servicio ofrecido por Google es un servicio de Plataforma como Servicio y no de Infraestructura como Servicio.
El uso de la infraestructura de servicio de Google App Engine es completamente gratuita hasta un Gigabyte de almacenamiento y cinco millones
de visitas mensuales. Si superamos esos límites entonces tendremos que
pagar por más recursos a Google a unos precios bastante asequibles.
Además podemos usar un dominio propio para la URL de nuestra aplicación o bien podemos usar un subdominio de appspot.com ofrecido de manera gratuita por Google al estilo de Heroku.
Recomiendo encarecidamente echarle un ojo a
la página de cuotas
para ver bien como va el tema de los servicios gratuitos y tal porque
eso de los cinco millones de visitas es cuanto menos un número
muy subjetivo.
Características
GAE soporta de manera oficial los lenguajes
de programación Python y Java de manera estable y en modo de beta
testing en lenguaje de programación
Go creado por ellos mismos. Al soportar Java, es posible además utilizar cualquier
lenguaje JVM
o lo que es lo mismo, cualquier lenguaje que pueda ejecutarse sobre una
máquina virtual de Java, aunque eso si, con serias limitaciones. Entre
dichos lenguajes se encuentran:
- Groovy
- JRuby
- Scala
- PHP
- Clojure
- Perl
GAE soporta varios frameworks bajo Python como
CherryPy,
Pylons,
Flask y
Django 0.96 y 1.2. Además la misma Google ha desarrrollado un framework propio llamado —viva la originalidad que les caracteriza—
webapp para aplicaciones web que van mejorando y actualizando. También existe un framework desarrollado específicamente para
GAE y siguiendo —supuestamente— la filosofía de Django llamado
GAE framework.
En cuanto a lo que respecta a Java, parece ser que es posible
utilizar Grails de forma bastante sencilla y poco traumática utilizando
para ello el
Plugin para App Engine.
Restricciones
- Las aplicaciones solo tienen permisos de lectura a los
archivos del sistema de archivos. Para almacenar datos y archivos en
modo lectura y escritura es necesario utilizar un sistema de archivos
virtual sobre el DataStore.
- Solo se puede ejecutar código a través de consultas HTTP
- Las aplicaciones Java solo pueden usar el conjunto considerado seguro de clases del JRE estándar. ( Comprueba el Listado de clases)
- Las aplicaciones no pueden crear nuevos hilos de ejecución
- Los
usuarios de Python pueden subir módulos para su uso en la plataforma
pero no aquellos que están completamente desarrollados en C o Pyrex
- El soporte para SSL solo está disponible par dominios *.appspot.com
- Un proceso iniciado en el servicio para responder a una consulta no puede durar más de treinta segundos
- No soporta sesiones persistentes, solo sesiones replicadas a las que además se les aplican ciertos límites.
- No se pueden abrir sockets, por lo tanto, no se puede usar Twisted
El entorno de desarrollo
El
SDK de Google App Engine viene con un
entorno de desarrollo que puede ser ejecutado en local en nuestra
máquina antes de subir los cambios a la nube y que simula completamente
el entorno del App Engine. El
SDK puede ser decargado de
la página de descargas del proyecto.
Para ejecutar el servidor del entorno de desarrollo tan solo debemos ejecutar el script
dev_appserver.py
y como parámetro el path al directorio que contiene la aplicación. Por ejemplo en una consola de un sistema tipo UNIX:
genbeta@dev ~ $ python dev_appserver.py mi_app
El script dev_appserver.py admite numerosas opciones, mira la ayuda para verlas.
El entorno de ejecución de Python
App Engine ejecuta nuestras aplicaciones mediante un intérprete de Python 2.5.2 cargado en un entorno “sandboxed“. Toda aplicación programada para correr en la nube de Google debe incorporar un archivo de configuración llamado app.yaml
donde se configuran diferentes aspectos de la aplicación y el entorno de ejecución.
El entorno de ejecución admite módulos de terceros programados íntegramente en Python
y no deben incluir ninguna extensión C o cualquier otro código
susceptible de ser compilado. El entorno incluye la librería estándar de
Python a excepción de algunos módulos que han sido desactivados por seguridad como por ejemplo la escritura de disco o los sockets.
Otros módulos de Python han sido reemplazados o personalizados para
hacerlos compatibles con App Engine. Un ejemplo de archivo de
configuración app.yaml
sería como el que sigue:
application: appdelaostia
version: 1
runtime: python
api_version: 1
handlers:
- url: .*
script: appdelaostia.py
El tema del entorno de ejecución de Python es bastante complejo y se escapa de la intención de esta introducción a Google App Engine, así que te recomiendo que revises la documentación del proyecto si estás interesado/a en saber más sobre él.
Introducción
Google App Engine es un
servicio gratuito que ofrece Google desde el año 2008 para la producción
y alojamiento de aplicaciones Web en lenguaje Python.
Este producto ofrece la
posibilidad de añadir otros desarrolladores a la producción de nuestra
aplicación, el único requisito es que los "Developers" sean usuarios
registrados de Google para acceder al marco colaborativo.
La infraestructura
"hard" de Google se dispone en una red no centralizada de estaciones con
servidores menores que alojan y corren las distribuciones de todas sus
aplicaciones, ya sea el buscador, su correo Gmail, los servicios de
vídeo, Docs...
Desde mediados del 2008,
Google permite utilizar esta infraestructura de manera gratuita para
alojar nuestras propias aplicaciones, con las limitaciones lógicas de
cualquier producto gratuito que pueden ser consultadas a la hora de
registrarse y acceder al servicio, suficientes para exigencias de
desarrollo en entornos educativos.
La escalabilidad y
seguridad de los datos y aplicaciones están garantizados, tanto por las
copias de seguridad residentes en stores lejanos como por la migración
de servicio ante cualquier incidente como si de una red eléctrica de
suministro en malla se tratara.
Lenguajes
Por el momento, las
aplicaciones deben usar el lenguaje Python, no se descarta que en un
futuro cercano aumente la disponibilidad a otros lenguajes conocidos.
Python es un lenguaje
interpretado creado a principios de los 90 por Guido van Rossum, en la
actualidad en nómina de Google y que está detrás de las herramientas de
software el App Engine. Dispone de sitio oficial,
http://www.python.org/,
donde se puede encontrar todo acerca de sus características, versiones,
descargas, documentación... está en inglés, también hay información
interesante en castellano buscando con "Don Google" como
http://pyspanishdoc.sourceforge.net/ y otros.
Versión
Google App Engine se
basa en la versión Python 2.5., con un runtime limitado por cuestiones
lógicas de seguridad, descartando así módulos de acceso al sistema de
ficheros de bases de datos y servidor, prohibe conexiones TCP, llamadas
de bajo nivel al sistema operativo, etc.
Framework
Todo proyecto de
software en Internet necesita soporte de programas, bibliotecas y un
lenguaje interpretado, esto es lo que se conoce como framework, el más
popular open source en aplicaciones bajo Python es Django, su sitio
oficial es
www.djangoproject.com/, también encontramos en castellano
http://django.es/.
En el enlace Documentación del Google App Engine aparecen
instrucciones de como usar Django específicamente para este servicio.
Google aporta su propio framework, sencillo y completamente integrado en el App Engine, es el framework "appweb".
Además de las APIs
(interfaces de programación de aplicaciones) generales que trae la
versión 2.5 de Python, webapp framework aporta 6 APIs específicas
valiosas y útiles que permiten registrar y autenticar usuarios, acceder a
la base de datos, enviar correos electrónicos, establecer comunicación
entre aplicaciones mediante http, gestionar la caché de memoria y
manipular y procesar imágenes.
El SDK (Kit de
desarrollo de software) que proporciona Google acompaña un servidor para
pruebas en local que imita a los servidores reales para testear las
aplicaciones creadas antes de subirlas al remoto.
Este SDK incluye las
librerías de las APIs disponibles y descritas anteriormente, el servidor
local de pruebas y otras aplicaciones de gestión.
Manual
Presentamos a
continuación, los pasos para trabajar con Google App Engine, la
instalación de las herramientas necesarias, así como la creación y
alojamiento en la "Cloud Google" de nuestras aplicaciones, este "how to"
se ha realizado sobre XP.
1. Descarga de Python 2.5 desde
http://python.org, sección download. Hacemos click sobre la 2.5.4. que aparece al final de la lista
2. Instalación de Python siguiendo las instrucciones del instalador.
4.
Durante al instalación, aceptamos las condiciones de la licencia y se
elegirá el directorio de instalación y se seleccionará la casilla "Add
product path to user PATH".
5. Verificación de la instalación del SDK lanzando el servidor de pruebas con una aplicación de ejemplo que viene incluida.
Buscamos a través de
nuestro explorador de archivos la carpeta guestbook y seleccionamos y
copiamos la ruta completa desde la raíz (por ej:
c:appenginedemosguestbook), abrimos una sesión en línea de comandos y
tecleamos: dev_appserver.py c:appenginedemosguestbook.
Con esta instrucción
lanzamos el servidor con la aplicación contenida en la carpeta que pasa
como parámetro. Puede haber diferencias en la ruta y carpeta que
contiene la aplicación de ejemplo guestbook según la subversión 2.5. de Python descargada.
Puede ser interesante
descender en la consola de comandos por el árbol del directorio a través
de instrucciones CHDIR hasta la carpeta inmediatamente superior a
guestbook e invocarla desde ahí.
Ten en cuenta que el
ejemplo también puede venir en ruta samplesguestbook o similar, según el
paquete Python descargado, por eso lo conveniente de buscarla.
Otro aspecto que es
importante para que funcione el servidor de pruebas es que cada uno
sustituya c:appengine por la ruta de instalación propia del SDK. Si todo
ha ido bien aparecerá la ventana siguiente.
Siempre que queramos podremos cerrar el servidor
pulsando Control + C en la consola, si vemos que tarda un poco podemos
actualizar el navegador para el retorno del cursor al display de
comandos. Puedes escribir algo en la caja y darle al botón Sign
Guestbook apareciendo lo escrito en otra respuesta del Servidor.
6. Vamos
a programar ahora nuestra primera aplicación HelloWorld, para ello
creamos una carpeta llamada engine que cuelgue directamente de C:/
7. Creamos
ahora nuestro primer script en Python, abrimos bloc de notas o wordpad
(Inicio, Accesorios y Bloc de Notas) y picamos el siguiente código
(nota: lo que está entre paréntesis y en cursiva son comentarios
aclaratorios que no deben escribirse):
print 'Content-Type: text/html' (lo que viene es texto/html para la respuesta http)
print '' (espacio)
print '<HTML>'
print '<BODY>'
print '<MARQUEE><H1>Hola Mundo, Hello World!!!!</H1></MARQUEE>' (imprime Hola Mundo y Hello World con formato H1 y en movimiento por la etiqueta marquee)
print '</BODY>'
print '</HTML>'
Lo guardamos como hola.py en la carpeta engine.
El método print escribe
la cadena de texto en la salida standar por lo que al ejecutarse en un
servidor web se genera la escritura de un documento respuesta a una
petición http.
8. Lo
siguiente es decirle al servidor cuando debe ejecutar este script, para
ello abrimos un nuevo documento en bloc de notas y escribimos lo
siguiente:
application: engine (id de la aplicación)
version: 1 (versión de la aplicación)
runtime: python (de momento Google solo deja Python)
api_version: 1 (versión API utilizada)
handlers: (manejadores o lista de URls aceptadas por nuestra aplicación con sus correspondientes scripts asociados)
- url: /.*
script: hola.py
Guardamos como app.yaml
en la carpeta engine. Este archivo actúa como descriptor de despliegue
asociando URl's con sus correspondientes scripts, como el fichero
web.xml en desarrollos Java EE. El formato yaml es un formato de
serialización de datos multilenguaje que pretende ser más sencillo y
legible que el XML, puedes ampliar información en
http://www.yaml.org.
Abrimos la consola de
comandos, arrancamos el servidor de prueba y cargamos nuestra aplicación
escribiendo desde C:> lo siguiente:
dev_appserver.py engine
A continuación abrimos el servidor de pruebas con el navegador y obtenemos lo siguiente.
9.
Activación del servicio.
Nos autenticamos con el usuario y contraseña de Google al igual que hacemos con Gmail, Docs...
Si aún no tienes una cuenta puedes crearla dando al enlace desde la página de login.
Pulsamos sobre crear una
aplicación y después deberemos verificar la cuenta mediante el envío
por parte de Google de un código por SMS a nuestro móvil sin coste
alguno.
Como España no aparece en la lista de distribución,
deberemos seleccionar Other (Not Listed) y poner el prefijo 34 delante
del número de nuestro móvil.
Hacemos click en Send y
al poco rato recibiremos un mensaje de texto en nuestro móvil con el
código a introducir en la verificación de nuestra cuenta. Este proceso
de verificación sólo hay que hacerlo al crear la primera aplicación de
nuestra cuenta.
Si
la verificación es correcta se nos pedirá el identificador y el título
de la aplicación que vamos a crear, esto es importante porque el
identificador definirá la URL con la que los usuarios accederán a
nuestra aplicación. En nuestro caso engine, y al comprobar la
disponibilidad nos encontramos con que ya está cogida, optamos
entonces por una ID más exótica como ajalospajaros, procedemos a
cambiar el nombre de la carpeta de trabajo engine por ajalospajaros y en
el fichero app.yaml modificamos la id de la aplicación sustituyendo
también engine por ajalospajaros. Finalmente la URL de acceso de los
usuarios será
http://ajalospajaros.appspot.com..
Hay que tener en cuenta
que si no queremos este dominio genérico appspot.com y disponemos de
cuenta en Google Apps (no confundir con Google App Engine, ver artículo
del Observatorio Tecnológico:
http://observatorio.cnice.mec.es/modules.php?op=modload&name=News&file=article&sid=653),
podremos asociar a nuestras aplicaciones los dominios que gestionemos
con dicha cuenta, cambiando las DNS y los registros que se te indiquen
desde Google en tu panel de administración del dominio que tengas.
10. Subida de la aplicación.
Abrimos la consola y escribimos lo siguiente desde C>: appcfg.py update ajalospajaros
Accedemos a la aplicación creada desde http://ajalospajaros.appspot.com
REFERENCIAS
- http://recursostic.educacion.es/observatorio/web/eu/internet/recursos-online/735-google-app-engine
- http://www.genbetadev.com/programacion-en-la-nube/introduccion-a-google-app-engine