Syntax Highlighter

viernes, 29 de octubre de 2010

Mi gato tiene los ojos color Azure

Como muchos sabrán, ayer comenzó en Redmond el PDC10 -Professional Developers Conference 2010- el evento anual de Microsoft dedicado a desvelar a los desarrolladores las próximas novedades que contemplarán sus productos. Está dividido en cuatro áreas con sesiones que transcurren en paralelo: aplicaciones cliente y dispositivos, servicios en la nube, plataforma y herramientas y finalmente uno de Channel 9 (historias de desarrolladores). 

Para el evento me preparé a conciencia: portátil enchufado a la tele del salón, pizza, Coca-Cola y el iPad al lado para ir twiteando y no perderme ningún detalle, sobre todo para ver qué novedades hay para la nube por parte de Microsoft. Viendo la agenda de charlas, me puse cómodo para empezar a disfrutar.

Lo primero con lo que me quedé impresionadísimo fue con la aplicación web con la que iban a retransmitir el evento diseñada específicamente para el mismo sobre tecnología Silverlight, y que permite cambiar rápidamente entre una sala y otra sin perderte detalle, con una suavidad de vídeo de escándalo. Otra de las características a destacar es la posibilidad de oir el audio doblado en tiempo real a otros cuatro idiomas aparte del inglés: chino, francés, japonés y...español!!!! Lástima que el traductor simultáneo de nuestro idioma no estuviera muy fino. Al final me pasé al inglés, aunque se agradece mucho el detalle.

Steve Ballmer abrió la sesión muy orgulloso del récord de ventas de Windows 7 y dejando entrever por lo que está apostando ahora mismo la compañía. La charla de introducción, que duró 140 minutos aproximadamente, se distribuyó de la siguiente manera:


Sin quitarle importancia a las secciones de Internet Explorer 9, Windows Phone 7 y al resto de novedades que no fueron ni siquiera nombradas en la charla de introducción -lo siento Alberto, tendrás que esperar a la charla específica para oir hablar de Office 365 :)- el dato de la distribución temporal de da mucho que pensar. Y es que en este primer día de conferencias han dejado entrever lo que será un gran boom de nuevos servicios y actualizaciones para la plataforma Windows Azure, en lo que denominaron internamente como versión 1.3 de Azure (por lo que enseñaron ya podrían haberla denominado 2.0). La sección de Azure en la introducción tomó más del 62% del tiempo de la misma.

Centrándome en la nube, fue realmente impresionante ver como caso de éxito a alguien de Pixar -sí, la compañía de Steve Jobs, el de Apple!!- hacer una demostración de cómo la plataforma en la nube va a ayudar a alquilar los servicios de rendering de los estudios a cualquier interesado, gracias al servicio RenderMan, que en resumen sirve para generar los fotogramas de una película de animación con la potencia de un megadatacenter. La flexibilidad de la nube se demostró cuando, dependiendo de lo que al diseñador le interesara, podía hacer que el proceso tardara de 1 a 12 horas -para presupuestos de todos los bolsillos-, desplegando dinámicamente más máquinas según requerimientos y todo de una manera transparente.


Más anuncios interesantes fue todo lo que la plataforma va a incorporar en los próximos meses -Team Foundation Server en la nube!!!- y que pongo más abajo. Los datos me han llegado a través de un correo directo del Windows Azure Platform Team.

Esta tarde toca más, así que voy chapando para prepararme de nuevo :)

Happy coding!


Fuente: Windows Azure Platform Team (como no he encontrado esta información en español en la web, pongo el texto íntegro del correo)

Asunto: Presentación de las nuevas funciones de la plataforma Windows Azure


Estimado cliente, 


Nos complace anunciarle las nuevas funciones que la plataforma Windows Azure incorporará antes de finales de este año, que le proporcionarán más control y dotarán de mayor flexibilidad a la plataforma para que sea más sencillo ejecutar en ella las aplicaciones existentes de Windows.


Compatibilidad mejorada para las empresas
Estamos incorporando las siguientes capacidades en Windows Azure para que resulte más sencillo integrar los recursos entre la nube y los sistemas tradicionales de TI, con el fin de ofrecer una mayor compatibilidad para las aplicaciones de Windows existentes.


Estamos incorporando las siguientes capacidades en Windows Azure para que resulte más sencillo integrar los recursos entre la nube y los sistemas tradicionales de TI, con el fin de ofrecer una mayor compatibilidad para las aplicaciones de Windows existentes.


  • Habrá más aplicaciones nuevas y existentes de Windows compatibles gracias al lanzamiento de la versión beta del rol de máquina virtual (VM). Este nuevo rol de proceso le permitirá mover más aplicaciones existentes a la nube, reduciendo así la necesidad de realizar cambios costosos de códigos o implementaciones. Durante el período de vigencia de la versión beta, las instancias de proceso que ejecuten un rol de VM se facturarán de la misma manera que otras instancias de proceso. También se facturará el almacenamiento de su imagen de VHD según nuestras tarifas de almacenamiento normales.
  • La plataforma Windows Azure permitirá desarrollar aplicaciones más completas gracias a la introducción del rol de VM, los privilegios elevados y los roles de web y trabajador ya existentes. Estas características le proporcionarán más flexibilidad y control para desarrollar, implementar y ejecutar sus aplicaciones en la nube.
  • La conectividad entre distintas ubicaciones será posible gracias a la versión preliminar Community Technology Preview (CTP) de Windows Azure Connect, que ofrece una manera sencilla y más segura de crear una conectividad de red entre los servicios de la nube, las aplicaciones y los activos locales de una empresa. No se facturará el uso de Windows Azure Connect durante el período de CTP (sujeto a ciertas restricciones de cuotas).
  • El Escritorio remoto le permitirá conectarse a una instancia de su aplicación o servicio en ejecución, para supervisar la actividad y solucionar los problemas comunes.

Acceso más económico a la plataforma

Con el fin de ofrecer un entorno de desarrollo y formación más rentable, también lanzaremos una versión beta de nuestra nueva instancia de proceso extrapequeña. Puede usar la instancia extrapequeña para realizar prototipos de soluciones en la nube con un coste rebajado más de un 55% respecto a la instancia de proceso de tamaño inmediatamente superior. La nueva instancia de proceso extrapequeña también permite que los desarrolladores empleen la plataforma para experimentar en la nube antes de ejecutar los servicios en Windows Azure a gran escala. Tenga en cuenta que las instancias de proceso extrapequeñas se facturarán por separado de las instancias de proceso de otros tamaños, y no se podrán usar con las horas de instancias de proceso pequeñas incluidas en su oferta. 

También nos complace anunciar que hemos ampliado hasta el 31 de marzo de 2011 nuestra promoción gratuita de transferencias de datos entrantes durante las horas de menor afluencia (sujeta a las restricciones de cuotas indicadas en las ofertas).


Mejor experiencia de uso para desarrolladores y profesionales de TI 


En PDC 10 presentaremos las siguientes mejoras para desarrolladores y operadores:


  • Un portal de Windows Azure completamente rediseñado y basado en Silverlight, para ofrecer una experiencia de uso mejorada y más intuitiva.
  • Acceso a nueva información de diagnóstico, incluyendo la capacidad de hacer clic en un rol para ver el tipo y el tiempo de implementación.
  • Un nuevo proceso de suscripción que reduce drásticamente el número de pasos necesarios para suscribirse a Windows Azure.
  • Nuevos foros de la plataforma Windows Azure basados en escenarios para solucionar las dudas y compartir conocimientos de forma más eficaz.

Para que el proceso de crear aplicaciones en la plataforma Windows Azure sea más rápido y sencillo, hemos creado Windows Azure Marketplace. Windows Azure Marketplace es un mercado en línea para desarrolladores y profesionales de TI que permite compartir, encontrar, comprar y vender tanto los bloques de creación como la formación, los servicios, los flujos de datos y los servicios o aplicaciones finales que se necesiten para crear aplicaciones completas y eficaces en la plataforma Windows Azure. La sección DataMarket de Marketplace se lanzará en PDC 10, mientas que la sección de aplicaciones se presentará en versión beta a finales de este año.

Tenga en cuenta que no se proporcionan contratos de nivel de servicio para servicios que están en versión beta o en CTP.  Para obtener información detallada acerca de los precios y las actualizaciones de las ofertas relacionadas con estas nuevas características, consulte nuestro organigrama de comparación de ofertas. Para más información acerca de estas nuevas características, visite WindowsAzure.com


Gracias por confiar en nosotros y por su interés continuado en la plataforma Windows Azure.


Equipo de la plataforma Windows Azure

miércoles, 27 de octubre de 2010

Cambiando índices clustered en SQL Azure

Hoy me he encontrado con un problemilla “gracioso” por el tema de las restricciones de SQL Azure. La restricción en cuestión es que todas las tablas en SQL Azure tienen que tener un índice CLUSTERED para poder operar con ellas (operaciones de INSERT, UPDATE, DELETE). Una vez creado un índice de este tipo, no se pueden eliminar.

El ejemplo siguiente ilustra la restricción. Está claro que el comando de eliminación es inútil justo después de crear la tabla, pero en cualquier otra versión de SQL el comando se ejecuta sin errores:

CREATE TABLE dbo.Articulos
(
       ArticuloID [int] IDENTITY(1,1) NOT NULL,
       NombreArticulo nvarchar(50)
)
DELETE FROM Articulos WHERE ArticuloID=1

Msg 40054, Level 16, State 1, Line 1
Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.

Esta y otras restricciones está en la lista de especificaciones y restricciones de SQL Azure, y es debido a que no se soportan tablas Heap, –tablas que por definición no tienen ningún índice clustered- y realmente no es un problema. Crearemos entonces un índice, por ejemplo, por ArticuloID.


CREATE UNIQUE CLUSTERED INDEX PK_Articulos ON dbo.Articulos (ArticuloID)

DELETE FROM Articulos WHERE ArticuloID=1
(0 row(s) affected)


Como podemos observar, el comando de eliminación, que sigue siendo más inútil que un paraguas en un submarino, ya no da errores.

Ahora imaginemos que agregamos a la tabla un nuevo campo en el que vamos a almacenar un nuevo código de artículo (no me preguntéis el fin del mismo, pueden haber muchas razones para ello y esto es sólo un ejemplo). Para ello podemos hacerlo ejecutando la siguiente sentencia:

ALTER TABLE dbo.Articulos ADD OtroArticuloID [int] NOT NULL


Ahora agreguemos un registro a la tabla para representar que no está vacía:

INSERT INTO Articulos (NombreArticulo, OtroArticuloID)
       VALUES ('Reloj', 4)


Una vez agregado el campo, en nuestro caso queremos que el índice clustered sea por este nuevo campo OtroArticuloID. Como sabemos, no puede haber más de un índice clustered por tabla, por lo que lo común es hacer un DROP del índice anterior y crear de nuevo el índice por el nuevo código. Sin embargo, al intentar realizar el primero paso nos encontramos con la restricción comentada porque un índice clustered no se puede eliminar (recordemos que esto sólo ocurre en la edición Azure de SQL Server).

DROP INDEX PK_Articulos ON dbo.Articulos

Msg 40054, Level 16, State 2, Line 1
Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.


Se puede comprobar que, aunque ahora vaciemos la tabla primero con un DELETE FROM Articulos el resultado sigue siendo el mismo, que no podemos eliminar el índice.

¿La solución?

Solución no hay. El workaround propuesto desde los foros de MSDN es el siguiente:
  1. Empezar transacción
  2. Crear una nueva tabla con la nueva estructura de índices
  3. Copiar los datos de una tabla a otra
  4. Renombrar las tablas e índices
  5. Finalizar transacción
Aplicado a nuestro caso, quedaría algo así:

-- 1) Comenzar transaccion
BEGIN TRAN

-- 2) Crear la nueva estructura de tabla
CREATE TABLE dbo.ArticulosNew
(
       ArticuloID [int] IDENTITY(1,1) NOT NULL,
       NombreArticulo nvarchar(50),
       OtroArticuloID [int] NOT NULL
       CONSTRAINT [PK_ArticulosNew] PRIMARY KEY CLUSTERED (OtroArticuloID ASC)
)

-- 3) Copiar los datos de la tabla anterior a la nueva
SET IDENTITY_INSERT dbo.ArticulosNew ON
INSERT INTO dbo.ArticulosNew (ArticuloID, NombreArticulo, OtroArticuloID)
       SELECT ArticuloID, NombreArticulo, OtroArticuloID FROM dbo.Articulos
SET IDENTITY_INSERT dbo.ArticulosNew OFF

-- 4) Renombrar las tablas e índices
DROP TABLE dbo.Articulos
EXEC sp_rename 'ArticulosNew', 'Articulos'
EXEC sp_rename 'PK_ArticulosNew', 'PK_Articulos'

-- 5) Finalizar la transaccion
COMMIT TRAN

En el caso de que hubiera relaciones con otras tablas, cosa normal con las claves primarias, el script se complicaría algo más ya que hay que eliminar las relaciones entre el paso 1 y 2, para volver a crearlas entre el paso 4 y 5.
Tarea: comprobar si las herramientas de Red Gate ya soportan SQL Azure y tienen esto implementado. 
Actualización 24/03/2011: ¡Comprobado con la nueva versión 9! ver comentarios abajo
También se me ocurre hacer un procedimiento almacenado que, tirando de sys_objects, ejecute un script de inyección que lo haga en un solo paso. En cuanto lo tenga, actualizo el post.

¿Y si la tabla tiene índice clustered pero al operar con ella da el mismo error?

Al seguir haciendo un traspaso a SQL Azure, me he encontrado con que al hacer un intento de eliminación de una tabla me daba el mismo error aun comprobando más de 10 veces que en efecto el índice clustered estaba creado correctamente.

¿Dónde estaba el problema?

Se me ocurrió que la tabla podría tener relaciones con eliminaciones en cascada, y efectivamente tenía Foreing Keys. Fui mirando una a una hasta que vi que una de las tablas relacionadas tenía clave primaria pero no era clustered. La creé y se solucionó el problema.

Aconsejo utilizar la siguiente consulta -gracias al post de Thomas LaRock- para descubrir si tenemos alguna tabla sin índice clustered, ya que si inicialmente las tablas están vacías no nos vamos a dar cuenta hasta que intentemos operar con ellas.

/* Encontrar tablas sin ndices clustered */
SELECT name
FROM sys.objects
WHERE type = 'U'
  AND object_id NOT IN (SELECT object_id FROM sys.indexes WHERE index_id = 1)

Espero que haya servido de ayuda.

Happy coding!


lunes, 25 de octubre de 2010

Cómo supervisar los logs de IIS en Windows Azure (II)

Ayer expliqué en un post cómo supervisar los logs de IIS de nuestros web roles de Azure a través de la transferencia de archivos a nuestro blob storage.

La idea de partida es buena y la solución válida, aunque después de seguir trasteando hoy con el SDK he visto una nueva utilidad en la Windows Azure Management Console que permite ampliar el acceso en tiempo real a las utilidades de diagnóstico de nuestros roles de una forma mucho más amigable.

Comenzando donde lo dejamos ayer, justo después de hacer el deploy de la aplicación. Es importante aclarar la importancia de la línea DiagnosticMonitor.Start("DiagnosticsConnectionString", config) que agregamos ayer, ya que si no se inicia el monitor de diagnóstico no podremos acceder a los diagnósticos desde la MMC -si encuentro alguna otra forma ya actualizaré el post-.

Ahora accedemos a la consola de mantenimiento de Windows Azure desde nuestro escritorio y podemos ver que al seleccionar el nodo "Diagnostics" de nuestro webrole aparece lo que hemos configurado en código, es decir la configuración en ejecución. En el menú de acciones hay, entre otras utilidades, una de transferir manualmente los logs bajo demanda, muy útil por si queremos forzar en cualquier momento su copia al blob storage ¡Este era el botón al que me refería que estaba en la CTP en el portal de gestión de Azure!


Al pulsar el botón de "Transfer Now (Selected Instances)" se nos abre una ventana para seleccionar qué es lo que queremos transferir y de qué instancias. Seleccionamos lo que nos interese y pulsamos el botón "Start Transfer". Con el botón Get Active Transfers podemos ver el estado de transferencia de los datos de diagnóstico a nuestro blob.


Una vez que la transferencia ha finalizado, volvemos a la consola y seleccionamos en el árbol de la izquierda el nodo "Analysis", que hace aparecer una pantalla de filtros de búsqueda sobre los datos transferidos a nuestro blob. Introducimos los datos solicitados y a través de la ación "Apply Filters" de la derecha podemos ver en el panel de resultados las coincidencias.



Al pulsar sobre el enlace "Show" podemos ver finalmente los mismos ficheros de log de IIS de los que hablábamos ayer.


Tal y como se ve en el panel de diagnósticos, a través de esta herramienta se pueden configurar más opciones de diagnóstico, como poder supervisar el visor de sucesos de la máquina, todo ello modificando incluso la configuración en ejecución. 

¿Qué más posiblidades de diagnóstico tenemos?

Una vez vistas las posibilidades de diagnóstico que nos ofrecen las herramientas actuales (MMC, API de diagnóstico, etc.), se me antoja un poco lento todo este proceso. ¿Lento con respecto a qué?

Ayer tuve una conversación con nuestro amigo Marco que surgió después de la pregunta: ¿cómo detectaría en Azure que alguien está intentando atacar mediante técnicas de hacking un webrole? Para ello muchas veces es necesario acceder a los logs de IIS rápidamente e incluso tener configuradas pre-alertas de ciertos tipos de patrones en los logs. ¿El soporte de Microsoft en Azure contempla este servicio de monitorización? (Tarea: buscar información al respecto)

Marco me mostró la herramienta que está utilizando para monitorizar la plataforma de la que está a cargo en la nube -un mix de on-premises y GoGrid-. La herramienta es Splunk que citando la definición de su web, "Splunk es el software líder en el mundo para monitorizar, analizar y crear informes de datos de IT en vivo así como de terabytes de datos históricos, tanto en modelo on-premises o en la nube".

Lo que me enseñó por Skype era una herramienta muy avanzada, tanto en su interfaz de usuario como en la velocidad de respuesta de las consultas. Las posibilidades de los informes en tiempo real me dejó totalmente fascinado.

Lástima que no estaba accesible para Azure...¿o sí lo está? Parace que eso será tema de otro post... 



Hablando de la banca y la nube

Me acaba de llegar una noticia muy interesante en relación con el post de introducción que hice cuando la semana pasada comencé a desarrollar este blog.

En esa introducción utilicé una metáfora para explicar el concepto de Clouding:
"Si te preguntara cuánto dinero tienes, lo más seguro es que lo primero que se te viene a la cabeza es la cifra de la cuenta del banco, sin darte cuenta que físicamente solo tienes en el bolsillo algunos euros para pasar el día. Esta conexión mental se debe a que -corralitos aparte- se ha llegado al grado de confianza y aceptación de que tu dinero esté en una entidad bancaria, sin realmente importarte dónde ni cómo se almacenan físicamente tus billetes, como si estuvieran en una "nube" a la que sabes que puedes acceder a ella en cualquier momento a través de un cajero, sucursal o tarjeta de crédito.

Pues siguiendo con el símil, el nuevo modelo de computación en la nube propone ver las tecnologías de la información del mismo modo, olvidándote de dónde y cómo se almacenan tus datos, ni qué características hardware o software te hacen falta, dándote la flexibilidad y seguridad para centrarte en lo realmente importante: tu negocio."
Pues la noticia que comentaba habla precisamente de la alianza estratégica que acaban de realizar Misys y Microsoft lanzando su solución BankFusion Universal Banking -solución para el sector de la banca basada en arquitectura SOA- sobre la plataforma Windows Azure, para ofrecer las aplicaciones de Misys para banca a clientes del mundo entero. Hay que tener en cuenta que Misys tiene como clientes al 100% de los 50 bancos más importantes a nivel mundial y a más de 3.500 personas en plantilla.

Si para nosotros el dinero ya estaba almacenado en la nube, y ahora las aplicaciones que controlan el dinero se mueven a la nube, ¿está nuestro dinero en una nube...dentro de una nube? O como diría Enjuto Mojamuto en Sueño o Realidad: "¿Es un sueño...de un sueño...de un sueño?"

Si quieres ver la entrevista completa a Steve Ballmer -CEO de Microsoft- acerca de esta alianza sigue este enlace.

domingo, 24 de octubre de 2010

Cómo supervisar los logs de IIS en Windows Azure (I)

Uno de los trabajos que debemos realizar al subir un proyecto a Azure es prestar bastante atención sobre cómo queremos instrumentar nuestra aplicación para más tarde poder monitorizar nuestra aplicación en la nube. 

En determinadas ocasiones es necesario acceder a los ficheros de log del IIS para, por ejemplo, saber si están entrando peticiones a nuestro webrole desplegado. ¿Pero cómo hacemos esto en un entorno al que no podemos acceder físicamente a los ficheros del sistema?

La solución de la plataforma es copiar estos ficheros de log cada cierto tiempo a un blob de almacenamiento Azure. Para realizar este periodo tenemos que modificar nuestra aplicación, por ejemplo añadiendo código en el evento OnStart() de nuestro webrole -durante el periodo de CTP en el 2009 había un botón "Copy IIS Log Files...". Me pregunto porqué lo habrán quitado-:

Public Overrides Function OnStart() As Boolean

    ' Change the transfer period to the Blob
    Dim config = DiagnosticMonitor.GetDefaultInitialConfiguration()
    config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1)
    config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1)
    config.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1)

    ' Enable collection of crash dumps
    Microsoft.WindowsAzure.Diagnostics.CrashDumps.EnableCollection(True)

    DiagnosticMonitor.Start("DiagnosticsConnectionString", config)
    ' For information on handling configuration changes
    ' see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
    AddHandler RoleEnvironment.Changing, AddressOf RoleEnvironmentChanging

    Return MyBase.OnStart()

End Function

Si lanzamos nuestra aplicación en nuestro entorno de desarrollo del SDK (Development Fabric) podemos observar una línea de información nueva indicando la ruta donde se está almacenando toda la información de diagnóstico. 


En el fichero "./Monitor/Configuration.xml" a partir de dicha ruta se encuentra un fragmento de configuración XML donde aparecen las rutas a los ficheros de log de IIS del webrole en ejecución:


También podemos comprobar que se están copiando dichos ficheros con la frecuencia indicada en código accediendo al Blob Storage. Para acceder a él podemos hacerlo mediante el Windows Azure Storage Explorer que integra el SDK dentro del propio Visual Studio a través de unos sencillos pasos.


Ahora que ya hemos comprobado que funciona correctamente en el entorno de desarrollo, es hora de subir nuestra aplicación a Azure y comprobar el funcionamiento. No se olviden de modificar el fichero de configuración del servicio modificando el valor de la entrada DiagnosticsConnectionString, ya que si no se nos quedará colgada la aplicación durante el proceso de deploy.



Cada vez que veo cómo van evolucionando las herramientas mejor pinta tiene todo. La integración del último SDK con Visual Studio es excelente ya que hace él solito el deploy.




Espero que os haya servido de ayuda.

Happy coding!

Edit: no te pierdas Cómo supervisar los logs de IIS en Windows Azure (II)


Cambiar el servidor SQL usado por Development Storage con el SDK 1.2

Hoy me he encontrado con uno de los problemas que, después de realizar una sencilla búsqueda en la web, ves varias soluciones al respecto pero ninguna termina de funcionarte.

En este caso el problema en cuestión es que quería utilizar una instancia de SQL Server para el soporte de Development Storage. Esta herramienta es un componente del SDK de Azure que permite simular el almacenamiento que nos ofrece Azure en nuestro entorno de desarrollo.

Development Storage utiliza por defecto un servidor SQL Server Express -concretamente la instancia LOCALHOST\SQLEXPRESS- para realizar la simulación. El problema lo he tenido ya que no utilizo en mi máquina de desarrollo esta edición de SQL Server sino una más potente que tenemos en la red.

Si bien Rodrígo Corral comentaba en su blog claramente cómo solucionar este problema, la solución comentada es para el SDK 1.0 de Azure ya que a partir de la versión 1.1 el fichero de configuración que indica ya no existe -existe el fichero DSService.exe.config pero al intentar introducir la cadena de conexión al servidor de la red, hace caso omiso a dichas entradas-.

Curiosamente me dio por iniciar el comando DSInit con el parámetro /? para ver si daba algún tipo de ayuda adicional, y se ve que a partir de dicha versión simplificaron esta configuración.



Ahora simplemente hay que ejecutar el comando DSInit -sqlinstance:NombreInstancia en una consola de comandos de Windows Azure SDK para configurar el servidor que queramos para el Development Storage. En el caso de que la instancia sea local, el comando será DSInit -sqlinstance:.





sábado, 23 de octubre de 2010

Cómo crear un certificado X.509 para tu cuenta de Windows Azure

Dejando temas filosóficos a un lado y comenzando con algo más técnico, comencemos con lo que nos encontramos al instalar el Management Console de Windows Azure -afortunados aquellos que no conocieron cómo había que administrar Azure antes de tener esta herramienta-.

Una vez que abrimos la consola, para poder administrar nuestros servicios en la nube con esta herramienta se nos piden tres parámetros:
- el ID de suscripción (Subscription ID)
- un certificado X.509 (API Certificate)
- la cuenta de almacenamiento por defecto (Default storage account). Este tercer parámetro realmente es opcional y de hecho, hay que dejarlo vacío hasta que creemos por lo menos un servicio de almacenamiento.

El primero de los parámetros, ID de suscripción, lo obtenemos desde el mismo portal de Azure, seleccionando un servicio y pulsando sobre la pestaña "Account"

El segundo de ellos, API Certificate, es un certificado X.509 que será utilizado para comunicación SSL, ejecutar comandos PowerShell, etc. Para las aplicaciones en producción hace falta que este certificado sea emitido por una entidad emisora de certificados de confianza, como puede ser Verisign o Thawte, aunque para desarrollo nos podemos ahorrar este coste emitiendo un certificado autofirmado (self-signed).

Hay varios métodos y utilidades para generar un certificado de este tipo (una entidad emisora de certificados interna, la herramienta openssl, etc.) aunque describo cómo hacerlo con las herramientas que trae el propio Visual Studio:

1) Abrimos una consola de comandos de Visual Studio
2) Escribimos el siguiente comando:
makecert -r -pe -a sha1 -n CN=AzureMgmt -ss My "AzureMgmt.cer"



3) Abrimos el fichero generado "AzureMgmt.cer" y lo instalamos en nuestro almacén de certificados mediante la opción "Instalar certificado..." y seguimos el asistente

4) El siguiente paso es dirigirnos al portal de Azure y subir el certificado que acabamos de generar. Para ello, en la misma página que estaba el ID de suscripción pulsamos sobre el enlace "Manage My API Certificates" para acceder a la página de subir el certificado.


5) Una vez hecho esto y volviendo al Management Console de Windows Azure en tu PC, simplemente hay que indicar en el certificado pulsando el botón que se encuentra al lado del campo.

Una vez realizados estos pasos, simplemente vamos a la barra de acciones de la derecha y pulsamos sobre la acción "Connect" para conectar con nuestra cuenta de Windows Azure. Pasados unos segundos en el árbol de elementos nos aparecerán cada uno de los servicios que tengamos creados y estaremos listos para administrar nuestra cuenta de Azure desde el escritorio.

Happy coding!

jueves, 21 de octubre de 2010

Recapitulando

Bueno, una vez hecha la introducción -hay que ver lo filosófico se pone uno a veces- llega el momento de entrar en materia.

Por el momento centraré el blog en la tecnología que más domino: Windows Azure, aunque no quite que dedique algún que otro post a algún test de plataforma, sobre todo para poder conocer los beneficios e inconvenientes de cada una de ellas.

Sobre la plataforma de Microsoft, que vengo siguiendo desde que estaba en CTP -y que aprovechamos a presentar en el evento de MSDN por noviembre del año pasado en Santa Cruz de Tenerife- está a punto de cumplir un año desde su apertura al público.

¿Qué es lo que ofrece la plataforma de Microsoft en la nube?

Bajo mi entender, existen ahora mismo dos tipos de plataformas de cloud computing bien diferenciadas: las plataformas orientadas a virtualización de equipos en Internet y las orientadas a ofrecer una plataforma para el desarrollo rápido de aplicaciones. Sí, la lucha entre los IT y los DEV tendrá su próximo combate en la nube :) ¿quién estaba en el evento de Microsoft en el que pusieron a los de IT con camisetas azules y a los de desarrollo de naranja? Ahí ganaron los de IT, que se llevaron una Harley :P

El primer grupo surge como evolución natural de las empresas de hosting en Internet, reinventando su negocio gracias a la llegada y posibilidades de las tecnologías de virtualización. La idea es que dan la posibilidad de desplegar de una forma más o menos automatizada servidores en sus datacenters de una manera flexible, permitiendo indicar, por ejemplo, si deseamos sistema operativo Windows o Linux, aumentar o disminuir la cantidad de memoria RAM, espacio en disco, etc. para utilizar dichos recursos según nos convenga. La administración de dicha infraestructura en la nube queda en manos del que alquile los servicios. Se suele denominar a este tipo de alquiler como "On-premises".

Ejemplos de este tipo de plataformas en la nube hay muchos por el hecho que comenté antes de la evolución natural de las empresas de hosting, por lo que hay que andar con mucho ojo. Un ejemplo magnífico en estos momentos de este tipo de plataformas es GoGrid, que está muy por delante del resto. Ya escribiré en algún post las maravillas que cuenta nuestro amigo Marco Casula sobre los 50 servidores distribuidos a nivel mundial que está gestionando ahora mismo.

El segundo grupo, con una orientación más a la aplicación que al equipo virtualizado, ofrecen un conjunto de recursos y patrones preestablecidos para que al desplegar una aplicación no tengamos que estarnos preocupando por los componentes necesarios para poner en marcha nuestro sistema, sino que de algún modo ya se encuentran pre-configurados o se despliegan automáticamente según los requerimientos de la aplicación aprovechándose también de tecnologías de virtualización.

Dentro de este segundo grupo hay menos ejemplos, y si Google y Amazon abrieron este mercado, es ahora Microsoft Windows Azure quien está ampliando enormemente su mercado en detrimento del App Engine de Google, gracias al soporte nativo de .NET Framework, PHP, tecnología SQL Server como bases de datos y servicios de bus federados como ejemplo.


Y es que echando un vistazo hacia atrás en el corto espacio de tiempo que lleva abierto al público -fue anunciado por primera vez en el PDC de 2008 y lanzado en enero de este año- cabe destacar la gran cantidad de características que van incorporándose a la plataforma a cada par de meses. Como jugador de World of Warcraft me recuerda a los parches de contenido a los que nos tiene acostumbrados Blizzard para engancharnos vilmente.

De hecho, uno de los anuncios más importantes durante este verano es que, no estando contentos con pertenecer sólo al segundo grupo -hay que tener en cuenta que muchos desarrollos actuales no encajan dentro de las especificaciones de Windows Azure, lo que podría complicar la migración de aplicaciones a la nube-, están preparando el lanzamiento de Windows Azure Platform Appliance, que viene a ser algo así como: "construye tu propio datacenter aprovechándote de las infraestructuras de Windows Azure" con lo que ofrecerán un modelo híbrido cloud/on premises.

Para no daros más la lata por hoy, os dejo el siguiente enlace por si queréis leer algo más del asunto:
Happy coding!

miércoles, 20 de octubre de 2010

Y se hizo la luz...

Mucho ha llovido desde que por suerte me fugué de aquella charla en el instituto acerca de la facultad de económicas, justo cuando el destino me hizo un guiño y vi en un tablón de anuncios que la facultad de informática estaba en marcha en nuestra isla. En una hora recordé todas las horas que a gusto pasé delante de mi super ordenador MSX y más tarde el AMIGA, para finalmente darme cuenta de que incluso algún día podía ganarme la vida con ello.

Algún amigo recordará aquella base de datos de novios y novias que hicimos por sexto de EGB, una aplicación con DATAs que cargaban al ritmo de un beep-beep de cinta, lo más parecido a un Facebook de la época.

Más tarde llegó el módem -¡me vino de regalo en una revista!- y el fenómeno de las BBS, para ver por fin la llegada de la revolución del siglo pasado a nuestros hogares: Internet.

Más de una década después la red ha sufrido muchas evoluciones: que si web 2.0 por aquí, que si travel 3.0 por allá, que si redes sociales,... mucho ha tenido que cambiar la red para que el grado de introducción de la misma sea lo que es hoy. ¡Si hasta mi madre me ha pedido amistad en el Facebook! -me viene a la mente la frase "¡ven a cenar ya o bajo la palanca!", ¿tendré que repetírsela yo ahora?.

¿Y qué es lo que me ha pasado ahora, para que después de tanto tiempo me decida a abrir un blog y comenzar a escribir unas líneas? Realmente dos cosas.

La primera es darme cuenta de la gran importancia de la palabra. Hace algunos meses recuerdo una conversación acerca de temas trascendentales en la que discutimos si veíamos viable que de aquí a nuestra vejez la tecnología haría posible algún método de hacer que el hombre consiguiera vencer a la muerte y por consiguiente descubriera la inmortalidad. Algunas cervezas más tarde -más de la cuenta en realidad- y otras divagaciones sobre el primer episodio de Caprica -el spin-off precuela de Battlestar Galactica- llegamos a la conclusión de que una manera de alcanzar esa inmortalidad es precisamente dejar huella mediante las palabras. Nadie mejor que tú mismo para imprimir con palabras una imagen residual de ti para la posteridad, tenga relevancia o no lo que hayas hecho en tu vida.

La segunda -y a la que va realmente dedicado este blog y sobre el que trataré en lo sucesivo- es ver con mis propios ojos la llegada de una nueva revolución en el mundo digital: el Cloud Computing (o computación en la nube). No me quiero extender en esta presentación acerca de su significado, ya que este blog se centrará más bien en sus aspectos tecnológicos, pero por decir algo diferente, se trata de un nuevo modelo de entender las tecnologías de la información que pasa por aceptar lo intangible como algo cotidiano.

¿Qué quiero decir con esto? Si te preguntara cuánto dinero tienes, lo más seguro es que lo primero que se te viene a la cabeza es la cifra de la cuenta del banco, sin darte cuenta que físicamente solo tienes en el bolsillo algunos euros para pasar el día. Esta conexión mental se debe a que -corralitos aparte- se ha llegado al grado de confianza y aceptación de que tu dinero esté en una entidad bancaria, sin realmente importarte dónde ni cómo se almacenan físicamente tus billetes, como si estuvieran en una "nube" a la que sabes que puedes acceder a ella en cualquier momento a través de un cajero, sucursal o tarjeta de crédito.

Pues siguiendo con el símil, el nuevo modelo de computación en la nube propone ver las tecnologías de la información del mismo modo, olvidándote de dónde y cómo se almacenan tus datos, ni qué características hardware o software te hacen falta, dándote la flexibilidad y seguridad para centrarte en lo realmente importante: tu negocio.

Obviamente, estamos en ese proceso de transformación, pero una cosa es segura: la nube ha llegado y está aquí para quedarse.
Related Posts Plugin for WordPress, Blogger...