Exécutez un script bash après le démarrage de l'instance EC2

19

J'ai un script sur une instance EC2 qui démarre à distance une autre instance.

Une fois que cette instance est complètement chargée (démarrage terminé), je veux qu'elle exécute automatiquement un script bash, quelle serait la meilleure façon de le faire?

J'ai besoin que tout soit complètement démarré, fondamentalement le script bash exécute un script de conversion d'image (en utilisant ImageMagick et exécute la commande "wget" plusieurs fois)

Actuellement, le script se trouve ici:

/home/root/beginProcess.sh

Et je peux le démarrer manuellement en exécutant

bash beginProcess.sh

RHEL-6.2-Démarreur-EBS-i386

Il y a aussi un volume EBS attaché à cela, si cela aide, merci!

SSH This
la source

Réponses:

26

Je suggérerais simplement d'utiliser l' option de données utilisateur pour ec2-run-instances. Il vous permet de donner un script quelconque à la machine virtuelle qui sera exécutée au premier démarrage. Si vous utilisez ubuntu ou debian, vous pouvez utiliser cloud-init , ce qui met un peu de poli sur le processus. Si vous utilisez cloud-init, vous pouvez utiliser la [runcmd]section du fichier de configuration pour spécifier des commandes arbitraires à exécuter après le démarrage.

Merci à l'utilisateur de SF Eric Hammond pour la page des données utilisateur. Consultez son site - il contient une mine d'informations sur AWS.

Edit: Après la relecture, il n'est pas clair si vous vouliez exécuter une commande au démarrage initial ou à chaque démarrage. Les instructions ci-dessus s'appliquent uniquement au démarrage initial. Si vous souhaitez exécuter une commande à chaque démarrage, vous avez deux options: vous pouvez exécuter une commande via la @rebootdirective cron, ou bien vous pouvez ajouter le script à /etc/rc.local, qui sera exécuté à chaque démarrage du système.

EEAA
la source
1
Un grand merci pour la réponse, pour clarifier que je voulais qu'il fonctionne à chaque démarrage du système, /etc/rc.localfonctionne à merveille, acclamations
SSH Ce
9

Si vous utilisez une AMI sur laquelle le cloud-initpackage est installé (comme Amazon Linux ou Ubuntu), vous pouvez simplement passer le script bash (qui commence par #!) En tant que fichier de données utilisateur et il s'exécutera automatiquement à la fin de la processus de démarrage.

Par exemple, cela pourrait être aussi simple que:

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

Voici l'article où j'ai présenté le concept de script de données utilisateur, désormais disponible dans les principales AMI EC2 comme Amazon Linux et Ubuntu: http://alestic.com/2009/06/ec2-user-data-scripts

Malheureusement, il semble que vous souhaitiez utiliser un RHEL AMI. J'ai exécuté une copie de cela et je n'ai trouvé aucune référence à cloud-init ou à l'exécution de scripts de données utilisateur au premier démarrage, ni fait un test du même travail.

Je ne dis pas que vous devriez changer les distributions Linux juste pour cela, mais Amazon Linux est basé sur RHEL, donc cela pourrait fonctionner pour vous.

Voici un article que j'ai écrit qui pourrait vous aider à déboguer votre script de données utilisateur s'il ne fonctionne pas la première fois: http://alestic.com/2010/12/ec2-user-data-output

Eric Hammond
la source
Offtopic, mais merci d'avoir créé un outil aussi précieux. Trois hourras.
danieljimenez