¿Podemos detener una instancia EC2 del servidor de Windows de AWS de un entorno de desarrollo cuando no hay actividad en él, digamos después de 2 horas de inactividad? Tengo problemas para identificar si algún usuario está conectado al servidor virtualmente.
Puedo iniciar/detener fácilmente el EC2 en un momento fijo, mediante programación, pero para reducir el costo de mi servidor, trato de detener el EC2 cuando no se está utilizando.
Mi intención (o caso de uso) es : si ningún usuario está usando EC2 hasta un período de tiempo específico, se detendrá automáticamente. Los desarrolladores pueden reiniciarlo cuando sea necesario.
La solución más sencilla probablemente sería configurar una Alerta con CloudWatch.
Lea la documentación, que básicamente describe perfectamente su caso de uso:
Puede crear una alarma que detenga una instancia de Amazon EC2 cuando se alcance un cierto umbral
Una condición podría ser la utilización promedio de la CPU, por ejemplo, la utilización de la CPU está por debajo de cierto punto (lo que probablemente se correlacione con que no haya usuarios registrados/ningún desarrollador que realmente utilice la máquina).
Esta no es una tarea fácil.
El servicio Amazon EC2 proporciona una computadora virtual que tiene RAM, CPU y disco. Puede ver la cantidad de actividad en la CPU, el tráfico de red y el acceso al disco, pero no puede ver el sistema operativo .
Entonces, el problema se convierte en cómo detectar la 'inactividad' . Esto realmente se reduce al sistema operativo y a tomar algunas decisiones difíciles. Por ejemplo, la pantalla de la computadora de su hogar se apaga después de un tiempo definido sin que se use el mouse o el teclado, pero el sistema operativo sigue activo en segundo plano. Si el sistema ejecuta una aplicación como un servidor web y no hay solicitudes web, es difícil saber si está "inactivo" porque no hay solicitudes o "activo" porque el servidor web se está ejecutando.
En pocas palabras: no hay una función lista para usar para hacer esto. Debería encontrar su propia definición de 'inactividad' y luego activar un apagado en el sistema operativo.
Si desea hacerlo a través de un programa, esto podría ayudar: Detener automáticamente las instancias EC2 cuando terminan una tarea - DEV Community
ACTUALIZACIÓN: Ya no se necesitan Lambda, vea la respuesta de tpschmidt.
Cree una Lambda para apagar el EC2 que se activará con una alarma de Cloud Watch cuando, por ejemplo, la CPU esté por debajo del 20 % de promedio durante una hora. Esto está bien cuando está codificando, ya que usará más del 20%, y cuando tiene un descanso de más de una hora, es cuando desea que se apague.
Asegúrese de configurar el guardado automático en su IDE.
Ejemplo Python Lambda:
import boto3 region = 'eu-west-3' instances = ['i-05be5c0c4039881ed'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): #TODO getInstanceIDFromCloudWatch = event["instanceid"] ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))Ref: https://www.howtoforge.com/aws-lambda-function-to-start-and-stop-ec2-instance/
En la consola de AWS:
Vaya a EC2, seleccione la instancia de EC2 y copie la ID de la instancia
Vaya a Cloud Watch y seleccione Métricas
En Espacios de nombres de AWS, haga clic en EC2
Pegue el ID de instancia para encontrarlo
Seleccione EC2 > Métricas por instancia
Elija la primera utilización de CPU métrica
Seleccione la segunda pestaña llamada Graphed Metric
Haga clic en el ícono de Campana debajo de Acciones
Establezca un umbral, también esta es la parte difícil, deje el valor predeterminado de Estadística: promedio durante 1 hora
Establezca la Condición menor/igual y establezca el valor en 20 % (deberá usar la máquina más de 1/5 de la hora con más de 20 % de CPU, de lo contrario, se apagará).
A continuación, cree una alarma, configure una notificación si lo desea o elimínela
Una vez creada la alarma
En Cloud Watch, seleccione Evento > Reglas
Agregar una regla
Seleccione EC2 como el nombre del servicio y todos los eventos
Haga clic en Destino y seleccione su Lambda.
Cuando suene la alarma, Lambda apagará el ID de la instancia.