Menu

Menu

Azure Powershell (3): DSC (Desire State Configuration)

triangle triangle
En este tercer capítulo sobre "Azure Powershell" os traigo una visión global de una técnica de administración de sistemas, válida para sistemas Windows y Linux, llamada "Desire State Configuration" (en adelante, "DSC"), además de un ejemplo muy simple para su utilización.


Breve introducción


Normalmente, un administrador de sistemas configurará un servicio para que funcione de una determinada forma. Partiendo de la base de que, tarde o temprano, pueda ocurrir alguna incidencia no esperada, el anterior administrador deberá corregirla, resolviendo que el tiempo de respuesta ante la incidencia es crítico (es importante resolverla cuanto antes para no tener parado el servicio).
Esta parte puede solucionarse mediante la ayuda de "DSC".

¿Qué es "DSC"? Si acudimos a la documentación de "Microsoft", veremos que "DSC" es una técnica de Powershell que permite administrar la infraestructura de IT y de desarrollo, pero con una distintiva característica: código como configuración. Es decir, consiste en un código de tipo declarativo para configurar, desplegar y manipular sistemas.

La premisa fundamental es que "'DSC' hace (y hará) que el sistema funcione así como se diseñó", y para ello se valdrá de tres componentes importantes:

  • Configuraciones: se tratan de líneas de código en Powershell, las cuales "definen y configuran las instancias de los recursos". En el momento de ejecutar la configuración, "'DSC' simplemente lo hará tal cual le hemos dicho", asegurándose de que el sistema esté en marcha con el estado determinado en su configuración. Además, el componente "Local Configuration Manager" (LCM) se encargará de asegurarse de que los servicios siguen configurados como los establecimos. 
  • Recursos: los recursos son parte de la etapa "hágase así" de "DSC". Contienen el código que pondrá (y mantendrá) el objetivo de una configuración "en el estado que le especifiquemos". Los recursos residen en módulos de Powershell y pueden ser desplegados para configurar algo tan genérico como un fichero o un proceso de Windows, o algo más específico como un servidor web IIS o una máquina virtual de Azure en ejecución
  • Local Configuration Manager (LCM): es el motor por el cual "DSC" provee de la interacción entre los recursos y las configuraciones. Periódicamente, el componente "LCM" sondea al sistema usando el control de flujo implementado por el componente de "Recursos" para asegurarse de que el estado definido anteriormente por una configuración se mantiene. De no cumplirse lo anterior, "LCM" realizará consultas al código en los recursos para volver a implementar la configuración que definimos.
Aunque antes expuse que su uso está orientado a administrar la infraestructura de IT, lo he querido incluir en esta serie de "Azure Powershell" debido a que igualmente nos es útil para trabajar en la "nube".

Pero para ilustrar su funcionamiento, nada mejor que ir mostrándolo a continuación paso a paso en un ejemplo muy sencillo y simple.

Funcionamiento en sistemas Windows


Supongamos que hemos configurado un servicio web en Windows, y queremos asegurarnos de que esté siempre "
up". Para ello, lo que haremos será ejecutar una serie de scripts en Powershell, que configurarán una comprobación de que el servicio anterior se ejecuta o no.

Lo primero que tendríamos que hacer es generar un fichero con un contenido como sigue:


 


El contenido está implementado en una sintaxis que "DSC" es capaz de entender (incluso nosotros podemos intuir qué va a hacer, básicamente definir un recurso (el servicio web, "W3SVC"), además de definir un estado para el mismo, "running"). Lo guardamos en la ruta que queramos, pero teniendo en cuenta que cuando lo ejecutemos, creará una carpeta con un fichero de configuración.

Arrancamos una consola de Powershell, ejecutamos el fichero como si se tratara de un script de Powershell típico, y si todo ha salido bien, veremos que no produce ninguna salida:

 


El fichero configura una función que realizará la comprobación que expusimos antes. Procedemos entonces a ejecutar dicha función, así como a observar la salida que produce a continuación:


La salida nos ha generado un fichero de configuración en la carpeta indicada. Para ponerlo en marcha, ejecutamos el cmdlet "Start-DscConfiguration", indicándole la ruta en la que se encuentra dicho fichero de configuración:


Como podemos ver, lo último nos indica que, efectivamente, se está ejecutando el servicio web. Si quisiéramos comprobarlo en un navegador, éste último no podría ser más explícito al mostrarnos la pantalla de inicio de nuestro sitio web:


Podemos comprobarlo también si ejecutáramos periódicamente el cmdlet "Test-DscConfiguration", indicando la ruta de la configuración como antes:


Ocurrió una incidencia...


 Ahora supongamos que ha ocurrido alguna incidencia, y el servicio web no se está ejecutando. Volviendo a ejecutar el cmdlet anterior, obtendríamos una salida indicándonoslo:

 



Todo lo que tendríamos que hacer para volver a levantar el servicio es volver a ejecutar el cmdlet "Start-DscConfiguration" como antes, comprobando nuevamente que el servicio vuelve a estar operativo:




Como veis, se trata de un ejemplo muy sencillo de implementar, pero nosotros podemos hacer uso de "DSC" de manera que no tengamos que estar pendientes de si está operativo un servicio o no. Podríamos hacer uso de una tarea programada, la cual estaría periódicamente comprobándolo, y en caso de que no lo estuviera, lanzarlo nuevamente. Esto indudablemente nos descubre una metodología de trabajo muy simple, pero al mismo tiempo eficaz en cuanto a recuperación ante incidencias muy puntuales. Está claro que para cualquier profesional de la informática le puede ser útil para aumentar la calidad del producto ofrecido.


Además, como ya dijimos antes esta técnica no se limita a servicios, puede aplicarse a ficheros, procesos, máquinas virtuales, etc. De hecho, acudiendo a  documentación diversa sobre "DSC" se explica que el propósito real del funcionamiento de Powershell era precisamente esta técnica, no limitándose a realizar funciones exclusivas de un intérprete de comandos. Os podréis imaginar lo increíble que resulta que algo tan simple pueda liberar de tiempo a los profesionales al momento de lidiar con una carga de trabajo muy crítica.

Más abajo os dejo documentación para aumentar más el conocimiento sobre la herramienta, reservándome para un futuro artículo su funcionamiento en sistemas Linux.