Ejecute un script bash después de que se inicie la instancia EC2

19

Tengo un script en una instancia de EC2 que inicia remotamente otra instancia.

Una vez que esta instancia se haya cargado completamente (finalizado el arranque), quiero que ejecute automáticamente un script bash, ¿cuál sería la mejor manera de hacerlo?

Necesito que todo esté completamente iniciado, básicamente el script bash ejecuta un script de conversión de imagen (usando ImageMagick y ejecuta el comando "wget" varias veces)

Actualmente, el script se encuentra aquí:

/home/root/beginProcess.sh

Y puedo iniciarlo manualmente ejecutando

bash beginProcess.sh

RHEL-6.2-Starter-EBS-i386

También hay un volumen EBS adjunto a esto, si eso ayuda, ¡Gracias!

SSH This
fuente

Respuestas:

26

Sugeriría simplemente usar la opción de datos de usuario para ec2-run-instances. Le permite dar un script de algún tipo a la VM que se ejecutará en el primer arranque. Si está usando ubuntu o debian, puede usar cloud-init , lo que le da un buen brillo al proceso. Si usa cloud-init, puede usar la [runcmd]sección del archivo de configuración para especificar comandos arbitrarios para ejecutar después del arranque.

Gracias al usuario de SF Eric Hammond por la página de datos del usuario. Echa un vistazo a su sitio : tiene una gran cantidad de información sobre AWS.

Editar: después de volver a leer, no está claro si desea ejecutar un comando en el arranque inicial o en cada arranque. Las instrucciones anteriores solo se aplican al arranque inicial. Si desea ejecutar un comando en cada inicio, tiene un par de opciones: puede ejecutar un comando a través de la @rebootdirectiva cron o, alternativamente, puede agregar el script /etc/rc.local, que se ejecutará cada vez que se inicie el sistema.

EEAA
fuente
1
Impresionante gracias por la respuesta, para aclarar que quería que se ejecutara cada vez que se inicia el sistema, /etc/rc.localfunciona de maravilla, saludos
SSH This
9

Si estaba utilizando una AMI que tenía el cloud-initpaquete instalado (como Amazon Linux o Ubuntu), simplemente podría pasar el script bash (que comienza con #!) Como el archivo de datos del usuario y se ejecutaría automáticamente al final del proceso de arranque

Por ejemplo, podría ser tan simple como:

ec2-run-instances                             \
  --user-data-file /home/root/beginProcess.sh \
  --key $USER                                 \
  ami-XXXXXXXX

Aquí está el artículo donde presenté el concepto de script de datos de usuario, ahora disponible en las principales AMI de EC2 como Amazon Linux y Ubuntu: http://alestic.com/2009/06/ec2-user-data-scripts

Desafortunadamente, parece que quieres usar un RHEL AMI. Ejecuté una copia de eso y no pude encontrar ninguna referencia a cloud-init o ejecutar scripts de datos de usuario en el primer arranque, ni hice una prueba del mismo trabajo.

No estoy diciendo que deba cambiar las distribuciones de Linux solo por esto, pero Amazon Linux se basa en RHEL, por lo que eso podría funcionar para usted.

Aquí hay un artículo que escribí que podría ayudarlo a depurar su script de datos de usuario si no funciona la primera vez: http://alestic.com/2010/12/ec2-user-data-output

Eric Hammond
fuente
Offtopic, pero gracias por crear un invaluable también. Tres hurras.
danieljimenez