Gestión de recursos en Azure Resource Manager con políticas personalizadas

Una de las gran ventajas de Azure Resource Manager (ARM) frente al modelo de Azure Service Manager (ASM) es la capacidad de permitir una gestión mucho más detallada de los permisos de acceso a nuestros recursos por diferentes usuarios gracias al modelo Role Based Access Control (RBAC). RBAC se centra únicamente en las acciones que un usuario puede realizar dentro de una suscripción; es decir: acceder a un grupo de recursos concreto, poder gestionar únicamente máquinas virtuales, visualizar en modo lectura la información visible en el portal, etc. Sin embargo, hay ciertos escenarios que no es posible cubrir con RBAC en exclusiva.

¿Qué podemos hacer si queremos restringir en qué regiones se pueden desplegar recursos por temas legales? ¿O qué servicios son los que se puede usar o no? ¿Qué pasa si queremos seguir una nomenclatura estándar en todos nuestros recursos para facilitar la gestión? Si alguna vez os habéis preguntado algo similar, las políticas personalizadas son vuestra solución.

Continue reading Gestión de recursos en Azure Resource Manager con políticas personalizadas

Configuración de Windows Containers paso a paso sobre Hyper-V

En la última Technical Preview de Windows Server, la TP3, una de las novedades incluídas más esperadas era la primera versión de la implementación de contenedores por parte de Microsoft en el sistema operativo. Si queréis conocer más detalles de todo lo relacionado con ello os recomiendo que consultéis la documentación que han hecho pública en MSDN.

Para facilitarnos todo el proceso de evaluación han creado una serie de scripts de PowerShell que automatizan todo el proceso. Desde cómo crear una máquina virtual en nuestro host para evaluarlo, cómo instalar un host en una máquina virtual existente o cómo actualizar uno configurado previamente. Todos los scripts están disponibles en el repositorio de GitHub de Microsoft, otra muestra más de cómo las cosas están cambiando dentro de la compañía.

Dado que me gusta conocer en detalle cómo funcionan las cosas, me he puesto a analizar los scripts para entender mejor los requisitos y la configuración necesaria. En este artículo revisaré el script New-ContainerHost.ps1
Continue reading Configuración de Windows Containers paso a paso sobre Hyper-V

Cómo documentar nuestros scripts de PowerShell

A la hora de documentar nuestros scripts o nuestras funciones de PowerShell es necesario que conozcamos la estructura esperada para que el comando Get-Help o el propio Host pueda extraer la información.

La estructura es bastante sencilla, se basa en una palabra clave de ayuda, SYNOPSIS, DESCRIPTION o EXAMPLE, precedida de un punto. Tras ello, un comentario asociado a dicha palabra clave que empezará en la siguiente línea. Dicha estructura debe de ir dentro de un comentario de bloque o precedida por el símbolo # en cada línea. A continuación se muestra cómo sería en ambos casos

# .[palabra clave de ayuda]
# [contenido de la ayuda relacionado con la palabra clave]
 
<#
 .[palabra clave de ayuda]
 [contenido de la ayuda relacionado con la palabra clave]
#>

El bloque de documentación puede aparecer al principio del cuerpo de la función, al final de la función o anteriormente a la palabra clave reservada function. En el caso de los scripts, ésta puede situarse al principio del fichero precedida únicamente por otros comentarios o líneas en blanco o al final del mismo salvo si es un script firmado. Un detalle importante, si el primer miembro del script es una función será necesario dejar dos líneas en blanco para evitar que sea interpretada como la documentación de la función.

Documentación autogenerada por PowerShell

Por defecto, existe un conjunto de datos que por defecto PowerShell muestra y genera de forma automática cuando llamamos al comando Get-Help. Lo más importantes son los siguientes:

  • Name : Obtenido a partir del nombre del fichero de nuestro script o del nombre de la función.
  • Syntax : Extraído de la firma de nuestro script o función.
  • Parameter List : En esta ocasión, si incluímos detalles sobre los parámetros con lo que explicaremos a continuación, la información se extraerá de ahí. Si no, a partir de la firma de nuestro script o función.

Palabras clave que podemos utilizar

Junto con lo anterior, tenemos una colección de otros parámetros que podemos añadir a nuestra documentación para hacerla más completa.

  • SYNOPSIS : una pequea descripción de la función o el script. Esta palabra sólo se puede incluir una vez.
  • DESCRIPTION : Una extensión del parámetro anterior para describir de forma detallada qué realiza la función o el script. Esta palabra sólo se puede incluir una vez.
  • PARAMETER : La descripción de cada uno de los parámetros que nuestra función o script. Es necesario incluir esta palabra clave por cada parámetro que utilicemos. El orden que utilicemos para ponerlos será el orden en el que aparezcan en la ayuda de PowerShell.
  • EXAMPLE : Diferentes ejemmplos para para ayudar al usuario a utilizar nuestra función o script. Podemos añadir tantos ejemplos como deseemos./li>
  • INPUTS : Si vamos a usar este comando en una tubería, con esta palabra clave definiremos el tipo de objeto del .Net Framework que acepta en su entrada.
  • OUTPUTS : Similar al caso anterior pero sobre el tipo de objeto de .Net Framework que devolverá al finalizar su ejecucción.
  • NOTES : Información adicional que queramos añadir sobre nuestro script o función.

No son los únicos pero sí los que probablemente utilicemos más a menudo. Si tenemos curiosidad sobre qué otros parámetros podemos utilizar podemos consultar el artículo de la documentación asociado a este tema. Para ello, desde una consola lanzaremos lo siguiente:

Get-Help about_Comment_Based_Help

O directamente en la referencia de TechNet de forma online.

Un ejemplo de ello lo podéis ver en el script que publiqué para aprovisionar nuestras imágenes de Windows Nano Server.

Automatizando la creación de la imagen de Windows Nano Server con PowerShell

En el artículo anterior comentábamos cómo crear nuestra imagen de Nano Server con la segunda Technical Preview de Windows Server 2016 de forma manual. Si preferís hacerlo de forma automática os puede interesar este script de PowerShell que simplifica el procedimiento

Cómo crear una imagen de Windows Nano Server para pruebas

Las últimas dos semanas han sido muy movidas para todos aquellos que seáis seguidores de las tecnologías de Microsoft. Tras //Build 2015, el evento enfocado a desarrolladores, y Microsoft Ingnite, el evento enfocado a profesionales de infraestructura, nos hemos quedado con una gran colección de novedades que vamos a tardar varios meses en digerir completamente.

Una de ella fue Nano Server: A Cloud Optimized Windows Server for Developers. No es un nuevo sistema operativo, es una versión de Windows Server optimizada para la siguiente generación de aplicaciones. No dispone de interfaz gráfica o de capacides de gestión local, tampoco de los servicios de terminal. Ocupa menos recursos en disco que la versión completa o Core de Windows Server, su proceso de despliegue se agiliza y su gestión se simplifica debido a una reducción al mínimo de los parches y reinicios necesarios.

A diferencia del gran número de roles que Windows Server puede ejecutar a día de hoy, Nano Server está enfocado a tres escenarios concretos únicamente en esta primera versión:

  • Como host de Hyper-V para alojar máquinas virtuales dentro de un clúster o no
  • Como servidor de ficheros con el rol de Scale-Out File Server dentro de un clúster o no
  • Como sistema operativo desplegado en contenedores o máquinas virtuales para la nueva generación de aplicaciones desarrolladas directamente con la nube en la mente

Tras la keynote de Ignite se puso para descargar Windows Server 2016 Technical Preview 2 que incluía ya Nano Server. A la hora de desplegarlo el procedimiento cambia de forma considerable respecto a lo que estábamos acostumbrados hasta la fecha. Vamos a ver cómo preparar una imagen de Nano Server paso por paso.

Continue reading Cómo crear una imagen de Windows Nano Server para pruebas

Utilizando los nuevos perfiles de Azure para PowerShell

Hace unos pocos días se actualizaron las herramientas de PowerShell para Azure a su última versión, la 0.8.15. Entre las novedades se encuentra una que me acaba de resultar muy útil para gestionar múltiples suscripciones de Azure desde PowerShell: los perfiles.

Nota: Si quieres actualizar tu versión de las herramientas de PowerShell o instalarlas desde cero recuerda que te resultará más fácil utilizando el script de PowerShell que creé.

Si alguna vez has intentado ejecutar un script contra múltiples suscripciones seguro que te has encontrado con las dificultades de desplegar los recursos en la suscripción correcta. Un perfil es un contenedor para agrupar una serie de suscripciones para ser usado como forma de autentificación contra los extremos de Azure. Es posible seleccionar qué perfil queremos ejecutar en cada momento de forma general para la sesión actual de PowerShell o pasándolo a cada comando con el parámetro -Profile

Podemos crear un nuevo perfil en memoria con el comando New-AzureProfile. Soporta como métodos de autenticación Azure Active Directory o Certificados. En mi caso, la segunda opción era la que buscaba. Si queréis más detalles de cómo hacerlo con Active Directory podéis consultar la documentación con Get-Help New-AzureProfile

$profile = New-AzureProfile -SubscriptionId "GUIDIdentificadorSuscripcion" -Certificate "HuellaDelCertificado"

Dicho certificado lo habremos creado previamente siguiendo las instrucciones disponibles en la documentación y lo habremos subido a través del portal de Azure. La huella del certificado lo podremos obtener de forma fácil a través de Powershell

Get-Item "Cert:\CurrentUser\My\$HuellaDelCertificado"

Una vez que tengamos nuestro perfil creado, podremos seleccionarlo para utilizarlo en nuestra sesión actual con:

Select-AzureProfile -Profile $profile

Si queremos terminar con nuestro perfil en memoria y queremos volver a emplear el que está guardado en disco podemos hacerlo con:

Select-AzureProfile -Default

En el caso de que queramos ejecutar un comando en un perfil específico podemos utilizar el parámetro -Profile para evitar tener que cambiar con Select-AzureProfile al perfil que queremos y volver después a cambiar al perfil que estábamos usando anteriormente para continuar. Por ejemplo, creando una cuenta de almacenamiento en el perfil que tengo guardado en mi variable $produccion

New-AzureStorageAccount -StorageAccountName "myAzureStorageAccount" -Location "North Europe" -Type Standard_RAGRS -Profile $produccion

Espero que os salve de algún apuro ;)

Actualización del script para mantener tu módulo de PowerShell de Azure al día

Configurando un nuevo equipo me he dado cuenta de que el script que publiqué para mantener las herramientas de PowerShell para Azure al día tenía un fallo, si no tenías ya el módulo instalado no funcionaba. Así que nada, unos pequeños cambios y ahora también es posible instalarlas por primera vez con él. Para que sea más fácil está publicado en GitHub el código.

Cómo escribir nuestros scripts de PowerShell desde Visual Studio

A la hora de escribir nuestros scripts de PowerShell el ISE es generalmente nuestro editor preferido. También hay aquellos más castizos que con el bloc de notas tienen todo lo necesario pero un editor como ISE nos permite obtener extras como el autocompletado o la depuración haciéndonos más productivos. Lo mejor del ISE es que incluso permite ser extendido añadiendo funcionalidades nuevas como las que ofrece ISESteroids.

En este caso no quiero hablar sobre extensiones que se añaden al ISE para incorporar nuevas funcionalidades sino al revés, nuevos IDEs que añaden la capacidad de desarrollar scripts de PowerShell. En este caso estoy hablando de Visual Studio, uno de los entornos de desarrollo más conocidos por los desarrolladores, y en especial de las herramientas de PowerShell para Visual Studio. Si no has usado nunca Visual Studio, puedes descargar de forma gratuita la versión de comunidad .

¿Qué nos aportan las PowerShell Tools?

De forma nativa el soporte de Visual Studio para PowerShell es limitado, queda prácticamente reducido al resaltado de sintaxis. Sin embargo, esta extensión nos permite tener características extras en diferentes partes del editor como las siguientes.

  • El editor: gracias a la integración con IntelliSense es posible el autocompletado de código, tanto de cmdlets, funciones, variables o parámetros. Por otro lado, gracias al encapsulado de código es posible mostrar y ocultar los bloques de código o comentarios.
  • Editor de Visual Studio para PowerShell
    Editor de Visual Studio para PowerShell
  • El depurador: el objetivo de la extensión es mejorar el soporte a la depuración comparado con el ISE, para ello incorpora soporte para las ventanas de variables locales, puntos de ruptura y la pila de llamadas. Gracias a la ventana de variables locales es posible tener una vista global de lo que está sucediendo en este instante y los valores que tienen cada una de ellas; también permite expandir elementos complejos para ver sus propiedades como sucede con C# por ejemplo. Una de las diferencias respecto al ISE es la capacidad de modificar los valores desde este punto. Respecto a la ventana de puntos de ruptura, esta muestra la lista de puntos disponibles dentro del proyecto. A día de hoy no existe la opción de puntos condicionales. Finalmente, la ventana de la pila de llamadas permite ver de forma visual la situación actual de la pila gracias al comando Get-PSCallStack.
  • Depuración de PowerShell en Visual Studio
    Depuración de PowerShell en Visual Studio
  • Las pruebas unitarias: si queremos utilizar un enfoque de escritura de nuestro código basado en pruebas la extensión nos permite utilizar Pester para escribir nuestras pruebas unitarias y verificar que nuestras funciones se ejecutan de forma correcta.
  • Pester - Pruebas unitarias en PowerShell
    Pester – Pruebas unitarias en PowerShell

Si te ha convencido y lo quieres probar, la extensión es totalmente gratuita y se puede descargar desde la galería de extensiones de Visual Studio: PowerShell Tools for Visual Studio 2013