IBM Bluemix - Introducción y Hola mundo! con Node.js y Cloud Foundry CLI

...

En esta publicación describiremos los pasos para realizar el despliegue de una aplicación Node.js en IBM Bluemix utilizado Cloud Foundry CLI, para quienes no estén familiarizados con IBM Bluemix haremos una breve introducción a los conceptos mas relevantes de su servicio Paas

IBM Bluemix

IBM Bluemix es una plataforma en la nube basada en estándares abiertos para la construcción, ejecución y gestión de aplicaciones. Con IBM Bluemix los desarrolladores pueden despreocuparse de la infraestructura y enfocarse en la construcción de aplicaciones utilizando opciones flexibles de despliegue, herramientas centradas en DevOps, y un potente conjunto de APIs y servicios de IBM y de terceros.

IBM Bluemix ofrece tres opciones de cómputo para el despliegue de aplicaciones:

  1. Cloud Foundry
  2. IBM Containers (Docker)
  3. Virtual Machines (Open Stack)
IBM Bluemix

Cloud Foundry

Cloud Foundry

Estamos transitando la era de "la nube", en esta nueva era las plataformas para la ejecución de aplicaciones comienzan a ser entregadas como servicio, concepto que se conoce con el término plataforma como servicio o PaaS (del inglés Platform as a Service).

PaaS hace que sea mucho más fácil implementar, ejecutar y escalar las aplicaciones. Mientras algunas ofertas de PaaS se limitan a determinados lenguajes, marcos de trabajo, o restringiendo el despliegue a una sola nube, Cloud Foundry es el estándar abierto para PaaS que permite elegir entre múltiples proveedores de nube, marcos de trabajo y servicios para la construcción de aplicaciones.

Al ser un proyecto de código abierto, hay una gran comunidad contribuyendo y apoyando Cloud Foundry, entre ellas IBM. IBM Bluemix extiende Cloud Foundry con múltiples tiempos de ejecución (runtimes) y servicios administrados que junto a potentes herramientas empresariales de gestión y desarrollo (DevOps) permiten a los desarrolladores componer rápidamente sus aplicaciones sin preocuparse por la infraestructura subyacente.

El valor que ofrece IBM Bluemix frente a otros proveedores de PaaS es el tipo de servicios que ofrece camo parte de su catálogo, en el mismo podremos encontrar desde un motor de reglas hasta servicios de comprensión del lenguaje basados en tecnología IBM Watson.

En este artículo utilizaremos un tiempo de ejecución Node.js basado en Cloud Foundry para tener un primer contacto con el servicio PaaS de IBM Bluemix.

IBM Containers (Docker)

IBM Containers (Docker)

Una máquina virtual (VM) es una implementación a nivel de software de un entorno físico de hardware. Las máquinas virtuales se utilizan para ejecutar aplicaciones y sistemas operativos completos "dentro" de un hardware virtualizado que es proporcionado por un hipervisor. El hipervisor es el software que separa la máquina virtual del equipo físico y es responsable de asignar los recursos según sea necesario.

Cada contenedor es una plataforma de aplicaciones segura cuya ejecución se realiza de manera aislada como un proceso independiente en el sistema operativo del equipo que ejecuta el contenedor. Las aplicaciones incluidas en contenedores pueden ejecutarse en cualquier lugar: estaciones de trabajo de desarrollo corriendo Windows, servidores que ejecutan Ubuntu, o en las VMs de un centro de datos productivo corriendo Red Hat.

Docker es una tecnología de código abierto para la virtualización de contenedores combinada con un flujo de trabajo que facilita la contenerización de aplicaciones. Los contenedores de IBM (IBM Containers) permiten ejecutar contenedores Docker alojados en la nube de IBM Bluemix facilitando de esta forma la tarea de escalar las aplicaciones en respuesta a un cambio en la demanda.

Virtual Machines (Open Stack)

Virtual Machines (Open Stack)

Los contenedores (containers) son objetos virtuales de software que incluyen todos los elementos que una aplicación necesita para funcionar. Un contenedor se crea a partir de una imagen la cual alberga y soporta una determinada aplicación. Cada imagen incluye sólo la aplicación que soporta y sus dependencias.

OpenStack es un sistema operativo para la nube que controla grandes agrupaciones de recursos de computación, almacenamiento y redes dentro de un centro de datos, todo ello gestionado a través de un tablero que permiten a los administradores tener el control de toda la infraestructura mientras que delega la provisión de los recursos a los usuarios a través de una interface web.

IBM Bluemix proporciona la infraestructura de máquinas virtuales de IBM como una característica que aun se encuentra en su fase de pruebas (beta). Se puede utilizar esta infraestructura para crear máquinas virtuales que se ejecutan en nubes basadas en OpenStack, dentro o fuera de IBM Bluemix.

Obtener una cuenta de IBM Bluemix

Para comenzar a probar las capacidades PaaS de IBM Bluemix será necesario contar con una cuenta, la misma se puede crear accediendo a la página de IBM Bluemix y presionar REGISTRARSE.

Crear una cuenta de IBM Bluemix
Pantalla 1 - Crear una cuenta de IBM Bluemix

Si contamos con un IBM ID podremos utilizarlo para simplificar el proceso de registración, luego de completar los datos requeridos y completar el proceso tendremos que esperar el correo de aprobación de la cuenta para comenzar a utilizar IBM Bluemix.

Con la creación de la cuenta accedemos a un mes sin cargo para probar los servicios de IBM Bluemix dentro de ciertos límites de recursos y procesamiento, luego del mes podremos utilizar 500 MB de memoria mensuales sin cargo para aplicaciones y contenedores, ademas de poder utilizar varios servicios con planes gratuitos.

Panel de control y conceptos de Cloud Foundry

Una vez que la cuenta de usuario fue aprobada poderemos iniciar sesión en IBM Bluemix y acceder a la consola.

Consola de IBM Bluemix
Pantalla 2 - Consola de IBM Bluemix

Para comprender algunos de los aspectos de IBM Bluemix conviene repasar algunos conceptos de Cloud Foundry:

  1. Organización (ORG). Una organización es una cuenta de desarrollo que un individuo o múltiples colaboradores pueden poseer y utilizar. Todos los colaboradores acceder a una organización con sus cuentas de usuario. Los colaboradores dentro de una organización compartes recursos y la cuota asociada al plan de los mismos.
  2. Cuentas de usuario. Una cuenta de usuario representa una persona individual en el contexto de una instalación de Cloud Foundry. Un usuario puede tener diferentes roles en diferentes espacios dentro de una organización, gobernando el nivel y el tipo de acceso que tienen dentro de los espacio.
  3. Espacios. Toda aplicación y servicio tiene como alcance un espacio. Cada organización contiene al menos un espacio. Un espacio proporciona un conjunto de accesos de usuario a una ubicación compartida para el desarrollo, implementación y mantenimiento de aplicaciones. Los roles dentro de un espacio sólo aplican a ese espacio particular.
  4. Roles y Permisos. Un usuario puede tener uno o más roles. La combinación de estos roles define la totalidad de los permisos que un usuario tiene en la organización y dentro de los espacios específicos dentro de la misma.

Crear un nuevo espacio para realizar pruebas

Crearemos un espacio dentro de la organización que nos asignó IBM Bluemix destinado a pruebas de concepto de Node.js, para ello presionaremos la acción + Crear un espacio, especificaremos node.js poc como nombre del espacio y luego presionaremos CREAR.

Crear un nuevo espacio dentro de IBM Bluemix
Pantalla 3 - Crear un nuevo espacio dentro de IBM Bluemix

Finalizado el proceso de creación podremos visualizar el nuevo espacio en la consola de IBM Bluemix.

Visualización del nuevo espacio dentro de la consola
Pantalla 4 - Visualización del nuevo espacio dentro de la consola

Crear una aplicación Node.js

Es el momento de crear una aplicación para desplegarla en IBM Bluemix, no es el objetivo del artículo profundizar en el desarrollo de aplicaciones basadas en Node.js, por lo cual construiremos una aplicación muy simple que nos permita verificar el mecanismo de despliegue utilizando Cloud Foundry CLI.

Descargar e instalar IBM SDK for Node.js

Para el desarrollo y las pruebas de nuestra aplicación utilizaremos el IBM SDK for Node.js, podríamos utilizar el SDK estándar, sin embargo nos inclinamos por utilizar el SDK de IBM ya que permite monitorear las aplicaciones utilizando el software de monitoreo IBM Monitoring and Diagnostic Tools - Health Center.

Dentro de la página del IBM SDK for Node.js es posible descargar el software para varias plataformas, incluido Mainframe!!, en nuestro caso seleccionamos Windows como plataforma.

Acceso a página de descarga de IBM SDK for Node.js
Pantalla 5 - Acceso a página de descarga de IBM SDK for Node.js

Una vez que accedemos a la página de descarga tendremos que elegir la arquitectura de procesador, en nuestro caso descargamos la versión de 64 bits, una vez descargado, ejecutaremos el asistente que nos permitirá instalar el SDK en nuestro equipo local.

Inicio del asistente de instalación de IBM SDK for Node.js
Pantalla 6 - Inicio del asistente de instalación de IBM SDK for Node.js

Aplicación Hola mundo! en Node.js

El siguiente snipet contiene el código de nuestra aplicación Node.js, es muy simple, pero nos servirá para evaluar el mecanismo de despliegue de aplicaciones en IBM Bluemix utilizando Cloud Foundry CLI.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var http = require('http');
var port = 8080;
var host = 'localhost';
 
var server = http.createServer(handleRequest).listen(port, host);
 
console.log('Escuchando en el host: ' + host);
console.log('Escuchando en el puerto: ' + port);
 
function handleRequest(request, response) {
    //HTML - MAIN
    var pageMainTemplate = '<html>' +
    '<head>' +
    '<meta http-equiv="Content-Type" ' +
    'content="text/html; charset=UTF-8" />' +
    '</head>' +
    '<body>' +
    '<h1>MG Developers - Node.js - Hola mundo!</h2>' +
    '</div>' +
    '</body>' +
    '</html>';
         
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.write(pageMainTemplate);
    response.end();
}

A continuación se muestra el comando ejecutado para probar la aplicación y el resultado obtenido al accederla desde un navegador de Internet.

C:\_workspaces\node.js\poc.001>node server.js
                        Escuchando en el host: localhost
                        Escuchando en el puerto: 8080
                        
Acceso a la aplicación Node.js de prueba
Pantalla 7 - Acceso a la aplicación Node.js de prueba

Cambios a la aplicación para ser desplegada en IBM Bluemix

Cloud Foundry espera una archivo package.json comp parte de los archivos que componen una aplicación Node.js. En este archivo se pueden especificar varios valores de utilidad como la versión de Node.js que se desea utilizar, el nombre de la aplicación, la versión, el nombre del autor, las dependencias, etc. A continuación se muestra el contenido del archivo package.json que utilizaremos.

1
2
3
4
5
6
7
8
9
10
11
{
    "name": "mgdevelopers-nodejs-poc-01",
    "version": "0.0.1",
    "description": "MG Developers - Poc 01 - Node.js",
    "dependencies": {
    },
    "engines": {
        "node": "0.10.26"
    },
    "repository": {}
}

Es necesario utilizar la variable de entorno VCAP_APP_PORT y VCAP_APP_HOST para determinar en que dirección y en qué puerto la aplicación debe escuchar, es necesario tener en cuenta que estos valores dependen de la infraestructura subyacente. Será conveniente introducir los siguientes cambios en la aplicación para asignar a las variables host y port valores compatibles con nuestro entorno local y el de IBM Bluemix.

1
2
3
4
5
6
var http = require('http');
// Cambios en la inicialización de las variables
var port = (process.env.VCAP_APP_PORT || 8080);
var host = (process.env.VCAP_APP_HOST || 'localhost');
// Resto del código
// ....

Por último, para facilitar el depsliegue, el nombre del archivo de nuestra aplicación debe ser server.js, de esta forma se puede utilizar el comando de inicialización pre definido y no será necesario especificarlo al momento de hacer el despliegue.

Desplegar la aplicación utilizando Cloud Foundry CLI

Para realizar el despliegue de nuestra aplicación en IBM Bluemix utilizaremos la interface de línea de comando (CLI) de Cloud Foundry.

Descargar e instalar Cloud Foundry CLI

De la página de descarga de Cloud Foundry CLI seleccionaremos el instalador estable para el sistema operativo con el cual estemos trabajando, en nuestro caso Windows de 64 bits.

Descarga de Cloud Foundry CLI
Pantalla 8 - Descarga de Cloud Foundry CLI

Luego será necesario ejecutar el asistente que nos permitirá instalar la interfaz de línea de comando en nuestro equipo local.

Inicio del asistente de instalación de Cloud Foundry CLI
Pantalla 9 - Inicio del asistente de instalación de Cloud Foundry CLI

Iniciar sesión en IBM Bluemix en el espacio "node.js poc"

Antes de poder desplegar la aplicación será necesario ejecutar el siguiente comando para iniciar sesión, la url https://api.ng.bluemix.net es el API End Point de IBM Bluemix.

cf login -a https://api.ng.bluemix.net

Luego de ejecutar el comando nos serán solicitadas las las credenciales utilizadas para acceder a IBM Bluemix y luego el espacio que utilizaremos, en nuestro caso node.js poc.

C:\_jdevelopment\CloudFoundry>cf login -a https://api.ng.bluemix.net
                        API endpoint: https://api.ng.bluemix.net
                        
                        Email> diego_mendoza
                        Password>
                        Authenticating...
                        OK
                        
                        Targeted org diego_mendoza
                        
                        Select a space (or press enter to skip):
                        1. dev
                        2. node.js poc
                        
                        Space> 2
                        Targeted space node.js poc
                        
                        API endpoint:   https://api.ng.bluemix.net (API version: 2.27.0)
                        User:           
                         diego_mendoza@microgestion.comEsta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.
                         
                        Org:            diego_mendoza
                        Space:          node.js poc
                        

Desplegar la aplicación haciendo un push

Para desplegar el código será necesario estar ubicados en el directorio donde se encuentran los archivos server.js y package.json, y luego ejecutar el siguiente comando para desplegar el contenido del directorio en IBM Bluemix.

cf push mgdevelopers-nodejs-poc-01 -m 64M -n mgdevelopers-nodejs-poc-01 -c null 

Si todo funciona correctamente la ejecución debería arrojar un resultado similar al siguiente:

C:\_workspaces\node.js\poc.001>cf push mgdevelopers-nodejs-poc-01 -m 64M -n mgdevelopers-nodejs-poc-01 -c null
                        Creating app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza...
                        OK
                        
                        Creating route mgdevelopers-nodejs-poc-01.mybluemix.net...
                        OK
                        
                        Binding mgdevelopers-nodejs-poc-01.mybluemix.net to mgdevelopers-nodejs-poc-01...
                        OK
                        
                        Uploading mgdevelopers-nodejs-poc-01...
                        Uploading app files from: C:\_workspaces\node.js\poc.001
                        Uploading 1.2K, 2 files
                        Done uploading
                        OK
                        
                        Starting app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza...
                        -----> Downloaded app package (4.0K)
                        
                        -----> IBM SDK for Node.js Buildpack v2.2-20150630-1721
                               Based on Cloud Foundry Node.js Buildpack v64
                        -----> Reading application state
                               package.json...
                               build directory...
                               cache directory...
                               environment variables...
                               Node engine range:   0.10.26
                               Npm engine:          unspecified
                               Start mechanism:     server.js
                               node_modules source: package.json
                               node_modules cached: false
                               NPM_CONFIG_PRODUCTION=true
                               NODE_MODULES_CACHE=true
                        -----> Installing binaries
                               Installing IBM SDK for Node.js (0.10.26) from cache
                               Using default npm version: 1.4.3
                        -----> Checking and configuring service extensions before installing dependencies
                        -----> Building dependencies
                               Installing node modules
                               npm WARN package.json mgdevelopers-nodejs-poc-01@0.0.1 No README data
                        -----> Checking startup method
                               No Procfile; Adding 'web: node server.js' to new Procfile
                        -----> Checking and configuring service extensions after installing dependencies
                        -----> Installing App Management
                        -----> Building runtime environment
                        -----> Finalizing build
                               Creating runtime environment
                               Cleaning previous cache
                               Caching results for future builds
                        -----> Build succeeded!
                               mgdevelopers-nodejs-poc-01@0.0.1 /tmp/staged/app
                               └── (empty)
                        -----> Uploading droplet (8.3M)
                        
                        0 of 1 instances running, 1 starting
                        1 of 1 instances running
                        
                        App started
                        OK
                        
                        App mgdevelopers-nodejs-poc-01 was started using this command `./vendor/initial_startup.rb`
                        
                        Showing health and status for app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza..
                        .
                        OK
                        
                        requested state: started
                        instances: 1/1
                        usage: 64M x 1 instances
                        urls: mgdevelopers-nodejs-poc-01.mybluemix.net
                        last uploaded: Mon Jul 13 12:55:30 UTC 2015
                        stack: lucid64
                        buildpack: SDK for Node.js(TM) (ibm-node.js-0.10.26)
                        
                             state     since                    cpu    memory         disk          details
                        #0   running   2015-07-13 09:56:14 AM   0.0%   16.6M of 64M   30.8M of 1G
                        

Visualización de la aplicación instalada en la consola de IBM Bluemix

Luego de instalar la aplicación podemos visualizar como han cambiado las cosas en la consola de IBM Bluemix.

Visualización de la consola de IBM Bluemix con la aplicación desplegada
Pantalla 10 - Visualización de la consola de IBM Bluemix con la aplicación desplegada

Si accedemos al panel de control de la aplicación tendremos una visión mas detallada de sus características, estado y funcionamiento, en este panel se pueden modificar parámetros como la cantidad de instancias asignadas, la memoria asignada, etc.

Panel de control de la aplicación Node.js
Pantalla 11 - Panel de control de la aplicación Node.js

Prueba de la aplicación desplegada en IBM Bluemix

Estamos en condiciones de acceder a la aplicación a través de la url: http://mgdevelopers-nodejs-poc-01.mybluemix.net/.

Acceso a la aplicación Node.js desplegada en IBM Bluemix
Pantalla 12 - Acceso a la aplicación Node.js desplegada en IBM Bluemix

Conclusiones

En este artículo introductorio se describieron los conceptos fundamentales necesarios para comenzar a utilizar el servicio PaaS de IBM Bluemix, conocer estos conceptos ayuda a comprender de que se trata esta "nube" y que servicios ofrece: Cloud Foundry, Docker y Openstack.

Desde el punto de vista práctico se tuvo un primer contacto con la consola y se pudo verificar la facilidad con la que es posible desplegar una aplicación en IBM Bluemix utilizado la interfaz de línea de comando de Cloud Foundry.

Referencias

Modificado por última vez en Domingo, 05 Julio 2015 05:02