Skip to content

Amazon WorkSpaces: Automating Lifecycle Management & Cost Optimizer

Notifications You must be signed in to change notification settings

cbecerrae/amazon-workspaces-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Amazon WorkSpaces: Automating Lifecycle Management & Cost Optimizer

image

Introducción

Gestionar entornos de escritorios virtuales de manera eficiente es crucial para las empresas modernas. Amazon WorkSpaces proporciona una solución segura y rentable para ofrecer escritorios virtuales, permitiendo a los usuarios acceder a sus espacios de trabajo desde cualquier lugar. Este proyecto se centra en automatizar la gestión del ciclo de vida de los WorkSpaces y optimizar sus costos, asegurando el uso eficiente de los recursos y reduciendo la carga administrativa.

¿Qué es Amazon WorkSpaces?

Amazon WorkSpaces es una solución completamente gestionada de Escritorio como Servicio (DaaS) que proporciona a los usuarios un escritorio virtual seguro en la nube. Permite a las empresas aprovisionar escritorios con Windows o Linux rápidamente y escalarlos según sus necesidades. Con Amazon WorkSpaces, los usuarios pueden acceder a sus entornos de escritorio desde diversos dispositivos, garantizando productividad y flexibilidad.

Casos de Uso

Amazon WorkSpaces es ideal para una fuerza laboral remota. Permite a los empleados acceder de forma segura a sus entornos de trabajo desde cualquier lugar, utilizando diversos dispositivos. Esta solución es especialmente valiosa en el contexto actual, donde el trabajo remoto se ha convertido en una norma. Los empleados pueden llevar sus propios dispositivos y trabajar de manera eficiente sin comprometer la seguridad de los datos corporativos. Además, facilita la provisión y desprovisión rápida de escritorios para contratistas y trabajadores temporales, asegurando que solo los usuarios activos tengan acceso a los recursos necesarios. Esto no solo mejora la seguridad, sino que también optimiza los costos operativos.

Acerca del Proyecto

Este proyecto tiene como objetivo mejorar la gestión y la eficiencia de costos de Amazon WorkSpaces a través de la automatización. La automatización y optimización de WorkSpaces no solo reduce la carga administrativa, sino que también garantiza que los recursos se utilicen de manera eficiente, contribuyendo a una reducción significativa de costos. Además, al integrar visualizaciones detalladas de métricas de uso mediante Amazon QuickSight, se proporcionan insights valiosos que permiten una mejor toma de decisiones y una gestión proactiva de los recursos.

El desarrollo del proyecto se encuentra dividido en 4 partes:

  • Infraestructura Básica: Crear los recursos básicos iniciales que forman parte de los prerequisitos para la administración de WorkSpaces.
  • Lifecycle Management: Automatizar el aprovisionamiento y eliminación de WorkSpaces de acuerdo a la presencia de usuarios en Active Directory.
  • Cost Optimizer: Mensualmente ejecutar actualizaciones para convertir los WorkSpaces al Running Mode más eficiente.
  • Visualización de Reportes: Generar un reporte cada hora con métricas de WorkSpaces para visualizar las estadísticas en QuickSight.

Diagrama de Arquitectura

image

1. Infraestructura Básica

Antes de poder gestionar el ciclo de vida u optimizar los costos de los WorkSpaces de forma automática, se deben crear algunos recursos fijos que forman parte de lo requisitos para administrar WorkSpaces. Entre ellos se encuentra un directorio de AWS Directory Service, una instancia EC2 que actúe como Domain Controller para administrar el directorio, y de manera opcional, un File System para que los usuarios de los WorkSpaces puedan utilizar carpetas compartidas.

1.1. Crear el AWS Microsoft Managed AD

En AWS Directory Service, crea un directorio de tipo AWS Managed Microsoft AD y establece una contraseña para el usuario administrador del directorio.

image

1.2. Crear el Domain Controller

Despliega una instancia Amazon EC2 para administrar to AWS Microsoft Managed AD Active Directory. Antes de lanzar la instancia, cree un rol de IAM que permita unir instacias de Windows al dominio de AWS Managed Microsoft AD de acuerdo a la Documentación de Amazon.

Al momento de lanzar la instancia seleccione el rol de IAM creado, cree un Key Pair para conectarse a la instancia, y configure otros parámetros de acuerdo a la Documentación de Amazon proporcionada en el párrafo anterior.

image

Una vez lanzada la instancia, una la instancia al Security Group de domain controllers, el cual está configurado para permitir la administración del directorio desde la instancia EC2 y fue generado cuando se creó el directorio. Asimismo, cree un Security Group adicional que permita al tráfico RDP desde su IP, e incluya a la instancia en dicho grupo de seguridad.

Conéctese a la instancia utilizando RDP, inicie la aplicación Server Manager de Windows Server como el usuario Admin e instalé las herramientas de Active Directory en la instancia EC2 de acuerdo a la Documentación de Amazon proporcionada líneas arriba.

Ahora todo está listo para administrar a los Active Directory Users en el AWS Managed Microsoft AD. Proceda a crear una Organizational Unit (OU) llamada WorkSpaces y cree un usuario dentro de dicha OU.

image

1.3. Configurar Amazon WorkSpaces

Registre el directorio en Amazon WorkSpaces. Este registro creará un Registration Code y también creará un Security Group que controlará el tráfico de todos los WorkSpace members.

Despliegue un WorkSpace para el usuario creado, con un bundle de tipo Standard with Windows 10 (Server 2022 based) con un Running Mode de AutoStop. El WorkSpace tardará un momento en estar disponible (Available).

image

Descargue el cliente de Amazon WorkSpaces y conéctese al WorkSpace utilizando el Registration code y las credenciales del Active Directory User creado.

image

Ahora ya tenemos un escritorio virtual de Amazon WorkSpaces disponible para un usuario, desde donde dicho usuario podrá realizar sus tareas. Sin embargo, deberíamos de tener algún tipo de almacenamiento compartido para que los usuarios de WorkSpaces puedan compartir archivos.

image

1.4. Crear un FSx File System

Cree un File System de Amazon FSx for Windows File Server para el directorio. Una vez que el File System este disponible (Available) añada a su Network interface a un nuevo Security Group que permita el tráfico entrante desde el Security Group de los WorkSpace members.

image

Dentro del WorkSpace, siga la instrucciones de FSx para montar el File System en el WorkSpace, cree una carpeta compartida (Shared Folder) dentro del File System y añade un acceso directo en el escritorio.

image

Ahora ya tenemos una File System con carpetas compartidas donde los usuarios de WorkSpaces podrán compartir archivos.

2. Lifecycle Management

Esta feature permitirá automáticamente provisionar WorkSpaces cuando se creen nuevos usuarios en Active Directory y enviar correos a estos usuarios con las instrucciones para que puedan iniciar sesión en sus WorkSpaces. Asimismo, eliminará WorkSpaces en caso haya usuarios que ya no figuren en Active Directory.

2.1. Crear la Maintenance Window de Systems Manager

En la plantilla de CloudFormation lifecycle-management.yaml se encuentra el código para crear una Maintenance Window de Systems Manager que ejecute una Task cada 5 minutos. Esta task ingresará a la instancia Command Host, ejecutará comandos de PowerShell que obtendrá la lista actualizada de Active Directory Users y la almacenará en un bucket de S3.

En la plantilla de CloudFormation también se asignaron los permisos y políticas necesarias de Systems Manager a la Maintenance Window y a la Task.

image

2.2. Configurar un Bucket de S3

En la plantilla de CloudFormation lifecycle-management.yaml se encuentra el código para crear un bucket de S3 donde cada 5 minutos se actualizará la lista de Active Directory Users.

En la plantilla de CloudFormation también se asignó al bucket de S3 una Bucket Policy que permita acceso de lectura y escritura a dicho bucket desde la instancia EC2 Command Host.

image

2.3. Crear la Función Lambda

En la plantilla de CloudFormation lifecycle-management.yaml se encuentra el código para crear una función Lambda que se ejecutará cada vez que se actualize la lista CSV en el bucket de S3.

Esta función obtendrá la lista de WorkSpaces existente y la comparará con la lista de Active Directory Users.

En caso haya un usuario en Active Directory que no tenga un WorkSpace, la función Lambda provisionará un WorkSpace y enviará las instrucciones de inicio de sesión al usuario en un email a través de SES. Cabe mencionar que la función Lambda solo creará el WorkSpace si el Active Directory User cuenta con un email asignado.

Por otro lado, en caso exista un WorkSpace para un usuario que ya no existe en Active Directory, la función Lambda eliminará el WorkSpace.

En la plantilla de CloudFormation también se asignaron los permisos necesarios para que la función Lambda pueda generar logs en CloudWatch, crear, eliminar y describir WorkSpaces, leer objetos del bucket de S3 y enviar emails mediante SES.

image

2.4. Configurar Amazon Simple Email Service (SES)

En Amazon SES, crea al menos un par de Identities, un correo que será el remitente de los emails, y otro correo que será el destinataroio de los emails. Ambas Identities deberán ser verificadas.

image

La verificación previa de Identities se debe a que nos encontramos en un sandbox de SES. En un entorno de producción, bastará con que registremos nuestro dominio de correo del cual somos dueños y podremos enviar correos ilimitados sin necesidad de verificar destinatarios.

2.5. Verificar la Funcionalidad

Crea el stack de recursos utilizando la plantilla de CloudFormation lifecycle-management.yaml, para ello deberás ingresar valores para los parámetros especificados en la sección Parameters. En este caso, yo he dejado los valores apropiados para este proyecto en los campos Default de cada Parameter.

image

Una vez desplegada la feature mediante CloudFormation, crea una nuevo usuario de Active Directory, para demostrar como la Maintenance Windows Task generará la lista de Active Directory Users en la máquina Command Host, la subirá al Bucket de S3, la función Lambda procederá a provisionar el WorkSpace y a enviar un email al usuario con instrucciones para el inicio de sesión.

image

image

image

image

image

image

3. Cost Optimizer

El modo de ejecución (Running Mode) AutoStop detiene el WorkSpace automáticamente después de una cierto tiempo de inactividad lo cual permite una facturación por horas. Mientras que el Running Mode AlwaysOn ejecuta el WorkSpace 24/7 sin paras y tiene una facturación fija al mes.

Para determinar cuando conviene utilizar cual Running Mode, se calculó un umbral de 80 horas a partir de las tarifas actuales de WorkSpaces, es decir, a partir de 80 horas, la facturación fija de AlwaysOn es más eficiente, y para menos de 80 horas, la facturación variable de AutoStop es más económica.

La siguiente feature evaluará mensualmente la utilización de cada WorkSpace y convertirá los WorkSpaces al Running Mode más eficiente.

3.1. Configurar el SNS Topic

Crea un SNS Topic donde publicarás el reporte mensual de los cambios en el Running Mode de WorkSpaces. Suscribe un correo electrónico al topic y confirma la suscripción.

image

3.2. Crear la Función Lambda

En la plantilla de CloudFormation cost-optimizer.yaml se encuentra el código para crear una función Lambda que se ejecutará al final de cada mes, utilizará métricas de CloudWatch para obtener la utilización de los WorkSpaces de los últimos 30 días, y dependiendo de la si la utilización de cada WorkSpace supera o no el umbral de utilización, se modificará el WorkSpace para que utilice el Running Mode más eficiente.

La función Lambda también enviará un reporte al SNS Topic especificando los WorkSpaces que se modificaron al Running Mode AutoStop o AlwaysOn, o también si es que no se modificaron Running Modes este mes.

En la plantilla de CloudFormation también se asignaron los permisos necesarios para que la función Lambda pueda generar logs en CloudWatch, obtener métricas de CloudWatch, modificar y describir WorkSpaces y publicar notificaciones hacia el SNS Topic.

image

3.3. Verificar la Funcionalidad

Crea el stack de recursos utilizando la plantilla de CloudFormation cost-optimizer.yaml, para ello deberás ingresar valores para los parámetros especificados en la sección Parameters. En este caso, yo he dejado los valores apropiados para este proyecto en los campos Default de cada Parameter.

image

Una vez desplegada la feature mediante CloudFormation, dado que la función Lambda está diseñada para ejecutarse recién a fin de mes, haremos un test manual, ejecutaremos la función Lambda y recibiremos un email con el reporte de que no se modificaron Running Modes, esto debido a que nuestros WorkSpaces de prueba no superan el umbral de 80 de horas de utilización al mes.

image

image

4. Visualización de Reportes

Si bien la feature Cost Optimizer va a optimizar los WorkSpaces al Running Mode más eficiente, sería útil poder visualizar otras métricas y estadísticas sobre los WorkSpaces existentes en un Dashboard de QuickSight.

4.1. Crear el Bucket de S3

En la plantilla de CloudFormation report-generator.yaml se encuentra el código para crear un bucket de S3 donde a cada hora se actualizará un reporte CSV con métricas y estadísticas sobre los WorkSpaces existentes.

image

4.2. Crear la Función Lambda

En la plantilla de CloudFormation report-generator.yaml se encuentra el código para crear una función Lambda que se ejecutará cada hora, utilizará métricas de CloudWatch para obtener la utilización de los WorkSpaces de los últimos 30 días, la cantidad de WorkSpaces que se encuentran Available o Stopped, y la cantidad de WorkSpaces que se encuentran en el Running Mode AutoStop o AlwaysOn. Finalmente, publicará estás métricas en un archivo CSV en el bucket de S3.

En la plantilla de CloudFormation también se asignaron los permisos necesarios para que la función Lambda pueda generar logs en CloudWatch, obtener métricas de CloudWatch, describir WorkSpaces, leer y subir objetos al bucket de S3.

image

4.3. Configurar el Dashboard de QuickSight

En QuickSight crea un nuevo dataset utilizando S3 como fuente de datos (data source), sube el archivo manifest.json requerido e ingresa la URL donde se encontrará el reporte CSV en el bucket de S3. Asimismo, durante la prueba siguiente, deberá también de otorgar acceso a QuickSight para que pueda acceder al contenido del bucket de S3.

image

4.4. Verificar la Funcionalidad

Crea el stack de recursos utilizando la plantilla de CloudFormation report-generator.yaml, una vez desplegada la feature mediante CloudFormation, dado que la función Lambda está diseñada para ejecutarse una vez por hora, haremos un test manual.

image

Ejecutaremos la función Lambda, podrás visualizar que el archivo CSV correspondiente al reporte ya se encuentra en el bucket de S3. Ingresa a QuickSight, crea un Dashboard visual con estadísticas de los datos utilizando la data extraída de S3 y publica el Dashboard.

image

image

image

El Dashboard nos muestra información sobre los WorkSpaces existentes y sus usuarios, los cuales han tenido actividad durante 4 horas y 1 hora respectivamente, asimismo nos muestra reportes respecto al estado y Running Mode de los WorkSpaces, dicha información puede ser validada con el listado de WorkSpaces del AWS Management Console.

image

Conclusiones

Amazon Elastic Compute Cloud (EC2)

EC2 permitió proporcionar la capacidad de computación necesaria para desplegar una instancia de Windows Server utilizada como controlador de dominio. Su escalabilidad y flexibilidad son ideales para diversas aplicaciones en la nube.

AWS Directory Service

AWS Managed Microsoft AD permitió facilitar la gestión de usuarios y políticas de grupo. Su integración con otros servicios de AWS simplifica la administración de identidades y recursos en la nube.

Amazon WorkSpaces

WorkSpaces permitió ofrecer escritorios virtuales seguros y gestionados, permitiendo el trabajo remoto y optimizando la gestión de recursos mediante la automatización del aprovisionamiento y desprovisionamiento.

Amazon FSx for Windows File Server

FSx permitió proporcionar un sistema de archivos compartido de alto rendimiento y disponibilidad, facilitando la colaboración entre usuarios de WorkSpaces.

AWS Systems Manager

Systems Manager permitió automatizar la sincronización de usuarios de Active Directory y la gestión del ciclo de vida de WorkSpaces, mejorando la eficiencia operativa.

Amazon Simple Storage Service (S3)

S3 permitió almacenar listas de usuarios y reportes de métricas, ofreciendo un almacenamiento escalable y seguro para datos críticos del proyecto.

AWS Lambda

Lambda permitió automatizar la creación, eliminación y optimización de WorkSpaces sin necesidad de gestionar servidores, proporcionando una solución escalable y eficiente.

Amazon Simple Email Service (SES)

SES permitió enviar correos electrónicos con instrucciones de inicio de sesión, asegurando una comunicación efectiva y confiable con los usuarios de WorkSpaces.

Amazon CloudWatch

CloudWatch permitió monitorear métricas de uso de WorkSpaces, permitiendo una optimización eficiente de recursos y proporcionando visibilidad en tiempo real.

Amazon Simple Notification Service (SNS)

SNS permitió enviar notificaciones sobre la optimización de costos de WorkSpaces, facilitando una comunicación rápida y efectiva con los administradores.

Amazon QuickSight

QuickSight permitió visualizar métricas y estadísticas sobre el uso de WorkSpaces, proporcionando insights valiosos para la toma de decisiones y la gestión proactiva de recursos.

About

Amazon WorkSpaces: Automating Lifecycle Management & Cost Optimizer

Resources

Stars

Watchers

Forks