Windows Azure. La nube, versión Microsoft · remos contar con IIS 7.0 y SQL Server instalados en...

9
Azure, ampliando posibilidades asta ahora, cuando desarrollábamos aplicaciones a desplegar en servidores Windows teníamos dos opciones: usar infraestructura pro- pia (tanto equipos como canales de comunicación) o contratarlos mediante un servicio de hosting. Azu- re nos abre una tercera vía, ampliándonos las posi- bilidades a la hora de distribuir nuestros desarro- llos y situándonos en un escenario donde: Podemos dimensionar el hardware que aloja nuestros desarrollos sin intermediarios admi- nistrativos, siendo posible, por ejemplo, con- figurar la potencia de los servidores o el núme- ro de los mismos en cualquier momento; se nos permite, incluso, optar a programar la cantidad de recursos por fecha y hora según las previsiones de tráfico a las que queramos dar respuesta. Pagamos solo por lo que consumimos, con aplicación de tarifas competitivas. Disponemos de la fiabilidad y potencia de los Data Centers de Microsoft, a la vez que pode- mos decidir entre los diferentes centros para, por ejemplo, optimizar las comunicaciones dependiendo de la ubicación geográfica de los usuarios de nuestros servicios, o por cuestiones legales asociadas a dicha zona. La gestión del balanceo de carga entre servi- dores nos es totalmente transparente. Nos olvidamos del mantenimiento de los equi- pos, la redundancia de datos o la actualiza- ción del software de los servidores. Los costes de licencia se reducen considera- blemente y se simplifican los modelos de licen- ciamiento. En resumen, disponemos de la potencia nece- saria, sea cual sea el escenario, tanto de proceso como a nivel de ancho de banda, a la vez que ges- tionamos todo ello con nuestras propias manos. Si eso no fuera suficiente, la plataforma implementa una serie de servicios (muchos de los cuales iremos descubriendo en éstas páginas) de los que nuestros desarrollos podrán aprovecharse. Azure, por tanto, no es solo una plataforma donde ejecutar nuestro código, sino que también nos provee a los desarro- lladores de un elenco de herramientas en formato SaaS (Software As A Service) y DaaS (Data As A Ser- vice) a explotar desde nuestras soluciones. Una vez ubicados en las posibilidades de la pla- taforma, veamos cómo podemos realizar nuestra primera toma de contacto con el nuevo Windows en la nube. Preparando el entorno Al contrario de lo que muchos piensan y aunque parezca paradójico, podemos empezar a jugar con Azure sin estar tan siquiera conectados a Internet. Project Manager y Analista Progra- mador, ambos en Pasiona Consulting Toni Recio y Gerard López El pasado 4 de enero, Microsoft oficializó el lanzamiento de Windows Azure, su apuesta en el terreno de la computación en la nube (Cloud Computing), ampliando así la oferta existente en el mercado, por parte principalmente de Amazon y Google. En este artículo intentamos desgranar la propuesta de la com- pañía de Redmond, apuntando los conceptos más importantes desde un punto de vista práctico y con ojos de desarrollador. Windows Azure La nube, versión Microsoft H

Transcript of Windows Azure. La nube, versión Microsoft · remos contar con IIS 7.0 y SQL Server instalados en...

Azure, ampliando posibilidades

asta ahora, cuando desarrollábamosaplicaciones a desplegar en servidores Windowsteníamos dos opciones: usar infraestructura pro-pia (tanto equipos como canales de comunicación)o contratarlos mediante un servicio de hosting. Azu-re nos abre una tercera vía, ampliándonos las posi-bilidades a la hora de distribuir nuestros desarro-llos y situándonos en un escenario donde:

• Podemos dimensionar el hardware que alojanuestros desarrollos sin intermediarios admi-nistrativos, siendo posible, por ejemplo, con-figurar la potencia de los servidores o el núme-ro de los mismos en cualquier momento; senos permite, incluso, optar a programar lacantidad de recursos por fecha y hora segúnlas previsiones de tráfico a las que queramosdar respuesta.

• Pagamos solo por lo que consumimos, conaplicación de tarifas competitivas.

• Disponemos de la fiabilidad y potencia de losData Centers de Microsoft, a la vez que pode-mos decidir entre los diferentes centros para,por ejemplo, optimizar las comunicacionesdependiendo de la ubicación geográfica de losusuarios de nuestros servicios, o por cuestioneslegales asociadas a dicha zona.

• La gestión del balanceo de carga entre servi-dores nos es totalmente transparente.

• Nos olvidamos del mantenimiento de los equi-pos, la redundancia de datos o la actualiza-ción del software de los servidores.

• Los costes de licencia se reducen considera-blemente y se simplifican los modelos de licen-ciamiento.

En resumen, disponemos de la potencia nece-saria, sea cual sea el escenario, tanto de procesocomo a nivel de ancho de banda, a la vez que ges-tionamos todo ello con nuestras propias manos. Sieso no fuera suficiente, la plataforma implementauna serie de servicios (muchos de los cuales iremosdescubriendo en éstas páginas) de los que nuestrosdesarrollos podrán aprovecharse. Azure, por tanto,no es solo una plataforma donde ejecutar nuestrocódigo, sino que también nos provee a los desarro-lladores de un elenco de herramientas en formatoSaaS (Software As A Service) y DaaS (Data As A Ser-vice) a explotar desde nuestras soluciones.

Una vez ubicados en las posibilidades de la pla-taforma, veamos cómo podemos realizar nuestraprimera toma de contacto con el nuevo Windowsen la nube.

Preparando el entornoAl contrario de lo que muchos piensan y aunqueparezca paradójico, podemos empezar a jugar conAzure sin estar tan siquiera conectados a Internet.

Project Manager y Analista Progra-mador, ambos en Pasiona Consulting

Toni Recio y Gerard López

El pasado 4 de enero, Microsoft oficializó el lanzamiento de Windows Azure, su apuesta en el terrenode la computación en la nube (Cloud Computing), ampliando así la oferta existente en el mercado, porparte principalmente de Amazon y Google. En este artículo intentamos desgranar la propuesta de la com-pañía de Redmond, apuntando los conceptos más importantes desde un punto de vista práctico y conojos de desarrollador.

Windows AzureLa nube, versión Microsoft

H

dotN

etManía

19

Para ello tan solo necesitaremos a nuestro querido VisualStudio, en sus versiones 2008 con SP1 ó 2010, sobre el queinstalaremos un conjunto de herramientas de WindowsAzure que, aparte de la integración con el entorno de desa-rrollo, incluye también su SDK. La forma más sencilla deinstalar dichas herramientas es mediante el Web PlatformInstaller (http://www.microsoft.com/web/downloads/platform.aspx); dentro del apartado "Herramientas deldesarrollador", pulsamos en la acción "Personalizar" de laopción "Visual Studio Tools", para por último seleccionar"Windows Azure Tools para Microsoft Visual Studio" ypulsar el botón "Instalar". Es importante destacar que debe-remos contar con IIS 7.0 y SQL Server instalados en nues-tro equipo local.

Creando nuestro primer "Hola nube"Vamos a tratar de hacer un ejemplo mínimo, para cen-trarnos en Azure como plataforma y que por otro ladonos permita ver "nubes" de inmediato. Es por ello quenuestro ejemplo será una simple página Web quemuestre la última fotografía del satélite meteorológi-co Meteosat. En ella podremos introducir observa-ciones sobre la imagen y guardar los datos medianteun botón de comando, pero de momento nos confor-maremos con mostrar la fotografía, dejando para másadelante la implementación de la manipulación y alma-cenamiento de datos.

Para empezar, arrancamos Visual Studio con privi-legios de administrador, dado que el entorno de simu-lación local de la plataforma requerirá de ciertos per-misos sobre nuestra máquina. Creamos un proyecto dela nueva categoría "Cloud", seleccionando como plan-tilla "Windows Azure Cloud Service", y asignamos los

nombres WeatherService y CloudMania al proyecto y lasolución, respectivamente.

Una vez que aceptamos el diálogo, se nos consul-tará qué roles debe implementar el servicio que quere-mos desarrollar. Podemos ver los roles como las máqui-nas virtuales que vamos a utilizar para desplegar nues-tra aplicación en la nube. Cada rol nos presenta una con-figuración distinta de máquina orientada a unas tareasconcretas. Los roles que se nos proponen son lossiguientes:

• ASP.NET Web Role, destinado a aplicacionesASP.NET tradicionales que también podremos uti-lizar, por ejemplo, para alojar aplicaciones Silver-light. Destacar que cuando hagamos uso de esterol para agregar una aplicación que ya teníamosdesarrollada previamente, ésta no podrá ser deltipo "Web Site", ya que por ahora dichas plantillasno están soportadas, por lo que tendremos quemigrar nuestro sitio Web a un proyecto de tipo"Web Application" para poder incluirlo en el CloudService.

• ASP.NET MVC 2 Web Role, orientado a desarro-llos de aplicaciones con el nuevo framework MVC.

• WCF Service Web Role, para programar serviciosbasados en WCF.

• Worker Role, enfocado al desarrollo de serviciossin interfaz de usuario.

• CGI Web Role, para el despliegue de aplicacionesbasadas en el protocolo FastCGI, como puedenser gestores de contenido desarrollados en PHP.

En la actualidad, Azure también da soporte adesarrollos realizados con Ruby, Python o Java,pero éstos requieren de la instalación de softwa-re adicional en nuestra máquina de desarrollo.

Dada la naturaleza de nuestro ejercicio, tan solo nece-sitamos un rol Web ASP.NET. Al indicarlo, se nos gene-rará la estructura de nuestra solución (figura 1), dondenos encontraremos con un nuevo proyecto: al proyectoWeatherService, que contiene la configuración y meta-datos del nuevo servicio, se añadirá otro llamado WebRo‐le1, que contiene una implementación prácticamenteigual a lo que sería un proyecto ASP.NET tradicional.

Centrémonos de momento en Default.aspx paramostrar la última imagen del Meteosat (listado 1); bas-tará con insertar una etiqueta (tag) de imagen en la pági-na y ubicar un par de controles con el espacio para loscomentarios y el botón de guardar.

Ahora ya estamos en disposición de arrancar nuestrasolución; no almacena datos, pero ya mostrará la últimafotografía del satélite. Al ejecutar, advertiremos que nosaparece un nuevo icono de notificación, ubicado en la esqui-Figura 1. Estructura de la solución

dotN

etManía

20

na inferior derecha de la pantalla, que mues-tra el estado de los servicios asociados anuestro entorno de desarrollo. En estosmomentos se están levantando los entor-nos de desarrollo locales de los dos servi-cios clave de la plataforma Azure: Deve-lopment Fabric y Development Storage.

Development Fabric es el servicio quenos simula el Fabric Controller de Azure,un servicio vital del sistema, dado que esel encargado de monitorizar, mantener yprovisionar el entorno donde se ejecutennuestras aplicaciones en la nube.

Por otro lado, con Development Sto-rage dispondremos en local de todas lasherramientas disponibles en Azure paraque nuestros desarrollos puedan alma-cenar datos no relacionales accesibles víaREST. El servicio contempla tres mode-los de almacenamiento:• Tablas. Se trata de un modelo prácti-

camente idéntico al de una tabla de unabase de datos convencional, pero sinla capacidad de relacionarse con otrastablas: información estructurada, perono relacionada.

• Blobs: Estructura orientada a almace-nar archivos binarios de gran tamaño(hasta un total de 200 Gb. En nuestroentorno local, el tamaño máximo sereduce a 2 Gb).

• Colas: Funcionalidad orientada acomunicar diferentes procesos me -diante mensajes de menos de 8 Kb.No se trata tanto de almacenar infor-mación, sino de ponerla a disposiciónde varios servicios, tanto en la nubecomo fuera de ella.

Para implementar los tres modelos,y aunque parezca paradójico, la plata-forma local se sustenta sobre SQL Ser-ver. De hecho, lo primero que veremosantes de que se nos muestre nuestraaplicación es la ventana de inicializa-ción del Storage, la cual, una vez acep-tada, dará paso al navegador con nues-tra aplicación.

Ahora que ya tenemos desarrolladala primera parte de nuestra "nubelocal", tendremos la posibilidad de inte-ractuar con los servicios de Fabric y Sto-

rage mediante los administradoresaccesibles en el menú contextual delicono de notificación. También podre-mos configurar nuestro servicio edi-tando en el proyecto WeatherServicelos archivos ServiceConfiguration.cscfg y ServiceDefinition.csdef o,sin necesidad de tocar XML, configu-rar directamente vía WebRole1 (ver figu-ra 2). Es de destacar con qué facilidadpodremos definir el número de máqui-nas virtuales que soportarán nuestraaplicación, la potencia de las mismas(tabla 1) o la sencilla configuración delos endpoints.

Para probar, ¿primero hay quepasar la tarjeta?¿Y cómo podemos hacer pruebas reales enla nube? Microsoft ofrece dos modalidadesgratuitas en promoción, una para suscrip-tores MSDN y otra para el público general.Las dos modalidades constan de una seriede recursos limitados, y en caso de supe-rar los consumos establecidos deberemosabonar los costes adicionales.

Todas las labores administrativas rela-cionadas con Azure se gestionan desde

<%@ 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>

Listado 1. Mostrar última imagen del Meteosat (Default.aspx)

Figura 2. Configurando el rol Web

Tamaño de CPU Memoria Almacenamiento Rendimiento E/Sinstancia

Small 1.6 GHz 1.75 GB 225 GB Moderado

Medium 2 x 1.6 GHz 3.5 GB 490 GB Elevado

Large 4 x 1.6 GHz 7 GB 1,000 GB Elevado

Extra large 8 x 1.6 GHz 14 GB 2,040 GB Elevado

Tabla 1. Características de las máquinas virtuales.

...just

www.pasiona.com

just...

www.pasiona.comwww

dotN

etManía

22

el portal Microsoft Online Services(https://mocp.microsoftonline.com),al que accederemos para pedir nuestracuenta.

Si deseamos usar la oferta para sus-criptores MSDN, deberemos acce-der primero desde el enlace queaparece en el menú de suscripcióndel propio portal de MSDN(http://msdn.microsoft.com/es-es/default.aspx). En la zona "Sus-cripciones" accederemos a la opción"Plataforma Windows Azure" parapoder disfrutar de la oferta conmayores recursos disponibles ydurante un período de tiempo másextenso.

Si es la primera vez que accedemosal portal de servicios en línea de Micro-soft, se nos requerirá una serie de datosde contacto; una vez rellenados los for-mularios, dependiendo del tipo de pro-moción iremos por un camino u otro. Enel caso de la promoción pública, nos diri-gimos a la pestaña "Servicios", seleccio-namos "Plataforma Windows Azure" y en"Ofertas especiales" elegimos "Comprarahora" (figura 3); mientras que los sus-criptores MSDN se encontrarán ya en elcarro de la compra y tendrán que pulsar"Pagar" para continuar. En ambos casos,entre los datos que nos piden está elnúmero de tarjeta de crédito que es obli-gatorio facilitar, dado que si excedemoslos recursos asignados se nos podrácobrar.

Cuando hayamos facilitado todos losdatos que se nos requieren, Microsoftnos enviará un par de correos avisándo-nos de la activación del servicio y dán-donos instrucciones para el acceso al por-tal de desarrollo de Azure.

Dos detalles importantes a tener encuenta: primero, si no queremos des-cuidarnos y exceder los límites gratuitosde las promociones, podemos consul-tar la cantidad de recursos consumidoshasta un momento determinado (lainformación no es instantánea, tardaunas horas en actualizarse) desde elapartado "Acciones", pulsando el enla-ce "Ver mis facturas". Y segundo, elhecho de que por defecto nuestra sus-

cripción a la plataforma Azure está acti-vada para renovarse automáticamentecuando finalice el plazo de prueba. Si noqueremos pasar a un servicio de pagosin nuestra intervención, podemos can-celar la renovación automática en la pes-taña de suscripciones mediante la acción"Cancelar suscripción de renovaciónautomática".

El sistema implementa una seriede avisos, vía correo electrónico,que nos advierten cuando esta-mos a punto de sobrepasar loslímites establecidos en las cuen-tas de evaluación.

Subiendo nuestra aplicación a una nube real

Una vez que hemos realizado nuestraspruebas en entorno local (podríamosdecir que nuestra aplicación está en laniebla ;-) y hemos obtenido una cuentacon acceso a Azure, estamos en condi-ciones de publicar nuestro "Hola nube"en los Data Centers de Microsoft.

Para publicar nuestro proyecto Weat‐herService, volveremos a Visual Studio yutilizaremos la opción "Publish" del menú"Build", lo que nos abrirá una carpeta localdonde están ubicados nuestros dos úni-cos ficheros necesarios para hacer la publi-cación, y también nos lanzará nuestronavegador predeterminado mostrando elportal de desarrollo de Azure(https://windows.azure.com). Si es la pri-

mera vez que accedemos al portal, ten-dremos que crear un servicio mediante elenlace "New Service" y seleccionar entrecrear una cuenta Storage o un Hosted Ser-vice. Para el ejemplo que nos ocupa, ele-giremos el servicio, introduciremos unnombre y descripción para el mismo, ydespués tendremos que elegir una URLpara nuestra aplicación, que será un sub-dominio de cloudapp.net. Observe quetenemos un botón para comprobar que ladirección está disponible. Hemos de teneren cuenta que ni el nombre ni la URLpodrán ser modificados posteriormente.

Otro aspecto importante a decidirserá en qué zona geográfica queremosque sea alojada nuestra aplicación. Aquítambién podemos seleccionar un grupode afinidad, porque si vamos a subir

varias aplicaciones a la nube que inte-ractúan entre ellas, esto nos asegura quese mantengan en una misma regióngeográfica. Si cuando creamos un servi-cio no especificamos un grupo de afini-dad, después no podremos agregárselo,con lo que tendríamos que eliminar elservicio y volver a crearlo.

Una vez que tenemos el servicio cre-ado, nos aparece un panel de gestión(figura 4). En dicho panel podemos con-trolar el despliegue en producción y en elentorno de staging (entorno de pruebas).Si pulsamos en la flecha de la derechaveremos los dos entornos; esto nos sir-ve para poder mantener una versiónpublicada en la nube pero en un entornode pruebas al que podremos acceder conuna URL diferente (podemos restringir elacceso), y cuando hayamos probadonuestra versión, pasarla a producción con

Figura 3. Comprando en Microsoft Online Services

dotN

etManía

23

un simple clic (figura 5). Este paso entre entornos nosdesplegará la versión de staging en producción, y a suvez hará una copia de la versión de producción en sta-ging para mantenerla de backup.

Para realizar la publicación, deberemos pulsar el botón"Deploy" (en nuestro ejemplo, lo haremos sobre el entor-no de producción) e indicar la ubicación de los ficherosque nos habia generado Visual Studio al publicar: el Appli-cation Package (fichero .cspkg) y el Configuration Set-tings (fichero .cscfg). Entonces pulsaremos de nuevoel botón "Deploy" y esperaremos unos minutos hastaque la aplicación se haya desplegado por completo.

Una vez desplegada, el cubo que representa nues-tra aplicación se nos mostrará en azul, y veremos quese nos habilitan algunas nuevas opciones (figura 6).Desde la opción "Configure", podremos modificar elfichero .cscfg, donde por ejemplo podríamos estable-cer nuevamente el número de instancias levantadaspara balancear la carga de nuestra aplicación.

Ahora ya solo nos faltaría arrancar la aplicaciónutilizando el botón "Run"; paciencia de nuevo, estopuede tardar unos minutos. Cuando el proceso hayafinalizado, veremos que el estado de nuestra aplica-ción es Ready; a partir de este momento ¡estamos enla nube!, y podemos visitar nuestra aplicación desdela URL asociada.

Debemos tener claro que siempre que tengamosuna aplicación desplegada, ésta estará consumiendorecursos de proceso, incluso aunque estuviera en esta-do Stopped. Si queremos dejar de consumir recursospara no sobrepasar las horas establecidas en las cuen-tas gratuitas, debemos eliminar el despliegue (¡el cubodebe quedar gris!).

Todo el proceso de publicación puede realizarse de unamanera automatizada mediante Windows Azure ServiceManagement API (http://msdn.microsoft.com/en‐us/library/ee460799.aspx). Los detalles de esta APIbasada en REST se escapan del alcance de este artículo;puede ver un escenario completo y funcional de su utili-zación en uno de los ejemplos publicados por Microsoft,CSManage (http://code.msdn.microsoft.com/Rele‐

Figura 4. Selección del entorno de despliegue

Figura 6. Servicio desplegado en producción

Figura 5. Paso entre entornos

dotN

etManía

24

ase/ProjectReleases.aspx?ProjectNa‐me=windowsazuresamples&Relea‐seId=3233).

Trabajando con el StorageAhora que ya sabemos lo necesario parajugar un poco con Azure, vamos a inte-ractuar con el servicio Storage, a modode simple pincelada introductoria, paraque nuestro pequeño ejemplo trabajecon datos.

Al trabajar con .NET, podemos uti-lizar la librería Microsoft.Win-dowsAzure.StorageClient, quenos encapsulará las llamadas víaREST para que nos resulte máscómodo trabajar con Storage.

Para almacenar los datos en una tabla,lo primero que vamos a necesitar es cre-ar una estructura que represente los meta-datos de la imagen que deseamos alma-cenar. Lo haremos mediante una nuevaclase que implemente una entidad here-dando de TableServiceEntity, clase que

ubicaremos en un nuevo fichero imgMe‐taData.cs dentro del proyecto de rol Web(listado 2). En el constructor de nuestranueva entidad se inicializan las propie-dades heredadas PartitionKey y RowKey,que implementan claves de agrupacióne identificación de datos en la nube.

Ahora que ya tenemos nuestra enti-dad, deberemos generar el código míni-mo necesario para interactuar con colec-ciones de dichas entidades. Para ello, tam-bién en el rol Web, creamos otra nuevaclase en el fichero imgMetaDataService‐Context.cs, esta vez heredando deTableServiceContext (listado 3). Ennuestro ejemplo nos centraremos en dosmétodos: uno para recuperar entidadesde metadatos y otro para agregarlas.

Vamos ahora a crear la cadena deconexión, que de momento apuntará anuestro entorno local: dentro de la car-peta Roles del proyecto WeatherServi‐ce, accedemos a las propiedades delWebRole1 (tal y como veíamos en la figu-ra 2), y en el apartado "Settings" añadi-mos el elemento DataConnectionStringcon valor UseDevelopmentStorage=true.

A continuación, nos centraremosen el evento OnStart del rol Web. En élmapeamos la configuración del servi-cio y nos conectamos al Storage, paraasí poder crear el contenedor BLOB deimágenes y la tabla que contendrá losmetadatos. Todo ello puede verse en ellistado 4.

Por último, nos queda implementarel evento Click del botón btnGuardar,cuyo cuerpo se muestra en el listado 5.

Con estos sencillos pasos, nuestraaplicación ya almacena datos en el Sto-rage; pero deberemos tener en cuenta quelos datos se almacenan en local. Para inte-

using System;using Microsoft.WindowsAzure.StorageClient;

namespace WebRole1 {public class imgMetaData : TableServiceEntity{

public imgMetaData() {

PartitionKey = "meteosat";RowKey = Guid.NewGuid().ToString();

}

public string Observacion { get; set; }public DateTime Fecha { get; set; }public string ContainerRef { get; set; }public string BlobRef { get; set; }

}}

using System;using System.Linq;using Microsoft.WindowsAzure;using Microsoft.WindowsAzure.StorageClient;

namespace WebRole1 {

public class imgMetaDataServiceContext : TableServiceContext{

public imgMetaDataServiceContext(string baseAdress, StorageCredentials credentials) : base(baseAdress, credentials)

{}

public IQueryable<imgMetaData> imgMetaData {

get { return this.CreateQuery<imgMetaData>("imgMetaData"); }}

public void AddImage(string observacion, DateTime fecha, string containerRef, string blobRef)

{AddObject("imgMetaData", new imgMetaData {

Observacion = observacion, Fecha = fecha, ContainerRef = containerRef, BlobRef = blobRef });

SaveChanges();}

}}

Listado 2. Entidad de metadatos(imgMetaData.cs)

Listado 3. Servicio de contexto (imgMetaDataServiceContext.cs)

Es necesario agregar una referen-cia a la librería System.Data.Ser-vices.Client para poder compilarel código.

dotN

etManía

25

ractuar con la nube, tenemos que cam-biar nuestra cadena de conexión con losdatos, que obtendremos como resultadode crear un servicio de Storage en el por-tal de desarrollo de Azure (del mismomodo que antes hemos creado un Hos-ted Service).

SQL Azure, almacenamiento rela-cional por fin en la nubeUno de los factores diferenciales de laplataforma Azure con respecto a otrasalternativas de computación en la nubees la posibilidad de trabajar con almace-namiento relacional. Microsoft, reco-giendo el feedback de la comunidad, deci-dió apostar por un SQL Server en la nubeque nos permita trasladar nuestros desa-rrollos ya realizados a Azure con un sim-ple cambio en la cadena de conexión.Pese a que SQL Azure cuenta con algu-nas limitaciones (ver tabla 2) con respectoa su versión tradicional, puede satisfacerplenamente las necesidades de la mayoríade los proyectos.

La curva de aprendizaje de SQL Azu-re es mínima, y podemos utilizar SQLServer Management Studio (SSMS) parasu administración, mientras que nues-tros desarrollos accederán a los datosmediante el mismo código ADO.NET.Para obtener los datos del servidor ypoder realizar las conexiones pertinentes,debemos recurrir al portal de gestión deSQL Azure (https://sql.azure.com) ypulsar en el apartado "DataBase". Pesea todo, no nos resultará inmediato conec-tarnos mediante SSMS, que nos mostraráun mensaje de error al tratar de conectarcon el servidor. El problema no es otroque el hecho de que SQL Azure tienecerradas por defecto todas las puertas deacceso. Para solventar esta situación, vol-vemos al apartado "Database" del portaly en él seleccionamos la pestaña "Fire-wall Settings"; añadimos una nueva reglaen el cortafuegos indicando nuestra direc-ción IP y esperamos unos minutos a quela regla se replique.

Una vez solventado el escollo de laseguridad, nos encontraremos con otroerror derivado del hecho de que SSMSespera conectarse a un servidor de SQL

// Creamos la conexión con el servicio de StorageCloudStorageAccount.SetConfigurationSettingPublisher(

(configName, configSetter) => {configSetter(ConfigurationManager.ConnectionStrings[configName].ConnectionString);

});var storageAccount =

CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

// Creamos el contenedor BLOB para almacenar las imágenesCloudBlobClient blobStorage = storageAccount.CreateCloudBlobClient();CloudBlobContainer container = blobStorage.GetContainerReference("meteosat");container.CreateIfNotExist();

// Configuramos el contenedor con acceso públicovar permissions = container.GetPermissions();permissions.PublicAccess = BlobContainerPublicAccessType.Container;container.SetPermissions(permissions);

// Creamos la tabla para almacenar los metadatosCloudTableClient.CreateTablesFromModel(typeof(imgMetaDataServiceContext),

storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials);

Listado 4. Evento OnStart en WebRole.cs

// Inicializamos la cuenta de Storagevar storageAccount =

CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

// El nombre del contenedor no puede tener mayúsculasstring containerName = "meteosat";

// Almacenamos la imagenCloudBlobClient blobStorage = storageAccount.CreateCloudBlobClient();CloudBlobContainer container = blobStorage.GetContainerReference(containerName);string uniqueBlobName = string.Format("Imagenes/{0}", Guid.NewGuid().ToString());CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);

WebRequest req = WebRequest.Create(Imagen.Src);WebResponse response = req.GetResponse();Stream stream = response.GetResponseStream();

blob.UploadFromStream(stream);

// Almacenamos los metadatos en la tablavar operations =

new imgMetaDataServiceContext(storageAccount.TableEndpoint.ToString(),storageAccount.Credentials);

operations.AddImage(txtObservaciones.Text, DateTime.Now,containerName,uniqueBlobName);

Listado 5. BtnGuardar_Click en Default.aspx.cs

dotN

etManía

26

Server tradicional, no compatible al 100%con SQL Azure, lo que puede provocaralgunas incompatibilidades con herra-mientas de administración como el pro-pio SSMS. Para sortear este último esco-llo, cancelamos la ventana de conexión ypulsamos el botón "Nueva consulta". Denuevo se visualizará la ventana de cone-xión, en la que pulsamos el botón "Opcio-nes" e indicamos, en la pestaña "Pro-piedades de Conexión", el nombre de labase de datos con la que deseemos tra-bajar. En nuestro caso, al no haber crea-do ninguna, indicaremos la base de datosmaster. Pese a no disponer de toda lapotencia de gestión de SSMS, podremosahora ejecutar sentencias de Transact-SQL contra nuestra base de datos en lanube. Es importante destacar que estosprimeros problemas de compatibilidadya se encuentran solventados en el recien-temente publicado SQL Server 2008 R2.

Será de vital importancia optimi-zar las consultas y los accesos a labase de datos, ya que es importanterecordar que en el entorno de lanube pagamos por su uso; ¡losSELECT * siempre son más caros!

Por último, es importante destacarque existen dos versiones de SQL Azure:

la Web Edition, de 1 Gb de capacidad, yla Business Edition, de 10 Gb. Si necesi-tamos superar los 10 Gb de informaciónrelacional, deberemos hacer uso de másde un servidor de bases de datos. Pese atodo, en el pasado MIX de Las Vegas seanunció, con disponibilidad inmediata,una nueva edición de 50 Gb.

Un amplio horizonte de posibilidadesEn la actualidad, Azure ya ofrece algunosotros interesantes servicios en producción,además de los que hemos mencionado has-ta ahora, así como otros servicios demomento disponibles en evaluación:

• AppFabric (no confundir con el FabricController). Se trata de un conjunto depotentes servicios orientados a lascomunicaciones, como el Service Bus,que mediante una implementación delpatrón Enterprise Service Bus nos per-mite registrar y exponer servicios entrediferentes redes a través de dispositi-vos de control de accesos como fire-walls o NAT, o el Access Control, conel que podremos exponer dichos ser-vicios de forma segura.

• Windows Azure Drive. Es un servicioque nos da acceso a una API NTFS,mediante la cual podemos hacer usode un espacio de disco permanente,

implementado con Windows AzurePage Blob. No está pensado para quelo utilicemos como almacenamientode datos, pues para eso ya tenemos lasherramientas de Storage y SQL Azure,sino que está orientado a facilitarnosla migración de desarrollos existentesque hacen uso de recursos locales (porejemplo, archivos locales de configu-ración). Cuenta con un límite de 1 TBde información por page blob. Actual-mente se encuentra en fase beta.

• Codename Dallas. Es un servicio dedatos (DaaS) que nace con la idea deenglobar fuentes de datos para quepuedan ser consumidas por progra-madores e information workers. Noso-tros también dispondremos de la posi-bilidad de proveer nuestra informacióncreando servicios propios, que podre-mos publicar para que sean consumi-dos por terceros. Este producto seencuentra en CTP, pero para que noshagamos una idea y clarificar el con-cepto, entre los servicios actuales seencuentran NASA Mars Orbital Imagesy UNESCO UIS Data.

Un buen modo de estar al día conrelación a la aparación de nuevos ser-vicios y utilidades alrededor de Azurees el portal PinPoint de Microsoft(http://pinpoint.microsoft.com) o elcentro de desarrollo para Azure en MSDN(http://msdn.microsoft.com/es‐ES/win‐dowsazure).

ConclusionesLa conclusión más importante que pode-mos extraer acerca del tema de este artí-culo es el empeño que ha puesto Microsoften no hacer traumático el camino de nues-tras aplicaciones hacia la nube, que enmuchos casos puede producirse con unsimple cambio en la cadena de conexión.Por añadidura, nos ofrece una plataformade despliegue profesional asequible tantopara nuestro día a día como para los servi-cios destinados a ser los nuevos casos deéxito de la red; todo ello de una forma sen-cilla, y aislándonos de la problemática degestión de servidores y comunicaciones.

¿Y tú? ¿Cuánto vas a tardar en subir-te a la nube? t

Soportado No soportado

Tablas, índices y vistas Consultas y transacciones distribuidas

Procedimientos almacenados Tipos de datos espaciales

Triggers Service Broker

Constraints CLR

Variables de tabla y tablas temporales de sesión Servidor físico o catálogo DDL y vistas

Tabla 2. Principales características de SQL Azure.

Microsoft ha puesto gran empeño en no hacertraumático el camino de nuestras aplicaciones haciala nube, que en muchos casos puede requerir soloun simple cambio en la cadena de conexión