Ejecutando crontab en el grupo de escalado automático de AWS

Ejecutando crontab en el grupo de escalado automático de AWS

Tengo la siguiente configuración: 1 servidor con la aplicación X, que ejecuta un crontab una vez por hora. El crontab se conecta a la base de datos, ejecuta algunos cálculos pesados, exporta datos a un archivo de datos especial y reinicia la aplicación. La exportación puede durar entre 10 y 40 minutos.

Yo quiero:

  • Mueva ese servidor a AWS y utilice el grupo de escalado automático.

  • El crontab se ejecuta en un solo servidor, realiza el cálculo, exporta los datos y de alguna manera los sincroniza con todos los demás servidores activos.

  • Todos los servidores deberían detectar automáticamente los nuevos datos y reiniciarse de forma segura (no durante la sincronización, por ejemplo).

  • Los nuevos servidores que se inician desde los grupos de escalado automático muestran automáticamente la recuperación de los archivos de datos al inicio antes de iniciar la aplicación real.

No tengo una idea "simple" sobre cómo hacerlo ni ninguna solución específica de AWS.

Esta es mi idea:

  • Ejecute un servidor fuera del grupo de escalado automático. Ejecute crontab solo en ese servidor. Todos los archivos de datos se cargarán en S3.

  • Todos los servidores de escalado automático tendrán un crontab que se ejecuta cada minuto y busca un archivo único "please_download_me_TIMESTAMP".

  • Una vez descargados los archivos, el script reiniciará el servicio.

  • Si se inicia un nuevo servidor, al iniciarlo recuperará automáticamente todos los archivos de S3.

¿Creerías que esto funcionaría?

Respuesta1

Este es un problema común en AWS EC2 y se ha resuelto. Verhttps://gist.github.com/kixorz/5209217para ver un ejemplo con implementación.

Respuesta2

Reconocer esto es una vieja pregunta de 2015, rechazada por Joe, así que también podría responderla.

Si el trabajo es una vez cada hora y dura entre 10 y 40 minutos, de todos modos pagarás por una hora completa. No tiene sentido iniciar y cerrar servidores, simplemente dejar un servidor en ejecución.

Si fuera con menos frecuencia, podría tener un evento cronometrado que coloque un mensaje en una cola SQS; esto podría hacerse mediante un t2.nano o tal vez haya una forma más económica de hacerlo con los servicios de Amazon: ¿Lambda? Escala automática según el tamaño de la cola. Cuando hay datos para procesar, se crea un servidor, procesa los datos, los mueve a donde sea necesario y luego se apaga.

Otra forma de hacerlo sería el escalado basado en el tiempo, pero nuevamente solo si fuera con menos frecuencia que cada hora.

información relacionada