Domando a Windows en la Nube 🌤

JJ Ruescas
4 min readNov 12, 2018

--

Lidiar con tecnologías Windows siempre fue un dolor de cabeza. En este breve artículo, veremos como domar a la bestia combinando Amazon AWS, Terraform, Powershell DSC y Chocolatey.

Encontrarás el código del ejemplo que desarrollaremos en este repositorio en GitHub.

¡Empecemos!

El resultado

Iniciemos por describir el resultado para luego explicar las partes de este proyecto.

Una vez que tengas una cuenta en AWS, que reemplaces los valores de AWS_ACCESS_KEY y AWS_SECRET_KEY como se explican en el proyecto, y que tengas Terraform instalado, bastará con ejecutar estos comandos para tener tu instancia de Windows provisionada y configurada:

> terraform init
> terraform apply

Dependiendo del tamaño de instancia que escogiste (por ejemplo “t2.micro” o “t2.large”), el proceso demorará entre 10 minutos a un par de horas. El resultado será algo similar a esto.

Accede con tu navegador favorito a la dirección http://XXXX con la IP Pública aleatoria que se te asignó. El resultado será la página web por defecto de Internet Information Server (IIS), lo cual comprueba que tu instancia fue provisionada y configurada correctamente.

La Explicación

Ahora, es momento de ver el proyecto en detalle. Para esto dejaremos de lado explicaciones referidas al Networking (VPC, Security Groups, Route Tables, etc.) y nos enfocaremos en la Instancia EC2 y la configuración de Windows.

Variables

terraform.tfvars es el archivo donde configuramos las variables requeridas para acceder a AWS, la configuración de la Instancia EC2 y las credenciales de Usuario Administrador que se crearán en Windows.

Creación de la Instancia Windows EC2

El codigo necesario para aprovisionar la instancia de Windows EC2 está compuesta por la configuración de AMI, el tipo de Instancia EC2, VPC Subnet, Security Group y las Tags de la Instancia.

Creación de Usuario Administrador en Windows

Configuramos un Usuario Administrador para poder acceder remotamente a la instancia EC2 de Windows una vez que esta sea creada. Para esto, es necesario conectarnos a la instancia utilizando WinRM, tras lo cual se ejecuta el código en <powershell>…</powershell> para la creación del usuario administrador con los valores definidos en las variables del proyecto.

Configuración del Servidor Web IIS.

Antes de configurar el Servidor Web IIS, es necesario enviar los scripts de Powershell DSC a la instancia EC2 recientemente creada a través del provisioner “file” de Terraform y luego invocar la ejecución de estos scripts a través del provisioner “remote-exec”.

La ejecución compilará y configurará el Servidor Web IIS en función a lo descrito en el archivo de Powershell DSC llamado DSC-WebServer.ps1.

Instalación de Chocolatey y software adicional

Para instalar software adicional en la Instancia Windows EC2 también es necesario enviar los files de configuración y ejecutarlo remotamente como en el paso previo.

El archivo configuration.ps1 es enviado y ejecutado como se describió en el paso previo. Este archivo instala Chocolatey, tras lo cual utiliza el comando “choco” para instalar software como git, Google Chrome y Notepad++.

Obtención del AMI más reciente de Windows

Generalmente es necesario utilizar el AMI más reciente de cualquier sistema operativo, pero tener que buscar el AMI ID (por ejemplo “ami-f1213421”) y reemplazarlo continuamente nos obliga a tener un proceso manual. Para evitar esa situación, utilizamos el datasource “aws_ami” de Terraform y así dejamos que este sea quien filtra y encuentra el AMI ID que deseamos utilizar.

¡Eso es todo! Ahora conoces como crear una instancia EC2 de Windows, crear un Usuario Administrador en esta, configurarla como un Servidor Web e instalarle software adicional.

Espero que este post te haya sido útil si lidias específicamente con Windows o incluso si recién empiezas tu jornada utilizando Infraestructura como Código.

Keep on learning….and taming your tools!

Como siempre, por favor déjame tu feedback en un comentario en este artículo. ¿Te fue útil?¿Qué aumentarías o quitarías?¿Otras sugerencias? También puedes enviarme un tweet a @jjruescas1 y colocar #DevOps al final para poder encontrarlo.🙂

¿Deseas conocer más sobre DevOps? No olvides revisar el curso DevOps — Las Artes Marciales del Softwareen Udemy.com.

--

--