IaC: Automatización de Start/Stop en instancias EC2

Published: (May 7, 2026 at 07:30 AM EDT)
3 min read
Source: Dev.to

Source: Dev.to

Cover image for IaC: Automatización de Start/Stop en instancias EC2

Quizás te ha pasado que quieres trabajar sobre una instancia EC2 de desarrollo, la dejaste encendida más tiempo del que deberías y ahí es cuando el bolsillo comienza a doler, en especial si quieres experimentar con los tipos de instancia más costosos.

También puede suceder que necesites una instancia para un caso concreto; la configuras mediante la consola de AWS y luego vienen los dolores de cabeza de eliminar todo manualmente. Le encuentro muchísimas ventajas a la infraestructura como código, y este me parece un buen caso de uso porque es bastante frecuente y replicable.

Este Stack está pensado para entornos de desarrollo/pruebas y tiene mucha flexibilidad en cuanto al tipo de instancia, almacenamiento, el aislamiento o no de la instancia, horas de apagado y encendido, timezone y, si falta algo, siempre es posible realizar modificaciones necesarias y desplegar.

Architecture Stack IaC for EC2 Scheduled

¿Qué se necesita?

  • Cuenta de AWS
  • Node.js + npm
  • AWS CLI instalado
  • Credenciales configuradas (aws configure)
  • Clonar el repositorio
  • Bootstrap del CDK en tu cuenta/región (si no lo tienes configurado)

Una vez cumplidos los prerrequisitos y habiendo instalado las dependencias de npm del proyecto, se puede ejecutar el comando más básico:

cdk deploy

Este comando despliega los valores por defecto (todos pensando en gastos mínimos de prueba, ej. instancia t2.micro, rootVolume 20 GB, etc.).

Por defecto, la instancia se encuentra en estado Running y las horas de trabajo están agendadas de lunes a viernes de 9 am a 7 pm.

Para conectarse a la instancia pueden tomar el ID y ejecutar:

aws ssm start-session --target 

Qué es configurable mediante parámetros

  • InstanceType: desde una t2.micro (capa gratuita) hasta instancias de cómputo intensivo.
  • MachineImage: por defecto usa Amazon Linux 2023, pero permite inyectar cualquier AMI ID específico.
  • RootVolumeSize / DataVolumeSize: manejo de almacenamiento por separado (sistema y datos).
  • ScheduleStartCron / ScheduleStopCron: sintaxis estándar de cron de AWS. Por defecto, horario de oficina (9 am‑7 pm).
  • Zona horaria: preconfigurada para America/Argentina/Buenos_Aires.
  • AssignPublicIp: por defecto false; la instancia vive en una subred privada.

Ejemplo de despliegue con parámetros personalizados

cdk deploy \
  -c instanceType=r6i.8xlarge \
  -c rootVolumeSize=50 \
  -c dataVolumeSize=500 \
  -c scheduleStartCron="cron(0 13 ? * MON-FRI *)" \
  -c scheduleStopCron="cron(0 21 ? * MON-FRI *)" \
  -c project=big-data-analytics \
  -c environment=staging

Este comando despliega:

  • Una instancia de tipo r6i.8xlarge.
  • Volumen EBS rootVolume de 50 GB.
  • Volumen EBS dataVolumeSize de 500 GB.
  • Inicio programado de lunes a viernes a las 13 h (1 pm) ART.
  • Detención programada de lunes a viernes a las 21 h (9 pm) ART.
  • Tags para trazabilidad y manejo de costos: project=big-data-analytics y environment=staging.

Consideraciones

  • EBS Volume Root: permite apagado y encendido automáticos seguros, sin pérdida de información.
  • Delete on Termination: si eliminas el Stack, se eliminan también los volúmenes EBS. Evalúa si necesitas que persistan después de borrar el Stack.
  • Timezone: la zona horaria por defecto de las reglas de EventBridge Scheduler es America/Argentina/Buenos_Aires (si no se pasa otro parámetro).

Gracias por haber leído hasta aquí. ¡Ánimense a probar!

Todo feedback es bienvenido. Encuentra el código en el repositorio de GitHub.

0 views
Back to Blog

Related posts

Read more »