Esegui uno script bash dopo l'avvio dell'istanza EC2


19

Ho uno script su un'istanza EC2 che avvia in remoto un'altra istanza.

Una volta che questa istanza è stata caricata completamente (avvio completato), voglio che esegua automaticamente uno script bash, quale sarebbe il modo migliore per farlo?

Ho bisogno di tutto per essere avviato completamente, in pratica lo script bash esegue uno script di conversione delle immagini (utilizzando ImageMagick ed esegue il comando "wget" alcune volte)

Attualmente, lo script si trova qui:

/home/root/beginProcess.sh

E posso avviarlo manualmente eseguendolo

bash beginProcess.sh

RHEL-6.2-Starter-EBS-i386

Inoltre c'è un volume EBS allegato a questo, se questo aiuta, grazie!

Risposte:


26

Suggerirei di usare l' opzione user-data per ec2-run-instances. Ti permette di dare uno script di qualche tipo alla VM che verrà eseguita al primo avvio. Se stai usando Ubuntu o Debian, puoi usare cloud-init , che mette un po 'di lucentezza nel processo. Se si utilizza cloud-init, è possibile utilizzare la [runcmd]sezione del file di configurazione per specificare comandi arbitrari da eseguire dopo l'avvio.

Grazie all'utente SF Eric Hammond per la pagina dei dati dell'utente. Dai un'occhiata al suo sito : contiene molte informazioni su AWS.

Modifica: dopo la rilettura, non è chiaro se si desidera eseguire un comando all'avvio iniziale o ad ogni avvio. Le istruzioni precedenti si applicano solo all'avvio iniziale. Se vuoi eseguire un comando ad ogni avvio, hai un paio di opzioni: puoi eseguire un comando tramite la @rebootdirettiva cron, o in alternativa puoi aggiungere lo script a /etc/rc.local, che verrà eseguito ogni volta che il sistema si avvia.


1
Fantastico grazie per la risposta, per chiarire che volevo che funzionasse ogni volta che il sistema si avvia, /etc/rc.localfunziona meravigliosamente, evviva
SSH Questo

9

Se si stesse utilizzando un AMI su cui era cloud-initinstallato il pacchetto (come Amazon Linux o Ubuntu), si potrebbe semplicemente passare lo script bash (che inizia con #!) Come file di dati utente e verrà eseguito automaticamente alla fine del processo di avvio.

Ad esempio, potrebbe essere semplice come:

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

Ecco l'articolo in cui ho introdotto il concetto di script dati utente, ora disponibile nelle principali AMI EC2 come Amazon Linux e Ubuntu: http://alestic.com/2009/06/ec2-user-data-scripts

Sfortunatamente, sembra che tu voglia usare un AMI RHEL. Ne ho eseguito una copia e al primo avvio non sono riuscito a trovare riferimenti a cloud-init o esecuzione di script di dati utente, né ho fatto un test dello stesso lavoro.

Non sto dicendo che dovresti cambiare le distro Linux solo per questo, ma Amazon Linux si basa su RHEL, quindi potrebbe funzionare per te.

Ecco un articolo che ho scritto che potrebbe aiutarti a eseguire il debug dello script dei dati utente se non funziona la prima volta: http://alestic.com/2010/12/ec2-user-data-output


Offtopico, ma grazie per aver creato anche un valore inestimabile. Tre saluti.
danieljimenez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.