sábado, 29 de agosto de 2015

PROGRAMACIÓN GOOGLE APLICACIONES ENGINE CON PYTHON

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

En el siguiente enlace puedes encontrar un listado completo de implementaciones de diferentes lenguajes sobre JVM.
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.


 .        Descarga el SDK de Google App Engine desde http://code.google.com/appengine/downloads.html

 




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.
Abriendo el navegador contra la dirección http://localhost:8080/ podremos ver la aplicación guestbook.







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.
Si es la primera vez que subimos una aplicación a Google, tendremos que activar el servicio, para ello accedemos a http://appengine.google.com/start.
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


























































No hay comentarios:

Publicar un comentario