Cuando el esfuerzo y el trabajo duro superan al talento

La palabra con la que me quedo de este 2015 es esfuerzo, y me gustaría hacerlo contrastar con el talento. Según la RAE, el esfuerzo es el “empleo enérgico del vigor o actividad del ánimo para conseguir algo venciendo dificultades”. Ese algo que conseguimos puede ser desplazar el sofá de una habitación a otra o bien la resolución de un fallo en un complicado algoritmo. En contraste con el esfuerzo tenemos el talento, que todos entendemos como una aptitud, la mayoría de las veces innata para desempeñar una determinada actividad. ¿Cuántas veces no hemos escuchado “se le da muy bien hacer eso”? Es una frase muy común de reconocimiento de talento.

A este efecto me gustaría haceros llegar el genial discurso del archiconocido Gran Maestro del ajedrez, Garry Kasparov que dio el pasado 16 de mayo en la universidad de St. Louis:

clip_image001

Discurso de Garry Kasparov en la St. Louis University, 16 de mayo de 2015 (minuto 9:04)

(…) It’s never too late to dream. You often hear in chess and in other sports that “this” player is more talented but “that” player works harder. This is a fallacy. Hard work IS a talent. The ability to keep trying when others quit is a talent and hard work is NEVER wasted. No matter what career you end up with or even if you have dozen different careers. (…) Human beings cannot upgrade their hardware, that is our DNA, but it is hard work what can definitely upgrade our mental software.

Traducción: (…) Nunca es demasiado tarde para soñar. Siempre escuchamos en el ajedrez y otros deportes que “este” jugador tiene más talento pero que “ese otro” trabaja más duro. Eso es una falacia. El trabajo duro ES talento. La habilidad de intentarlo una y otra vez cuando los demás abandonan es un talento y el trabajo duro NUNCA es inútil. No importa la carrera con la que acabes o incluso si tienes docenas de carreras diferentes. (…) Los seres humanos no pueden actualizar su hardware, eso es nuestro ADN, pero es el trabajo duro lo que definitivamente puede actualizar nuestro software mental.

No podría estar más de acuerdo con Kasparov. Incluso Winston Churchill ya decía que “El éxito consiste en ir de fracaso en fracaso sin perder el entusiasmo”. No caigamos nunca en la trampa de pensar que el talento es algo con lo que se nace o no y que está totalmente fuera de nuestro alcance el modificar este hecho. Ese es el pensamiento fácil y cómodo, me atrevería a decir que incluso de zona de confort; pero que al mismo tiempo no nos llevará nunca a cumplir nuestros sueños.

En mi experiencia con multitud de situaciones personales y profesionales en las que me he visto envuelto este año, puedo decir rotundamente que los logros y los éxitos que he obtenido han sido en base a trabajar mucho, con pasión y entusiasmo. Estoy bien lejos de considerarme a mí mismo un genio o una persona con algún talento especial, sino que todo es cuestión de intentarlo una y otra vez sin abandonar en ningún momento.

Os invito a lo mismo. Os invito a actualizar nuestro software mental durante el próximo 2016 y a perseguir nuestros sueños con todas nuestras fuerzas.

¡Feliz Navidad y Próspero Año 2016!

Administración de servicios de Azure mediante CLI

Hoy voy a a hablar de la interfaz de línea de comandos de Azure, o CLI de Azure. Dicha CLI provee al usuario de una serie de comandos de código abierto basados en shell que permiten crear y administrar recursos de Azure. Esto supone la gestión de servicios y aplicaciones utilizando scripts desde la línea de comandos.

La CLI de Azure está escrita en javascript y necesita de Node.js, tecnología que permite trabajar con javascript desde el lado del servidor, empleando un modelo asíncrono y controlado por eventos.

Cabe destacar que una de las cosas hacen interesante a esta herramienta es su carácter multiplataforma. De esta forma, existen instaladores para cada una de las tres plataformas soportadas:

  • Windows
  • Mac
  • Linux

Otras dos métodos de instalación serían las siguientes:

  • Instalación previa de Node.js y npm, para posteriormente instalar Azure CLI.
  • Ejecución de la CLI de Azure como contenedor de Docker. Consistiría simplemente en ejecutar en un host de Docker ‘docker run -it microsoft/azure-cli’.

Ahondando más en la segunda forma de instalación y tomando como referencia para este post la versión para Linux, (en concreto, Xubuntu 14.04), la misma vendría dada con la instalación de tres paquetes:

Instalados estos tres paquetes, Azure CLI ya estará disponible en el sistema.
Por lo tanto, desde una ventana de consola, escribiendo ‘azure help’ mostrará información de ayuda diversa:

azure help

  • Versión de la herramienta. En este caso, la versión es 0.9.12
  • Comandos disponibles, agrupados según temática. Así, por ejemplo, para ver todos los comandos relacionados con la gestión de máquinas virtuales y las opciones aplicables, habría que indicarlo mediante el siguiente comando:

azure help vm

  • Modo de implementación seleccionado actualmente. Azure cuenta con dos modelos de implementación distintos para crear y gestionar recursos: el Administrador de Recursos (‘Azure Resource Management‘) y el Administrador de Servicios (‘Azure Service Management‘) o módo clásico. Por defecto, está seleccionado el modo clásico. Para cambiar de un modo a otro, se emplea el comando ‘azure config mode <arm|asm>’. Ambos modos son excluyentes entre sí, de manera que los recursos creados en un modo no se pueden administrar desde el otro. Entonces, si se quiere cambiar al modo de Administrador de Recursos, el comando sería:

El primer paso que hay que llevar a cabo para poder gestionar los recursos es poder acceder a los mismos. Para ello, se cuenta con tres formas de acceder a una cuenta y sus subscripciones:

  1. Accediendo a una subscripción, utilizando para ello el Directorio Activo (AD) o una Cuenta Microsoft (Microsoft Account).
  2. Mediante un archivo ‘publishsettings‘ de una subscripción descargado del portal de Azure.
  3. Mediante un certificado.

Tomando como ejemplo la segunda forma, habría que descargar el archivo publishsettings con un navegador e importarlo. Para llevar a cabo esto, se ejecutaría lo siguiente:

Con lo que se abriría la página del navegador (si no lo hiciera, basta con seguir el enlace que se indica), se introducirían las credenciales de la cuenta y se descargaría el archivo. A continuación, se importaría con el comando:

Una vez importado, el archivo se puede eliminar. Si hay otros archivos publishsettings que importar, los pasos a seguir son los mismos. Para ver todas las subscripciones que han sido importadas:

donde se mostrarán el nombre de la subscripción, su id, si está o no actualmente seleccionada, y el estado.

Para seleccionar una subscripción determinada y así poder gestionarla:

Y a partir de este momento, ya se pueden administrar los recursos de esa subscripción seleccionada. Por ejemplo, para ver una lista de las máquinas virtuales:

O se quiere crear un regla de firewall para una base de datos:

Por supuesto, todos los comandos de Azure CLI son susceptibles de ser incluidos en un script, con lo cual posibilita la automatización de ciertas tareas que pueden resultar pesadas, sobre todo si no se tiene acceso a Powershell.

Y esto es todo por ahora. Espero que este post haya servido para, por lo menos, dar una rápida visión de esta interesante herramienta.

Azure Resource Manager, el nuevo paradigma de Azure

Últimamente estamos escuchando hablar mucho de ARM en un contexto de Azure, y pese a que inicialmente nos sugiera la conocida arquitectura de procesadores, nada más lejos de la realidad, puesto que nos referimos a Azure Resource Manager, que es el nuevo paradigma sobre el que se estructura toda la administración de Microsoft Azure. Como hemos mencionado en otras ocasiones, Azure consta de una gran cantidad de componentes: máquinas virtuales, redes virtuales, almacenamiento, bases de datos, etc… que podemos combinar para ofrecer el servicio que queramos desplegar. Hasta ahora, en Azure estos distintos componentes constituían entidades discretas sin ninguna relación administrativa entre ellas, a pesar de que colaborasen entre sí para ofrecer una determinada solución; como lo es el caso en que un servidor web y una base de datos trabajan conjuntamente para hospedar un CMS como Drupal.

¿Qué es Azure Resource Manager?

Azure Resource Manager cambia este paradigma con el que hemos trabajado hasta ahora para componentenizar todos los elementos de Azure. Todos los componentes de Azure son ahora recursos, ya hablemos de una máquina virtual, su adaptador de red, una IP pública, una base de datos o un sitio web. Estos componentes se organizan en agrupaciones lógicas conocidas como grupos de recursos, que nos permiten aglutinarlos bajo una únidad administrativa que contiene la solución.

Así pues, imaginemos que queremos implementar un sistema de WordPress en IaaS. ¿Qué componentes necesitamos?

  • 2 máquinas virtuales: az-wp-apache, az-wp-mysql
  • 2 interfaces de red, una para cada máquina virtual: az-wp-apache-nic1, az-wp-mysql-nic2
  • 1 red virtual: az-wp-vnet1
  • 2 grupos de seguridad de red, uno para interfaz de red o máquina virtual: az-wp-apache-nsg1, az-wp-mysql-nsg2
  • 1 cuenta de storage: az-wp-st01
  • 1 dirección IP pública: az-wp-apache-pip

Todos estos componentes los podemos agrupar bajo un mismo grupo de recursos llamado az-wp-rg. Con ello hemos conseguido crear una unidad administrativa común para ellos. ¿Qué nos permite esta nueva unidad?

  • Desplegar el mismo conjunto de recursos tantas veces como necesitemos, creando distintas instancias de WordPress con su correspondiente base de datos. Esto es posible gracias a que podemos extraer una plantilla con la definición completa de los elementos que hemos creado.
  • Definir dependencias entre recursos de forma que se desplieguen en el orden correcto.
  • Aplicar control de acceso basado en roles (RBAC) al grupo de recursos, de forma que podemos definir administradores de Azure sólo para esta solución, en lugar de para toda la suscripción como ocurría hasta ahora.
  • Aplicar etiquetas a cada uno de los distintos recursos, lo que nos permite organizarlos mejor en la suscripción.
  • Monitorizar el estado de salid de la solución completa que se encuentra contenida en el grupo de recursos.
  • Ver los costes de la solución como conjunto, en lugar de la suma de los elementos separados.
  • Eliminar todos los recursos de la implementación especificando a Azure que queremos borrar el grupo de recursos correspondiente. Hasta ahora, debíamos eliminar individualmente cada servicio y era fácil que se nos olvidase algo.

¿Cón qué hemos estado trabajando hasta ahora?

Hasta ahora el modelo de Azure con el que se trabajaba estaba orientado a servicio y se conoce como Azure Service Manager (ASM). Estas son las principales diferencias entre ambos modelos:

Azure Service Manager Azure Resource Manager
Portal antiguo No
Portal nuevo
API REST XML JSON
RBAC No
Tags No
Automatización Procedural (PowerShell y XML) Declarativa (JSON)
Grupos de recursos No
Recursos enlazados Muy limitado

A continuación podemos ver el aspecto de la administración de un grupo de recursos desde el nuevo portal de Azure. Como se observa en la captura, se trata de un grupo de recursos para hospedar un entorno de AD Connect y ADFS.

image

Plantillas JSON

Una de las grandes novedades y potencias del nuevo Azure Resource Manager son las plantillas JSON que nos permiten desplegar recursos de Azure de forma declarativa, encargándose la propia plataforma de las tareas implicadas en su despliegue. Estas plantillas están descritas con gran nivel de detalle aquí y se pueden observar multitud de ejemplos en este repositorio oficial de Microsoft en Github. Otra alternativa es visitar la galería de plantillas JSON de Azure donde se nos muestra el repositorio organizado gráficamente y con descripciones de cada una de ellas; ¡incluso podemos desplegarlas en nuestra suscripción con un sencillo clic de ratón!

Si vamos a construir una plantilla desde 0, es posible que nos resulte algo indigesto, así que para hacerlo sencillo lo mejor es valernos de la Azure Tools para Visual Studio (válido también para la versión gratuita Community). Al crear un nuevo proyecto tenemos opción a crear un nuevo Grupo de Recursos de Azure.

image

Tras lo cual se nos mostrará una serie de plantillas predefinidas en las que podemos basarnos para construir nuestro entorno. Si elegimos la de desplegar una máquina virtual con Ubuntu Server…

image

Veremos que en el Solution Explorer se nos crea la plantilla predefinida para llevar a cabo la implementación:

image

Con el siguiente código, que podemos modificar a nuestro gusto:

Trabajar con ello desde Notepad o Vim podría ser indigesto, pero Visual Studio nos da una serie de ayudas para que la experiencia sea mucho más llevadera, como el explorador JSON, que nos muestra todos los parámetros, variables y recursos de Azure presentes en el código. ¡Anímate a probarlo!

image

Azure Resource Explorer

Aunque no sea especialmente conocido y se encuentre el Preview, Azure Resource Manager dispone de una herramienta llamada Azure Resource Explorer, a la que podemos acceder desde https://resources.azure.com. Tras validarnos con nuestras credenciales, la herramienta nos permite navegar por todos y cada uno de los recursos de nuestras subscripciones y hacer pruebas de llamadas a la API REST para realizar operaciones. Si ya tienes grupos de recursos en tu suscripción de Azure y quieres obtener el JSON para desplegarlos en otros entornos (todavía no disponible), esta herramienta resulta realmente útil. Pinta tal que así:

image

Azure Service Manager o Azure Resource Manager, ¿con cuál trabajo?

La opción por defecto debería ser Azure Resource Manager. El modelo ASM es a extinguir y aunque por razones obvias va a continuar teniendo soporte por parte de Microsoft durante mucho tiempo, todos los nuevos trabajos deberíamos hacerlos mediante ARM. Sin embargo, si hasta ahora has trabajado con ASM y quieres pasar a ARM, es importante que hagas las dos siguientes lecturas:

Y eso ha sido todo por ahora. Espero que este post os sirva para ilustraros el mar de posibilidades que el nuevo modelo basado en recursos de Azure nos provee tanto a los profesionales de infraestructura como a los desarrolladores a la hora de sacar el máximo partido de la nube.

¡Felices Fiestas!

Comprobar disponibilidad de websites con PowerShell

En ocasiones, para un administrador de sistemas, resulta imprescindible saber si un determinado sitio web está levantado o no. Esta necesidad aumenta aún más, si cabe, si el administrador tiene a su cargo una elevada cantidad de sitios que monitorizar. Una solución rápida puede ser, por ejemplo, lanzar un comando ping para saber si un servidor responde a una cierta dirección. Pero esto no nos da información sobre si una cierta URL está activa o funcionando correctamente.

Para este tipo de situaciones, hace falta hacer procesamiento a un nivel más alto que simplemente “comprobar que la máquina responde”. Y aquí es donde PowerShell viene a ayudar, automatizando el proceso y proporcionando acceso a funciones de alto nivel que proporcionan información adicional.

El Código

Paso a paso…

En primer lugar, nos pide las credenciales de nuestra cuenta de correo. En este caso, las de un servidor de correo ficticio llamado “unsmtp.plainconcepts.com”. Para los que tengan Office365, también funciona con estas credenciales.

credentials

A continuación, se crea un array vacío en el que se van a guardar una serie de objetos a partir del cual se generará un informe. Justo después se define un array de URLs en el que se tiene una serie de sitios web a consultar. Importar la lista de URLs desde un archivo CSV es mucho más conveniente, pero a efectos de script demo, se decidió prescindir de esa parte para que el script funcione “tal cual” sin dependencia de otros archivos.

Para cada elemento de la lista de URIs, se hace una llamada al sitio web con invoke-webRequest. Esto hace que PowerShell conecte con el sitio web, en caso de éxito, nos muestra en pantalla un mensaje “el host está online”, y guarda un objeto en el listado con el que se va a generar el informe. En caso de error se captura la excepción correspondiente y se discrimina por código de error, siendo los más interesantes son el 404 y el 500. Si se desea completar el script, se puede consultar la lista completa de códigos de estado HTTP y añadir los manejadores que se considere necesarios.

psOutput

En penúltimo lugar, una vez procesados todos los elementos de la lista de sitios, toca procesar el listado de objetos para generar un informe de estado en formato CSV. Este informe se guarda en la carpeta temporal del usuario, donde no moleste.

Finalmente, se envía por correo con send-mailMessage. Se puede enviar al propio usuario, o adjuntar una copia a otra persona.

email

informePreview

Conclusión

Como se puede ver, las partes más importantes de este script son la consulta a cada URL, que posibilita obtener información detallada del estado de cada una, y el envío del informe de estado en formato CSV por correo electrónico. Este script se puede añadir a una tarea programada que se ejecute diariamente (en caso de necesitar un informe diario), o modificarlo para que la tarea programada se pueda ejecutar con mayor frecuencia, pero modificando la parte de envío de informe por correo electrónico, para que el informe sólo se genere con los hosts que tengan problemas, y el email sólo se envíe cuando se genere el archivo CSV de informe.

¡Las posibilidades son ilimitadas!

Microsoft Arr como proxy Inverso

Esta semana me gustaría hablar de una herramienta bastante completa como es Microsoft ARR.

¿Qué es Microsoft ARR?

Microsoft Application Request Routing  (ARR) es una extensión de IIS basada en los módulos en URL Rewrite, Web Farm Framework  y External Cache,  que  permite ampliar las funcionalidades de nuestro IIS, convirtiéndolo en un elemento multipropósito. Entre las tareas que puede desempleñar destacan las siguientes:

    • Balanceador de carga: permite distribuir la carga entre varios servidores de una misma granja.
    • Servidor de caché: mejora el rendimiento de los servidores CDN estableciendo una caché de disco intermedia.
    • Proxy inverso: redirige las peticiones desde Internet hasta el servidor correcto en una red privada.

Para poder emplearlo, debemos instalarlo en nuestro IIS, bien de forma manual (instalando previamente sus requisitos) o de manera más automática y sencilla a través de Web Platform Installer.

Arr como proxy inverso

En este artículo nos vamos a centrar en este aspecto. Como proxy inverso permite redirigir las peticiones recibidas a través de Internet a un servidor en concreto de nuestra red interna. El proceso sería el siguiente:

  1. El usuario abre su explorador de Internet y escribe una url.
  2. Esta url es resuelta por el proveedor DNS correspondiente en Internet y redirigida a una Ip.
  3. El firewall de esa red (conforme a lo que esté establecido en él) redirige el tráfico al ARR.
  4. El ARR examina la cabecera http  recibida y revisa el conjunto de reglas que tiene establecidas en su módulo URL Rewrite
  5. Si la condición se cumple, realiza una acción, en este caso redirije esa petición al servidor destino.
  6. La url es servida al usuario.

image

Reglas de enrutamiento

Las reglas de enrutado son la base del funcionamiento del ARR. Cada regla consta de varias partes :

  • Match Url: se pueden emplear una serie de patrones a aplicar a la url solicitada. Asímismo,  definimos si vamos a emplear comodines, expresiones regulares o la url exacta.

image

  • Condiciones: Se establecen las premisas que se deben cumplir para que se aplique la regla.

image

  • Acciones: la aplicación de la regla tendrá como consecuencia la ejecución de una acción. De entre ellas destacamos las que aplicarían en nuestro caso: Rewrite que reenvia la petición a una url interna, y Route to Server Farm que redirigiría esa url a uno de los servidores que tuviéramos definidos dentro de la granja del ARR.

image

Una vez configurados los parámetros indicados con anterioridad dispondríamos de un proxy inverso listo para enrutar las conexiones que definamos a nuestra red local.

¿Por qué emplearlo?

Las principales ventajas que obtenemos al emplear ARR como proxy inverso son las siguientes:

  • Seguridad: Nuestros servidores no se encuentran expuestos directamente a a Internet por lo que están más protegidos frente a ataques externos. En nuestro firewall sólo tendremos que abrir una regla por cada puerto que redirgir al ARR.
  •  Administración centralizada: gestionamos la redirección a varios servidores a través de las reglas definidas en un único IIS.  No necesitamos varias ip’s públicas, ya que con una podemos reenviar las peticiones al servidor adecuado.

Como habéis podido observar  debido a las aplicaciones que ofrece resulta bastante atractivo a la hora de emplearlo. Y con esto, me despido, ¡hasta la próxima!

Evento: Workshop de Introducción a Azure – Universidad de Almería

El próximo viernes 4 de diciembre servidor va estar por Almería, iniciando el puente de la Constitución Española de la mejor forma posible: dando un completo Workshop de Introducción a Microsoft Azure en la Universidad de Almería. Tanto si no conoces Azure como si quieres descubrir algunas de sus novedades más destacadas como el Azure Resource Manager, ¡no dejes de visitarnos si te encuentras por la zona!

  • Título: Workshop: Introducción a Microsoft Azure
  • Fecha: viernes 4 de diciembre de 2015
  • Hora:  11:15 – 14:00
  • Ubicación: Aula mac – CITE III – Universidad de Almería – Almería
  • Abstract:
    • Presentación y Plain Concepts: ¿quiénes somos?
    • Introducción al Cloud Computing
    • El nuevo paradigma de la computación y la infraestructura
    • Introducción a Microsoft Azure
    • Networking: las redes son serious business en Azure.
    • Máquinas virtuales, cuestiones de rendimiento.
    • DEMO
    • Una nueva etapa en Microsoft Azure: Azure Resource Manager
    • Diferencias entre el Azure Classic Mode y el Azure Resource Manager
    • Azure VM Scale Sets
    • DEMO: Desplegando infraestructura mediante plantillas JSON y DSC
    • Gestionando la identidad corporativa: Azure Active Directory, la federación, el SSO y la autenticación basada en claims
    • DEMO
    • Intercambio de opiniones y debate
  • Registro : Enlace de acceso
  • Ponente: Carlos Milán Figueredo – Enterprise Team Lead (Plain Concepts)