Durante los últimos años, la oferta de servicios de alojamiento de aplicaciones web, orientada a programadores que quieren abstraerse de la infraestructura en la que las apps se ejecutan, no ha hecho más que crecer y sofisticarse.

Desde los primeros tiempos de Heroku y sus “dynos”, allá por 2007, varios proveedores se han sumado a una oferta amplia de este tipo de plataformas de servicios (PaaS). A día de hoy destaca Google App Engine (GAE) debido a su versatilidad y sencillez de uso. GAE permite a los programadores publicar sus aplicaciones de forma ágil mediante su filosofía de microservicios.

Para entender porque Google App Engine destaca y cuáles son sus fortalezas, veamos un ejemplo práctico de cómo podemos desplegar una aplicación en este entorno y hacerla evolucionar.

Usaremos una aplicación muy simple hecha en Python 2.7, que es uno de los lenguajes soportados en el “Standard Environment” de GAE. No obstante, si necesitáramos otra versión de Python o si hubiésemos desarrollado nuestra aplicación en un lenguaje no soportado por este entorno, siempre podríamos usar el “Flexible Environment“, que nos permitiría elegir casi cualquier entorno de ejecución para nuestra aplicación web.

Desplegar una aplicación con Google App Engine - CAPSiDE

Antes de poder desplegar una aplicación con Google App Engine, es necesario tener una cuenta Google y habilitar Google Cloud Platform (GCP) en esa cuenta. Una vez tenemos la cuenta habilitada, podemos entrar en la consola web de Google Cloud. Desde aquí, hemos de crear un proyecto para desplegar la aplicación. Los proyectos son la base para empezar a utilizar cualquiera de los servicios de GCP.

En el momento de creación de una cuenta, Google Cloud Platform ofrece 300$ en crédito que se pueden gastar durante los 12 primeros meses, además, existen varios servicios que son siempre gratuitos

Para empezar a trabajar con GAE, lo mejor, es tener instalado el SDK de Google Cloud, que está disponible para varios sistemas operativos. Con este SDK, podremos hacer los despliegues de nuestra aplicación directamente sobre GAE, pero también podremos probar nuestro desarrollo localmente en la máquina donde lo tengamos instalado. Los candidatos para instalar el SDK pueden ser varios. Por ejemplo, la máquina en la que trabajamos normalmente, una máquina virtual que usemos como entorno de desarrollo o incluso una instancia de Google Compute Engine que utilicemos como entorno de desarrollo y que apagaremos cuando no sea necesaria. En los ejemplos que siguen, hemos instalado el SDK en una máquina virtual Linux.

Una vez instalado el SDK de Google Cloud hay que instalar los componentes adicionales para el entorno de ejecución. En nuestro caso, instalaremos la extensión de App Engine para Python. Lo haremos ejecutando el comando de debajo en la máquina donde hayamos instalado el SDK.

[email protected]:~$>gcloud components install app-engine-python

Ya tenemos todas las herramientas necesarias para hacer el despliegue en Google App Engine, solo nos falta tener una aplicación. Para esta ocasión, hemos creado una app muy sencilla que solamente muestra una imagen y que tiene un botón para indicar si la imagen te gusta. La imagen corresponde a un nuevo tipo de nubes includida en la última revisión del “Cloud Atlas” de la Organización Meterorológica Mundial.

Desplegar una aplicación con Google App Engine - CAPSiDE

Desplegando una aplicación con Google App Engine

La aplicación que vamos a desplegar está aquí.

Para descargar la versión 1 de esta aplicación, lo mejor es clonar el repositorio Github en nuestro entorno de desarrollo. Con el comando de debajo, clonaremos la rama de la versión 1 de la aplicación en el directorio local appv1.

[email protected]:~$>git clone https://github.com/capside/appengine.git -b version1 --single-branch appv1

Lo primero será probar si la aplicación funciona en el entorno local de desarrollo, para eso, podemos ejecutar el siguiente comando.

[email protected]:~>cd appv1
[email protected]:~/appv1$>dev_appserver.py app.yaml --host=0.0.0.0

Si todo funciona, la versión 1 de nuestra aplicación se estará ejecutando en la máquina de desarrollo y podremos conectarnos a su puerto 8080 para ver la aplicación. Cuando hayamos probado la aplicación en el entorno local, podemos desplegar directamente en GAE con el comando

[email protected]:~/appv1$>gcloud app deploy -v 1

Como se puede observar, le estamos pasando un parámetro diciendo que queremos desplegar la aplicación con la etiqueta de versión “1”. Si no especificamos ese parámetro, el la etiqueta de la versión que se desplegará se sacará del timestamp que tenga la máquina que usamos para el despliegue en ese momento.

Al desplegar con éxito, podremos ver algo como esto en la consola de Google Cloud:

Deploying an app with Google App Engine - CAPSiDE

De la misma forma que hemos desplegado la versión 1 de nuestra aplicación, Google App Engine nos permite desplegar otras versiones. Ya que tenemos la versión 2 en otra rama de Github, podemos descargarla en un directorio distinto de nuestro servidor de desarrollo, por ejemplo:

[email protected]:~/appv1$>cd
[email protected]:~$>git clone https://github.com/capside/appengine.git -b version2 --single-branch appv2

Ahora podemos probar nuestra segunda versión y, si estamos satisfechos, desplegarla sobre una nueva versión en GAE con este comando.

[email protected]:~$>cd appv2
[email protected]:~/appv2$>gcloud app deploy -v 2 --no-promote

En este caso, el parámetro –no-promote le indica a Google App Engine que no queremos que esta versión entre en producción, simplemente queremos desplegarla.

Cuando tengamos desplegada esta segunda versión, la consola de Google Cloud mostrará algo parecido a esto:

Desplegar una aplicación con Google App Engine - CAPSiDE

Los enlaces que aparecen debajo de la columna “Version” apuntan a las URLs de cada una de las versiones creadas, es decir, ambas versiones están activas y desplegadas. Sin embargo, la URL principal de nuestra aplicación en GAE nos llevará solamente a la versión 1 de la aplicación ya que de momento esa es la configuración que hemos decidido desplegar.

Si queremos pasar nuestra versión 2 a producción, podemos hacerlo pulsando el botón “split traffic“, que aparece rodeado con un círculo en esta imagen.

Desplegar una aplicación con Google App Engine - CAPSiDE

Una vez elegimos ese botón, se nos presenta una pantalla donde podemos elegir el porcentaje de tráfico que queremos mandar a cada una de las versiones que tenemos desplegadas, así como el criterio que queremos usar para decidir como queremos repartir la carga entre nuestras versiones.

En nuestro caso, vamos a poner ambas versiones en producción, pero a la versión 2 solo le mandaremos el 10% del tráfico mientras probamos. Esto podría sería una forma de hacer “Canary Testing”. Si en vez de mandar solo el 10% a la versión 2, mandásemos el 50%, podríamos considerarlo una forma de hacer “A/B testing“.

Deploying an app with Google App Engine - CAPSiDE

Para ver nuestra versión 2 en funcionamiento, tendremos que probar a cargar nuestra aplicación varias veces, desde varios navegadores e incluso desde varias máquinas distintas. Con un número suficientemente grande de pruebas, veremos que se cumplen las distribuciones de cargas que hemos puesto en la opción de “Split Traffic” y que tenemos ambas versiones en producción.

Hemos desplegado 2 versiones de nuestra aplicación de una forma muy sencilla y podemos elegir el porcentaje de tráfico que se destina a cada una de ellas. Además, debido a que ambas versiones son alcanzables bajo su propia URL, también podemos hacer todas nuestras pruebas antes de que una versión particular entre en producción.

Para entender con más detalle cual de nuestras versiones tiene más éxito, sería óptimo haber incluido lógica en nuestra aplicación para sacar métricas que nos ayuden a entender cual de las dos versiones gusta más. Para ayudarnos con esta tarea, GAE tiene disponibles, de forma muy sencilla, muchos de los servicios que ofrece Google Cloud. En el próximo post hablaremos de cómo usar algunos de esos servicios en nuestra aplicación y saber cual de ellas tiene más éxito.

TAGS: google app engine, google cloud, google compute engine, python

speech-bubble-13-icon Created with Sketch.
Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
*