Existe-t-il un moyen pour les instances Amazon Web Services EC2 de se terminer automatiquement? Amazon a-t-il quelque chose qui permet à une instance de se terminer ("Hara-Kiri") après avoir fonctionné pendant plus d'une heure? Je pourrais changer les scripts sur l'instance en cours d'exécution pour le faire lui-même, mais cela pourrait échouer et je ne veux pas modifier l'image, donc j'aimerais qu'Amazon tue l'instance.
Pour qu'une instance se termine elle-même, procédez comme suit:
--instance-initiated-shutdown-behavior terminate
ou l'équivalent sur la console AWS ou l'appel d'API.Courir shutdown -h now
en tant que root. Sur Ubuntu, vous pouvez configurer cela en 55 minutes en utilisant:
echo "Sudo halt" | at now + 55 minutes
J'ai écrit un article il y a quelque temps sur d'autres options pour atteindre le même objectif "terminer dans une heure":
Résiliation automatique des instances temporaires sur Amazon EC2
http://alestic.com/2010/09/ec2-instance-termination
L'article a été écrit à l'origine avant le instance-initiated-shutdown-behavior
était disponible, mais vous trouverez des mises à jour et d'autres joyaux dans les commentaires.
Tu peux le faire
ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
L'ec2 obtiendra son ID d'instance actuel et se terminera.
J'espère que cela fonctionnera
instanceId=$(curl http://169.254.169.254/latest/meta-data/instance-id/)
region=$(curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk '{print $3}' | sed 's/"//g'|sed 's/,//g')
/usr/bin/aws ec2 terminate-instances --instance-ids $instanceId --region $region
J'espère que cela vous aidera !!!
Voici mon script pour Auto-terminaison
$ EC2_INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
$ echo "ec2-terminate-instances $EC2_INSTANCE_ID" | at now + 55 min || die 'cannot obtain instance-id'
Si vous souhaitez l'assigner comme Auto-arrêt sur Auto-terminaison , vous ne pouvez le faire qu'une seule fois.
Dans votre console EC2 allez à Paramètres d'instance, changez Comportement d'arrêt à Arrête.
Configurez /etc/cloud/cloud.cfg, vous pouvez vous référer à comment exécuter un script de démarrage en utilisant cloud-init.
Suivez la réponse de Eric Hammond , mettez la commande dans un fichier et localisez-la dans scripts-per-boot path :
$ echo '#!/bin/sh' > per-boot.sh
$ echo 'echo "halt" | at now + 55 min' >> per-boot.sh
$ echo 'echo per-boot: `date` >> /tmp/per-boot.txt' >> per-boot.sh
$ chmod +x per-boot.sh
$ Sudo chown -R root per-boot.sh
$ Sudo mv -viu per-boot.sh /var/lib/cloud/scripts/per-boot
Reboot votre instance, vérifiez si le script est exécuté:
$ cat /tmp/per-boot.txt
per-boot: Mon Jul 4 15:35:42 UTC 2016
Si c'est le cas, juste au cas où vous auriez oublié d'arrêter votre instance, cela vous assurera que l'instance se terminera elle-même comme s'arrêtant lorsqu'elle aura fonctionné pendant 55 minutes ou à tout moment que vous aurez défini dans le script.
Broadcast message from root@ip-10-0-0-32
(unknown) at 16:30 ...
The system is going down for halt NOW!
PS: Pour tout le monde qui veut utiliser le Auto-arrêt, une chose que vous devez noter que tous les types EC2 ne sont pas à récupération automatique au redémarrage. Je recommande d'utiliser EC2-VPC/EBS avec On/Off Schedule.