2015-04-01 5 views
0

J'ai un groupe AutoScale, qui est lancé lorsqu'une alarme CloudWatch se déclenche, lorsqu'un message est dans une file d'attente SQS. Mais je ne souhaite pas créer une autre alarme CloudWatch qui diminue le nombre d'instances dans le groupe AutoScale car la tâche effectuée dans cette instance peut prendre plus de temps que les paramètres d'alarme. Donc, la façon dont j'ai essayé de faire était, une fois l'instance créée, les données utilisateur que j'ai passées en fichier ".sh", exécute la tâche que je veux, attend jusqu'à ce qu'elle se termine, copie le fichier en S3 et termine l'instance.Copier les fichiers journaux dans S3 et arrêter l'instance AutoScale via les données utilisateur

Malheureusement, le fichier arrive dans S3 mais il est vide et l'instance ne s'arrête jamais. J'ai lu ceci est possible avec quelque chose comme lifecycle-hooks mais je voulais savoir s'il est possible de faire comme expliqué ci-dessus.

Mes données utilisateur est la suivante:

#!/bin/bash 
runuser -l ec2-user -c "cd /my-directory && nohup execute-my-task --trace > /logs-directory/my-log-file.log & " 
PID=$! 
wait $PID 

runuser -l ec2-user -c "aws s3 cp /logs-directory/my-log-file.log s3://-my-logs-bucket/my-log-file.log" 
PID2=$! 
wait $PID2 

runuser -l ec2-user -c "shutdown -h now" 

Merci.

Répondre

0

Je l'ai compris!

I fini joignant les commandes dans une && tout en ajoutant entre les commandes et de fermer l'instance vers le bas je:

aws ec2 terminate-instances --instance-ids `wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` 

l'esprit les backticks pour exécuter la commande wget et de retour de l'instance-id.