Vamos a tratar de hacer un ejemplo mínimo, para centrarnos en Azure como plataforma y que por otro lado nos permita ver "nubes" de inmediato.
Nuestro ejemplo será una simple página Web que muestre la última fotografía del satélite meteorológico Meteosat. En ella podremos introducir observaciones sobre la imagen y guardar los datos mediante un botón de comando, pero de momento nos conformaremos con mostrar la fotografía, dejando para más adelante la implementación de la manipulación y almacenamiento de datos.
Para empezar, arrancamos Visual Studio con privilegios de administrador, dado que el entorno de simulación local de la plataforma requerirá de ciertos permisos sobre nuestra máquina. Creamos un proyecto de la nueva categoría "Cloud", seleccionando como plantilla "Windows Azure Cloud Service", y asignamos los nombres WeatherService y CloudMania al proyecto y la solución, respectivamente.
Una vez que aceptamos el diálogo, se nos consultará qué roles debe implementar el servicio que queremos desarrollar. Podemos ver los roles como las máquinas virtuales que vamos a utilizar para desplegar nuestra aplicación en la nube. Cada rol nos presenta una configuración distinta de máquina orientada a unas tareas concretas. Los roles que se nos proponen son los siguientes:
- ASP.NET Web Role, destinado a aplicaciones ASP.NET tradicionales que también podremos utilizar, por ejemplo, para alojar aplicaciones Silverlight. Destacar que cuando hagamos uso de este rol para agregar una aplicación que ya teníamos desarrollada previamente, ésta no podrá ser del tipo "Web Site", ya que por ahora dichas plantillas no están soportadas, por lo que tendremos que migrar nuestro sitio Web a un proyecto de tipo "Web Application" para poder incluirlo en el Cloud Service.
- ASP.NET MVC 2 Web Role, orientado a desarrollos de aplicaciones con el nuevo framework MVC.
- WCF Service Web Role, para programar servicios basados en WCF.
- Worker Role, enfocado al desarrollo de servicios sin interfaz de usuario.
- CGI Web Role, para el despliegue de aplicaciones basadas en el protocolo FastCGI, como pueden ser gestores de contenido desarrollados en PHP.
Dada la naturaleza de nuestro ejercicio, tan solo necesitamos
un rol Web ASP.NET. Al indicarlo, se nos generará
la estructura de nuestra solución (figura 1), donde
nos encontraremos con un nuevo proyecto: al proyecto
WeatherService, que contiene la configuración y metadatos
del nuevo servicio, se añadirá otro llamado WebRole1,
que contiene una implementación prácticamente
igual a lo que sería un proyecto ASP.NET tradicional.
Centrémonos de momento en Default.aspx para
mostrar la última imagen del Meteosat (listado 1); bastará
con insertar una etiqueta (tag) de imagen en la página
y ubicar un par de controles con el espacio para los
comentarios y el botón de guardar.
Ahora ya estamos en disposición de arrancar nuestra
solución; no almacena datos, pero ya mostrará la última
fotografía del satélite. Al ejecutar, advertiremos que nos aparece un nuevo icono de notificación, ubicado en la esquina inferior derecha de la pantalla, que muestra
el estado de los servicios asociados a
nuestro entorno de desarrollo. En estos
momentos se están levantando los entornos
de desarrollo locales de los dos servicios
clave de la plataforma Azure: Development
Fabric y Development Storage.
Listado 1. Mostrar última imagen del Meteosat (Default.aspx)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebRole1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="float:left; margin-right: 20px;">
<img ID="Imagen" runat="server" alt="Foto Meteosat"
src="http://www.meteosat.com/imagenes/meteosat/sp/ultima_meteosat-visible.jpg"/>
</div>
<div>
<asp:TextBox ID="txtObservaciones" runat="server" TextMode="MultiLine"
Height="100px" Width="300px"/>
<br/>
<asp:Button ID="btnGuardar" runat="server" Text="Almacenar"
onclick="btnGuardar_Click" />
</div>
</form>
</body>
Development Fabric es el servicio que
nos simula el Fabric Controller de Azure,
un servicio vital del sistema, dado que es
el encargado de monitorizar, mantener y
provisionar el entorno donde se ejecuten
nuestras aplicaciones en la nube.
Por otro lado, con Development Storage
dispondremos en local de todas las
herramientas disponibles en Azure para
que nuestros desarrollos puedan almacenar
datos no relacionales accesibles vía
REST. El servicio contempla tres modelos
de almacenamiento:
- Tablas. Se trata de un modelo prácticamente idéntico al de una tabla de una base de datos convencional, pero sin la capacidad de relacionarse con otras tablas: información estructurada, pero no relacionada.
- Blobs: Estructura orientada a almacenar archivos binarios de gran tamaño (hasta un total de 200 Gb. En nuestro entorno local, el tamaño máximo se reduce a 2 Gb).
- Colas: Funcionalidad orientada a comunicar diferentes procesos me - diante mensajes de menos de 8 Kb. No se trata tanto de almacenar información, sino de ponerla a disposición de varios servicios, tanto en la nube como fuera de ella.
Ahora que ya tenemos desarrollada la primera parte de nuestra "nube local", tendremos la posibilidad de interactuar con los servicios de Fabric y Storage mediante los administradores accesibles en el menú contextual del icono de notificación. También podremos configurar nuestro servicio editando en el proyecto WeatherService los archivos ServiceConfiguration.cscfg y ServiceDefinition.csdef o, sin necesidad de tocar XML, configurar directamente vía WebRole1 (ver figura 2). Es de destacar con qué facilidad podremos definir el número de máquinas virtuales que soportarán nuestra aplicación, la potencia de las mismas (tabla 1) o la sencilla configuración de los endpoints.
Para probar, ¿primero hay que pasar la tarjeta?
¿Y cómo podemos hacer pruebas reales en la nube? Microsoft ofrece dos modalidades gratuitas en promoción, una para suscriptores MSDN y otra para el público general. Las dos modalidades constan de una serie de recursos limitados, y en caso de superar los consumos establecidos deberemos abonar los costes adicionales. Todas las labores administrativas relacionadas con Azure se gestionan desde el portal Microsoft Online Services, al que accederemos para pedir nuestra cuenta.
Si es la primera vez que accedemos al portal de servicios en línea de Microsoft, se nos requerirá una serie de datos de contacto; una vez rellenados los formularios, dependiendo del tipo de promoción iremos por un camino u otro. En el caso de la promoción pública, nos dirigimos a la pestaña "Servicios", seleccionamos "Plataforma Windows Azure" y en "Ofertas especiales" elegimos "Comprar ahora" (figura 3); mientras que los suscriptores MSDN se encontrarán ya en el carro de la compra y tendrán que pulsar "Pagar" para continuar. En ambos casos, entre los datos que nos piden está el número de tarjeta de crédito que es obligatorio facilitar, dado que si excedemos los recursos asignados se nos podrá cobrar.
Cuando hayamos facilitado todos los
datos que se nos requieren, Microsoft
nos enviará un par de correos avisándonos
de la activación del servicio y dándonos
instrucciones para el acceso al portal
de desarrollo de Azure.
Dos detalles importantes a tener en
cuenta: primero, si no queremos descuidarnos
y exceder los límites gratuitos
de las promociones, podemos consultar
la cantidad de recursos consumidos
hasta un momento determinado (la
información no es instantánea, tarda
unas horas en actualizarse) desde el
apartado "Acciones", pulsando el enlace
"Ver mis facturas". Y segundo, el
hecho de que por defecto nuestra suscripción a la plataforma Azure está activada
para renovarse automáticamente
cuando finalice el plazo de prueba. Si no
queremos pasar a un servicio de pago
sin nuestra intervención, podemos cancelar
la renovación automática en la pestaña
de suscripciones mediante la acción
"Cancelar suscripción de renovación
automática".
Toni Recio y Gerard López
Project Manager y Analista Programador, ambos en Pasiona Consulting