Comment puis-je tuer toutes mes instances EC2 à partir de la ligne de commande?
-
10-07-2019 - |
Question
Comment puis-je supprimer toutes mes instances à partir de la ligne de commande? Existe-t-il une commande pour cela ou dois-je écrire un script?
La solution
Autant que je sache, il n’existe pas de commutateur "all" pour la commande ec2-terminate-instances. Vous avez donc probablement besoin de le scripter. Ce ne sera pas si difficile. Il vous suffit de générer une liste de vos instances, séparées par des virgules.
C’est un script python que j’utilise:
import sys
import time
from boto.ec2.connection import EC2Connection
def main():
conn = EC2Connection('', '')
instances = conn.get_all_instances()
print instances
for reserv in instances:
for inst in reserv.instances:
if inst.state == u'running':
print "Terminating instance %s" % inst
inst.stop()
if __name__ == "__main__":
main()
Il utilise la bibliothèque boto . Ce n'est pas nécessaire pour la tâche spécifique (un simple script shell suffira), mais cela peut s'avérer utile à de nombreuses reprises.
Enfin, connaissez-vous l'extension Elasticfox pour Firefox? C’est de loin le moyen le plus simple d’accéder à EC2.
Autres conseils
C'est une vieille question, mais je pensais partager une solution pour AWS CLI . :
aws ec2 terminate-instances --instance-ids $(aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running,stopped,stopping" --query "Reservations[].Instances[].[InstanceId]" --output text | tr '\n' ' ')
Informations connexes:
Si les pirates ont désactivé la terminaison accidentelle d'instance, exécutez d'abord cette commande:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running,stopped,stopping" --query "Reservations[].Instances[].[InstanceId]" --output text | xargs --delimiter '\n' --max-args=1 aws ec2 modify-instance-attribute --no-disable-api-termination --instance-id
Console AWS et Elasticfox facilite grandement les choses.
Une solution de ligne de commande peut être réalisée en une ligne à l'aide des outils de l'API EC2:
for i in `ec2din | grep running | cut -f2`; do ec2kill $i; done
Par souci d’exhaustivité. Voici une autre façon, plus en phase avec le répertoire d'un programmeur, en utilisant des expressions régulières et le aws cli:
aws ec2 terminate-instances
--instance-ids
$(
aws ec2 describe-instances
| grep InstanceId
| awk {'print $2'}
| sed 's/[",]//g'
)