Cloud Foundry

La compra hace 2 años de SpringSource por parte de VMware me pilló por sorpresa, ya que no entendia que hacia un proveedor de soluciones de virtualización comprando una empresa cuyo negocio era un framework para construir aplicaciones Java. Los analistas rápidamente comenzaron a elocubrar, que si VMware queria ampliar mercado ya que la cotización en bolsa estava estancada, que si significava la muerte de SpringSource (lo mismo dijeron de Hyperic), … Pero pocos se imaginaron entonces que su intención era ofrecer una solución PaaS, a pesar de que en la nota de prensa lo decía muy claro y que a los pocos dias se anunciara Cloud Foundry Enterprise Java Cloud, una especie de PaaS para aplicaciones Java corriendo en AWS. Pasado un tiempo, parecia además que no tenian una estrategia muy clara, que primero creo una alianza con salesforce, que luego la alianza es también con Google. Pués bien, la semana pasada nos vuelven a sorprender y anuncian la creación de Cloud Foundry, un PaaS de código abierto.

¿En que se diferencia esta de otras soluciones como Google AppEngine, Heroku o Engine Yard? Pués basicamente en 2 aspectos:

  • El primero es que es la primera plataforma PaaS liberada como open-source y que no está ligada a ningún entorno cloud concreto. Puedes descargarte el codigo, modificarlo, e instalarlo donde quieras (en local, en AWS/RackSpace/OpenStack, bajo una infraestructura VMware, …).
  • Y la segunda es que no está limitada ni a un lenguaje ni a un framework concreto, sino que admite algunos de los lenguajes y frameworks más populares actualmente, como Spring for Java, Grails, Ruby on Rails, Sinatra for Ruby y Node.js, además de soportar 3 motores de BD diferentes, MongoDB, MySQL y Redis.

En definitiva, que es la primera plataforma PaaS completamente gratuita y que no nos liga a una tecnologia en concreto (vendor lock-in). Como esta estrategia es bastante disruptiva, seguramente dinamizará el mercado y pronto veremos otras soluciones parecidas.

El servico se ofrecerá en 4 sabores, 2 de los cuales ya estan disponibles:

  • CloudFoundry.com: en entorno PaaS operado por Vmware, completamente montado y listo para usar. De momento este servicio está en beta y, por tanto, se ofrece de forma gratuita, aunque en un futuro está previsto que este entorno sea explotado comercialmente.
  • CloudFoundry.org: la comunidad open-source donde podremos participar en su desarrollo, y/o descargar e instalar la plataforma donde te plazca
  • Cloud Foundry Micro Cloud: una imagen gratuita para VMware Fusion o Player y lista para ser usada en tu escritorio. La idea es que puedas desarrollar y probar en tu propia estación de trabajo y luego despliegues contra un entorno de producción que se comporta exactamente igual al de tu escritorio. El servicio estará disponible durante el 2do trimestre de este año.
  • Cloud Foundry for the Enterprise and Service Providers: una versión comercial para ser utilizada en un entorno empresarial o por parte de proveedores de servicios que quieran ofrecer por si mismos un PaaS.

Si no lo has hecho ya, te recomiendo que pruebes la primera opción y te apuntes a la beta de CloudFoundry.com. Las invitaciones para probar el servicio se estan entregando con cuentagotas, pero con un poco de suerte te llegará una en breve. Como yo ya he recibido la mia, os voy a explicar mis experimentos.

En primer lugar instalamos Ruby y RubyGems, ya que la interficie de comandos para interactuar con los servicios está basada en este lenguaje y viene empaquetada como una gema. Acto seguido procedemos a instalar vmc:

~$ sudo gem install vmc
Fetching: vmc-0.3.10.gem (100%)
Successfully installed vmc-0.3.10
1 gem installed
Installing ri documentation for vmc-0.3.10…
Installing RDoc documentation for vmc-0.3.10…

Una vez instalada correctamente, indicamos que servidor nos va a dar servicio. En este caso escogeremos el servidor beta de cloudfoundy.com (aunque nos podemos descargar e instalar nuestro propio servidor):

~$ vmc target api.cloudfoundry.com
Succesfully targeted to [http://api.cloudfoundry.com]

Ahora le indicamos al servidor nuestras credenciales:

~$ vmc login
Email: xxx@xxx.xxx
Password: *****************
Successfully logged into [http://api.cloudfoundry.com]

Acto seguido nos creamos una aplicación de pruebas. Vamos con ejemplo sencillo usando Ruby y el framework de Sinatra:

~$ cd repos
~/repos$ mkdir test-frodenas
~/repos$ cd test-frodenas/
~/repos/test-frodenas$ vi test-frodenas.rb

require ‘sinatra’
get ‘/’ do
“Hello Ferdy from Cloud Foundry”
end

Y ahora vamos a desplegar nuestra aplicación. Dejaremos todas las opciones por defecto excepto el nombre de la aplicación:

~/repos/test-frodenas$ vmc push
Would you like to deploy from the current directory? [Yn]:
Application Name: test-frodenas
Application Deployed URL: ‘test-frodenas.cloudfoundry.com’?
Detected a Sinatra Application, is this correct? [Yn]:
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G)
Creating Application: OK
Would you like to bind any services to ‘test-frodenas’? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

Comprobamos que la aplicación se ha levantado correctamente:

~/repos/test-frodenas$ vmc instances test-frodenas

+——-+———+——————–+
| Index | State | Start Time |
+——-+———+——————–+
| 0 | RUNNING | 04/21/2011 09:56PM |
+——-+———+——————–+

~/repos/test-frodenas$ vmc stats test-frodenas

+———-+————-+—————-+————–+————–+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime |
+———-+————-+—————-+————–+————–+
| 0 | 0.1% (4) | 22.0M (128M) | 44.0K (2G) | 0d:0h:2m:50s |
+———-+————-+—————-+————–+————–+

Y solo nos queda acceder a la URL de la aplicación para comprobar que responde:

En caso de tener algún problema, podemos revisar los logs

~/repos/test-frodenas$ vmc logs test-frodenas
====> logs/stderr.log < ==== 172.30.8.253 - - [21/Apr/2011 19:57:27] "GET / HTTP/1.0" 200 30 0.0008 172.30.8.253 - - [21/Apr/2011 19:57:28] "GET / HTTP/1.0" 200 30 0.0003 172.30.8.253 - - [21/Apr/2011 19:57:28] "GET /favicon.ico HTTP/1.0" 404 18 0.0003 ====> logs/stdout.log < ==== == Sinatra/1.2.1 has taken the stage on 33248 for production with backup from Thin >> Thin web server (v1.2.11 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:33248, CTRL+C to stop

Vamos a explorar que otras opciones tenemos disponibles:

~/repos/test-frodenas$ vmc help

Usage: vmc [options] command [<args>] [command_options]
Try ‘vmc help [command]’ or ‘vmc help options’ for more information.

Currently available vmc commands are:

Getting Started
target [url] Reports current target or sets a new target
login [email] [–email, –passwd] Login
info System and account information

Applications
apps List deployed applications

Application Creation
push [appname] Create, push, map, and start a new application
push [appname] –path Push application from specified path
push [appname] –url Set the url for the application
push [appname] –instances <N> Set the expected number <n> of instances
push [appname] –mem M Set the memory reservation for the application
push [appname] –no-start Do not auto-start the application

Application Operations
start <appname> Start the application
stop <appname> Stop the application
restart <appname> Restart the application
delete <appname> Delete the application
rename <appname> <newname> Rename the application

Application Updates
update <appname> [–path] Update the application bits
mem <appname> [memsize] Update the memory reservation for an application
map <appname> <url> Register the application to the url
unmap <appname> <url> Unregister the application from the url
instances <appname> <num|delta> Scale the application instances up or down

Application Information
crashes <appname> List recent application crashes
crashlogs <appname> Display log information for crashed applications
logs <appname> [–all] Display log information for the application
files <appname> [path] [–all] Display directory listing or file download for [path]
stats <appname> Display resource usage for the application
instances <appname> List application instances

Application Environment
env <appname> List application environment variables
env-add <appname> <variable[=]value> Add an environment variable to an application
env-del <appname> <variable> Delete an environment variable to an application

Services
services Lists of services available and provisioned
create-service <service> [–name,–bind] Create a provisioned service
create-service <service> <name> Create a provisioned service and assign it <name>
create-service <service> <name> <app> Create a provisioned service and assign it <name>, and bind to <app>
delete-service [servicename] Delete a provisioned service
bind-service <servicename> <appname> Bind a service to an application
unbind-service <servicename> <appname> Unbind service from the application
clone-services <src-app> <dest-app> Clone service bindings from <src-app&ft; application to <dest-app>

Administration
user Display user account information
passwd Change the password for the current user
logout Logs current user out of the target system
add-user [–email, –passwd] Register a new user (requires admin privileges)
delete-user <user> Delete a user and all apps and services (requires admin privileges)

System
runtimes Display the supported runtimes of the target system
frameworks Display the recognized frameworks of the target system

Misc
aliases List aliases
alias <alias[=]command≶ Create an alias for a command
unalias <alias> Remove an alias
targets List known targets and associated authorization tokens

Help
help [command] Get general help or help on a specific command
help options Get help on available options

Así pues una de las opciones es ver que entornos de ejecución tenemos disponibles:

~/repos/test-frodenas$ vmc runtimes

+——–+————-+———–+
| Name | Description | Version |
+——–+————-+———–+
| node | Node.js | 0.4.5 |
| java | Java 6 | 1.6 |
| ruby18 | Ruby 1.8 | 1.8.7 |
| ruby19 | Ruby 1.9 | 1.9.2p180 |
+——–+————-+———–+

Los frameworks:

~/repos/test-frodenas$ vmc frameworks

+———+
| Name |
+———+
| spring |
| node |
| grails |
| sinatra |
| rails3 |
+———+

E incluso conocer los servicios que podemos utilizar:

~/repos/test-frodenas$ vmc services

============== System Services ==============

+———+———+——————————-+
| Service | Version | Description |
+———+———+——————————-+
| mysql | 5.1 | MySQL database service |
| mongodb | 1.8 | MongoDB NoSQL store |
| redis | 2.2 | Redis key-value store service |
+———+———+——————————-+

=========== Provisioned Services ============

Y ya solo nos queda parar o eliminar la aplicación para dejar el entorno limpio:

~/repos/test-frodenas$ vmc delete test-frodenas
Deleting application [test-frodenas]: OK

Si esto de trabajar con línea de comandos os parece *anticuado* y preferis utilizar un IDE, teneis a vuestro disposición la SpringSource Tool Suite, un editor completo para construir aplicaciones bajo Spring, o simplemente el plugin de CloudFoundry en el Marketplace de Eclipse. Os dejo algunas imagenes del plugin:


Tiene buena pinta ¿verdad? En un próximo post explicaré como instalar el entorno en tu propio servidor, ¿o alguien lo ha hecho ya y nos cuenta su experiencia?

Esta entrada fue publicada en General y etiquetada , , , . Guarda el enlace permanente.

Una respuesta a Cloud Foundry

  1. ialcazar dijo:

    Buena entrada. Me ha quedado bastante claro las diferentes soluciones que van a plantear. Sin duda tiene una pinta excelente. Hoy mismo he hecho una prueba con la invitación que me han enviado.

    Espero el siguiente post sobre como montar un servidor propio que seguro que le sacamos mucha utilidad.

    Un saludo

Deja un comentario

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

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.