Archive for September, 2011

Windows Azure PowerShell Cmdlets 2.0

Written by Ibon Landa on September 30th, 2011. Posted in Windows Azure

Trabajando con aplicaciones reales en Windows Azure te das cuenta rápidamente de que necesitas automatizar ciertas tareas, ya que hacerlas de manera manual puede resultar muy pesado y poco productivo; despliegues, actualizaciones, monitorizaciones etc…

Para esta fin los CmdLets de PowerShell para Windows Azure ha sido desde su aparición un gran aliado, aliado que ahora se actualiza a la versión 2.0 que incluye nueva funcionalidad gracias a que Windows Azure ofrece cada vez más APIs de Administración que los desarrolladores podemos utilizar. Claro está, que todo lo que hacen estos CmdLets lo podríamos hacer nosotros mismo.

Tanto la descarga como la documentación sobre su utilización la podéis encontrar aquí.

Las novedades más importantes son los comandos para trabajar con SQL Azure, aquellos que exportan toda las métricas del Storage y los que permiten tratar la información de diagnóstico de las aplicaciones Azure..

Por ejemplo, algunos comandos nuevos son:

Window Azure Storage Analytics

Get-StorageAnalyticsLogs Downloads the analytics logs for the specified service.
Get-StorageAnalyticsMetrics Downloads the Windows Azure Storage Analytics metrics for the specified service.
Get-StorageServicePropertiesForAnalytics Gets Windows Azure Storage Analytics properties for a storage account.
Set-StorageServicePropertiesForAnalytics Sets Windows Azure Storage Analytics properties for a storage account.

SQL Azure Servers

Get-SqlAzureServer Enumerates SQL Azure servers that are provisioned for a subscription.
New-SqlAzureServer Adds a new SQL Azure server to a subscription.
Remove-SqlAzureServer Deletes a SQL Azure server from a subscription.
Set-SqlAzurePassword Sets the administrative password of a SQL Azure server.

SQL Azure Firewall Rules

Get-SqlAzureFirewallRules Retrieves a list of all the firewall rules for a SQL Azure server
New-SqlAzureFirewallRule Updates an existing firewall rule or adds a new firewall rule for a SQL Azure server
Remove-SqlAzureFirewallRule Deletes a firewall rule from a SQL Azure server.
LinkedInMessengerShare

Transición de BPOS a Office365

Written by mario on September 26th, 2011. Posted in Office 365

BPOS (Business Productivity Online Suite) es la plataforma de Microsoft de servicios de productividad en la nube previa a Office 365. Con la aparición de Office 365 en Junio de 2011 los usuarios de BPOS pueden programar la  fecha de transición de sus servicios y datos desde BPOS a Office 365. Esta transición es gratuita y para todos las suscripciones de BPOS. Microsoft se encargará de todas las actualizaciones de infraestructura de servidores y de migración de datos, garantizando que la transición sea un proceso sencillo para los clientes.

El motivo de realizar esta transición es que BPOS está construido sobre servidores dedicados adaptados a los requisitos en la nube, mientras que la nueva arquitectura de Office 365 está diseñada para soportar servicios facilitando su gestión y flexibilidad.

Al pasar a Office 365 las suscripciones de BPOS se transformarán en otras de Office 365:

Suscripción de BPOS actual

Suscripción nueva

BPOS Standard Suite

Office 365 (plan E1)

BPOS Deskless Worker Suite

Office 365 (plan K1)

Exchange Online

Exchange Online (plan 1)

Exchange Online Deskless Worker

Quiosco de Exchange Online

SharePoint Online

SharePoint Online (plan 1)

SharePoint Online Deskless Worker

Quiosco de SharePoint Online (K1)

Live Meeting Standard

Lync Online (plan 2)

Office Communications Online

Lync Online (plan 1)

Consulta los planes de Office 365 office365.microsoft.com/office365-plans.aspx.

Las transiciones programadas empezarán a partir de Septiembre de 2011 y se prevé que todos los clientes de BPOS hayan cambiado a Office365 como máximo antes de Septiembre de 2012. Microsoft irá informando de la transición a los clientes entre 60 y 90 días antes de su fecha programada. Aunque Microsoft le puede fijar una fecha, usted puede proponer otra fecha desde el portal de Administración de BPOS.

Una vez fijada la fecha de transición, unas semanas antes irá recibiendo mensajes recordatorios para que vaya preparándose para la transición. Los clientes tendrán que formarse por su cuenta en Office 365 y serán responsables de actualizar en sus equipos locales el software cliente necesario, consulte los requisitos en  http://onlinehelp.microsoft.com/office365-enterprises/es-es/ff652534.aspx.

El proceso de sincronización dura unas 48 horas y se realizará por la noche o durante un fin de semana. Durante el proceso sufrirá cortes en los servicios, podrá estar en contacto frecuente con el equipo de soporte a la transición que le ayudará y escuchará los posibles problemas que encuentre.

Durante el proceso de transición no podrá realizar cambios en los servicios y el administrador recibirá información acerca de las siguientes acciones después de la transición.

Después de la transición, el administrador tendrá que abrir una nueva sesión del portal de administración de BPOS, en ese momento se le redirigirá a la nueva Url de administración en Office 365. Las credenciales del administrador no cambiarán, al iniciar sesión en Office 365 tendrá que validar los datos de facturación y que se han migrado las suscripciones de BPOS a Office365.

Los usuarios finales accederán con su usuario y password de BPOS habitual, Outlook se reconfigurará automáticamente, pero tendrán que cambiar manualmente la url de OWA.

 

Más información en:

Centro de transición a Microsoft Office 365

Guía de transición para ayudarlo a planificarse y prepararse

Making the transition from BPOS to Office 365

LinkedInMessengerShare

[OT] En busca de las nubes

Written by Ibon Landa on September 25th, 2011. Posted in OT

Este mismo domingo los compañeros de Plain Concepts tomamos la iniciativa de dejar de hablar de la nube y decidirnos a ir en busca de ella. Los evangelistas de Microsoft creyeron que haciendo el camino de Santiago llegarían, pero nosotros hemos optamos por subirnos al monte para hacer cima y poner estar más cerca.

Ha sido una jornada dura, algo más de 4 horas de caminata y subida (menos si hubiéramos elegido mejor a nuestro serpa), pero ha merecido la pena. Y claro está, al hacer cumbre hemos tenido que poner la bandera (tendremos que pedir patrocinio a Microsoft) y hacernos las fotos de rigor.

Es una experiencia muy buena que recomiendo para hacer equipo, ahora somos más ágiles :-,,)

Aquí os dejo unas fotos de la jornada:

En esta foto se puede ver Bilbao de fondo, punto desde el cual hemos empezado! Seguro que los que sois de Bilbao ya sabéis dónde hemos estado.

IMG_1930

Subiendo poco a poco…

IMG_1912

Cerca de la cima ya.

IMG_1916

La foto de rigor para demostrar que hemos hecho cumbre y dejar contentos a los patrocinadores…eso sí, igual deberíamos haber pedido primero patrocinio.

IMG_1924

Buenas vistas, ya tenemos en mente la siguiente cumbre, un poquito más alta la próxima.

IMG_1928

_DSC0076

Esta un poquito más abajo, desde el punto de partida, justo antes de dirigirnos a comer!

IMG_1934

LinkedInMessengerShare

El camino a la nube en Logroño

Written by Ibon Landa on September 17th, 2011. Posted in Evento, Windows Azure

Como ya os comenté es un post anterior varios evangelistas de Microsoft están haciendo el camino de Santiago en bicicleta y parando en algunas ciudades para hacer eventos sobre Cloud Computing.

Aunque podéis ver y seguir su día a día a través de http://www.elcaminoalanube.com , en este post os pongo algunas fotos del evento que se celebró esta semana pasada en Logroño; del evento, de la comida después de evento y alguna más para que veáis la caravana dónde duermen y guardan todo los materiales del evento.

Y aunque veías a Fernando enseñar la cabeza por la puerta de la caravana prometo que él cogió también la bicicleta mientras la caravana se iba a la meta a esperarles!

WP_000233

WP_000246

WP_000236

WP_000241

WP_000243

WP_000238

LinkedInMessengerShare

Ejemplo de comunicación online entre roles de Azure

Written by mario on September 16th, 2011. Posted in Windows Azure

La llegada de Azure nos acerca a los programadores la problemática de la alta escalabilidad y sistemas distribuidos. En Azure no desarrollamos para un proceso en una máquina, nuestros desarrollos podrán estar en múltiples máquinas a las que realmente no sabremos de antemano donde se ejecutará cada petición. A esto tenemos que agregarle que en Azure disponemos de distintos tipos de “servicios” que podemos desarrollar (Web Roles y Worker roles), cada uno de esto roles se ejecutará en procesos de instancias distintas por lo que en muchas ocasiones seConcept02_1rá necesario que tengamos que implementar algún tipo de comunicación entre los distintos procesos.

Existen varias técnicas de comunicación entre los roles de Azure dependiendo si queremos realizarlo Online u Offline:

  • Online, la comunicación se hace en el momento, el que inicia el mensaje espera hasta que el destino termine de procesarlo.
  • Offline, el destino se entera del mensaje en algún momento pero no sabemos cuando exactamente y el que inicia el mensaje lo envía pero no espera a que termine de procesarlo.

Si elegimos la forma Offline disponemos de varios mecanismo para almacenar el mensaje todos ellos basados en un almacenamiento temporal, el más utilizado son las colas de Azure o Queue. De manera que uno proceso va introduciendo los mensajes en una cola de mensajes. Por otro lado habrá otro proceso leyendo los mensajes introducidos en la cola. Encontrará un ejemplo en el Training Kit de Azure en el capítulo “Exploring Windows Azure Storage”.

Para hacer una comunicación Online podemos recurrir al  uso de servicios WCF, de manera que uno de los roles iniciará el servicio WCF para leer mensajes y otro rol lo llame. En este caso el rol que origina la llamada al servicio WCF esperará hasta que termine la ejecución del servicio o se produzca un timeout.

image

 

Para facilitar este concepto hemos desarrollado el proyecto “Azure Sample Communication Rol” en Codeplex de libre descarga.

 

A continuación se indican los pasos que hemos seguido para hacer el proyecto:

Desde Visual Studio 2010 creamos el proyecto HelloInterRoles de tipo Cloud –> Windows Azure Project y agregamos dos tipos de roles:  ASP.net Web rol y Worker Rol.

image

Creamos un proyecto HelloService de tipo “Empty project” que utilizaremos para agregar las clases que definan e implementen el funcionamiento del servicio WCF.

Agregamos un nuevo elemento del tipo “WCF Service” con el nombre HellloService. visual Studio nos creará dos ficheros, IHellloService.cs con la interfaz del servicio y HellloService.cs con la implementación. Agregue al proyecto las siguientes referencias del GAC Microsoft.WindowsAzure.ServiceRuntime.dll

En la clase IHelloService añada el siguiente método

    [ServiceContract]
    public interface IHellloService
    {
        [OperationContract]
        string RoleName();
    }

En la clase HelloService escriba el siguiente código que devuelve el identificador de la instancia de Azure que está ejecutando en ese momento el código.

 

 public class HellloService : IHellloService
 {
        /// <summary>
        /// Return the current Role name of WorkerRoles
        /// </summary>
        /// <returns></returns>
        public string RoleName()
        {
            return RoleEnvironment.CurrentRoleInstance.Id;
        }
 }

 

Para facilitar la carga del servicio se agregará otra clase HelloProxy con el método GetUrlFormat para devolver la dirección del servicio WCF y el método GetAProxy que conecta con el servicio WCF:

public class HelloProxy
    {

        /// <summary>
        /// Return the URL string to connect to WCF service
        /// </summary>
        /// <param name="Ip"></param>
        /// <returns></returns>
        public static string GetUrlFormat(IPEndPoint Ip)
        {
            return string.Format("net.tcp://{0}/HellloService", Ip);
        }

        /// <summary>
        /// Return a instance of WCF service
        /// </summary>
        /// <param name="Url"></param>
        /// <returns></returns>
        public IHellloService GetAProxy(string Url)
        {
            NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
            EndpointAddress endpointAddress = new EndpointAddress(Url);

            return new ChannelFactory<IHellloService>
                (binding, endpointAddress).CreateChannel();
        }

    }

 

Una vez definido el servicio tendrá que iniciarlo desde los Worker Roles al iniciarse la instancia. Desde el proyecto “WorkerRole” edite el fichero “WorkerRole.cs”.

Agregue una variable global a la clase de tipo ServiceHost que tendrá una referencia al listener del servicio WCF:

private ServiceHost host;
 

Modifique los eventos  OnStart y OnStop para iniciar y parar respectivamente el servicio WCF

        public override bool OnStart()
        {
            ServicePointManager.DefaultConnectionLimit = 12;

            StartWCFService();

            return base.OnStart();
        }

        public override void OnStop()
        {

            try
            {
                // if WCF service was opened then i''m going to close it
                if (host != null && host.State == CommunicationState.Opened)
                    host.Close();
            }
            catch(Exception ex) {
                Trace.WriteLine("Exception: " + ex.Message, "Information");
            }

            base.OnStop();
        }

 

Agregue el método StartWCFService y abra una conexión de la clase ServiceHost:

        /// <summary>
        /// Initialize the WCF service
        /// </summary>
        private void StartWCFService()
        {
            try
            {
                IPEndPoint ipEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["HelloService"].IPEndpoint;
                host = new ServiceHost(typeof(HellloService));
                NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
                host.AddServiceEndpoint(typeof(IHellloService), binding, String.Format("net.tcp://{0}/HellloService", ipEndPoint));

                host.Open();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message, "Error");
                throw;
            }
            Trace.WriteLine("WCF Hello service running...");
        }

 

Agregue el método StopWCFService  para cerrar la conexión de la clase ServiceHost:

        /// <summary>
        /// Stop the WCF service
        /// </summary>
        private void StopWCFService()
        {
            if (host != null)
            {
                try
                {
                    host.Close();
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message, "Error");
                    host.Abort();
                    throw;
                }
            }
        }

En este punto los Worker roles iniciarán el servicio WCF al arrancarse, quedaría agregar la llamada al servicio desde una instancia remota en este caso desde la instancia ASP.NEt web rol. Faltaría agregar un EndPoint al Worker Role para que Azure habilite un puerto de comunicación entre los roles. En este caso agregue un Endpoint de tipo “Internal” y protocolo “tcp”.

image

 

Desde el proyecto Web Role, agregue una páginas apx, agregue un control  de ASP.NETdel tipo ListBox para registrar los nombres devueltos por las llamadas a los servicios WCF de cada uno de los Worker roles.

Agregue un botón de ASP.net desde el que se realizará la llamada con el siguiente código:

        /// <summary>
        /// Event button, call to WCF Worker roles
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                // Read all Worker roles instances
                foreach (RoleInstance instance in RoleEnvironment.Roles["WorkerRole1"].Instances)
                {
                    try
                    {
                        // Retrieve the Worker role URL
                        IPEndPoint ipEndPoint = instance.InstanceEndpoints["HelloService"].IPEndpoint;
                        HelloService.HelloProxy proxy = new HelloService.HelloProxy();

                        // retirve a WCF instance
                        HelloService.IHellloService service = proxy.GetAProxy(HelloService.HelloProxy.GetUrlFormat(ipEndPoint));

                        // Call to WCF method
                        string roleName = service.RoleName();
                        ListBox1.Items.Add(roleName);
                    }
                    catch(Exception exConnection)
                    {
                        ListBox1.Items.Add(string.Format("Exception {0}: {1}", instance.Id, exConnection.Message));
                    }
                }
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

 

Por último, quedaría probar el proyecto desde el emulador de Azur, desde Visual Studio 2010 pulse F5 para que se inicie el Azure Emulator y se despliegue sobre el el paquete del proyecto. Si pulsa con el botón derecho sobre el icono de Azure Emulator aparecerá un menú con la opción “Show compute emulator UI”, al seleccionarlo se mostrará una ventana donde podrá comprobar el estado de sus instancias locales.

image

 

 

Descarga el proyecto desde : http://azuresamplecommunica.codeplex.com/

logo_plain GeeksLogoSimple[9][4]

LinkedInMessengerShare