93 votes

Arrêt et démarrage automatique de l'instance Amazon EC2

Puis-je démarrer et arrêter automatiquement mon instance Amazon en utilisant l'API Amazon ? Pouvez-vous décrire comment cela peut être fait ? Idéalement, j'ai besoin de démarrer l'instance et de l'arrêter à des intervalles de temps spécifiés chaque jour.

2 votes

Que deviennent les données de votre instance EC2 lorsqu'elle est arrêtée ? Est-ce qu'elles persistent ou devez-vous les reconstruire à nouveau ?

0 votes

Le démarrage et l'arrêt automatiques de l'instance à l'aide de l'API d'Amazon peuvent entraîner des pertes de données lors de cet événement. Je recommanderais les actions d'arrêt et de récupération utilisant Alarmes AWS CloudWatch

0 votes

Au lieu de l'API d'Amazon, je suggère de Planifier le démarrage/arrêt d'EC2 à l'aide d'AWS Lambda Dans votre cas, cela vous coûte moins de 0,0004 USD/mois.

103voto

Nakedible Points 1616

Juste au cas où quelqu'un tomberait sur cette vieille question, de nos jours, vous pouvez obtenir la même chose en ajoutant un programme à un groupe de mise à l'échelle automatique : augmenter le nombre d'instances dans un groupe de mise à l'échelle automatique à 1 à certains moments et le diminuer à 0 ensuite.

Et comme cette réponse suscite beaucoup d'intérêt, j'ai pensé faire un lien vers un guide très utile à ce sujet : Exécution d'instances EC2 sur un programme récurrent avec Auto Scaling

6 votes

J'ai essayé la méthode décrite dans le lien, et elle démarre/arrête effectivement les instances aux moments spécifiés par le tutoriel. Cependant, j'ai remarqué dans la console web AWS que lorsqu'une instance est démarrée par cette méthode, elle n'est pas démarrée avec une clé (telle que vous pouvez y accéder par ssh), et elle ne semble pas non plus avoir le même matériel que celui installé sur ma micro-instance que j'utilise comme test (je ne suis pas un expert du cloud, mais je pense que cela signifie que cette nouvelle instance qui est lancée n'est pas connectée à l'EBS ?) Existe-t-il un moyen de démarrer et d'arrêter automatiquement l'application même instance sur un calendrier ?

0 votes

@KiranK. cela signifie-t-il que la nouvelle instance n'est pas attachée au volume EBS actuellement utilisé ? qu'avez-vous utilisé ?

0 votes

@KiranK J'utiliserais Packer pour construire l'AMI afin qu'il ait tout ce dont vous avez besoin pour le démarrage. packer.io/docs/builders/amazon/ebs y martinfowler.com/bliki/PhoenixServer.html

26voto

danoo Points 551

Vous pouvez essayer d'utiliser directement les outils de l'API Amazon EC2. Il n'y a deux commandes dont vous avez besoin : ec2-start-instances et ec2-stop-instances. Assurez-vous que les variables d'environnement telles que EC2_HOME, AWS_CREDENTIAL_FILE, EC2_CERT, EC2_PRIVATE_KEY, etc. sont correctement configurées. correctement configurées et tous les fichiers d'informations d'identification, de certificats et de clés privées d'AWS sont correctement configurés et tous les fichiers d'informations d'identification, de certificats et de clés privées AWS se trouvent au bon endroit - vous pouvez trouver plus d'informations dans la documentation des outils API AWS EC2. d'AWS EC2.

Vous pouvez d'abord tester la commande à la main, puis, lorsque tout fonctionne bien, configurer la crontab d'Unix ou les Tâches programmées de Windows. Vous pouvez trouver l exemple ci-dessous pour le fichier /etc/crontab de Linux (n'oubliez pas que toutes les n'oubliez pas que les variables d'environnement mentionnées ci-dessus doivent être l'utilisateur 'your-account'.

/etc/crontab
0 8     * * *   your-account ec2-start-instances <your_instance_id>
0 16    * * *   your-account ec2-stop-instances <your_instance_id>
# Your instance will be started at 8am and shutdown at 4pm.

Je suis développeur pour le projet BitNami Cloud, où nous empaquetons les outils AWS (y compris ceux que j'ai mentionnés) dans une version gratuite. outils AWS (y compris ceux que j'ai mentionnés) dans un programme d'installation gratuit et facile à utiliser que vous pouvez essayer : Pack BitNami CloudTools pile

2 votes

Pour cela, vous avez encore besoin d'une autre instance. Parce que l'arrêt n'est pas le problème mais le démarrage. Crone ou n'importe quoi d'autre ne fonctionnera pas dans un ordinateur mort après qu'il ait été éteint.

0 votes

J'ai suivi ces étapes pour configurer les outils AWS CLI sur mon Instance Linux AMazon. L'arrêt de l'instance fonctionne bien. Mais le démarrage d'une instance déjà arrêtée donne une erreur 400, Instance Id not found. Comment puis-je démarrer une instance déjà arrêtée ?

0 votes

17voto

gareth_bowles Points 10605

Je vous recommande de jeter un coup d'œil à la Guide de démarrage EC2 qui vous montre comment faire ce dont vous avez besoin à l'aide des outils de ligne de commande EC2. Vous pouvez facilement script ceci dans une tâche cron (sur Linux / UNIX) ou une tâche planifiée sur Windows pour appeler les commandes de démarrage et d'arrêt à un moment donné.

Si vous souhaitez effectuer cette opération à partir de votre propre code, vous pouvez utiliser les API SOAP ou REST ; voir l'onglet Guide du développeur pour les détails.

16voto

Suman Points 2478

J'ai écrit un code en Python, en utilisant la bibliothèque Boto, pour faire cela. Vous pouvez l'adapter à votre propre usage. Assurez-vous de l'exécuter dans le cadre d'une tâche cron, et vous pourrez alors démarrer ou arrêter autant d'instances que nécessaire pendant l'exécution de la tâche cron.

#!/usr/bin/python
#
# Auto-start and stop EC2 instances
#
import boto, datetime, sys
from time import gmtime, strftime, sleep

# AWS credentials
aws_key = "AKIAxxx"
aws_secret = "abcd"

# The instances that we want to auto-start/stop
instances = [
    # You can have tuples in this format:
    # [instance-id, name/description, startHour, stopHour, ipAddress]
    ["i-12345678", "Description", "00", "12", "1.2.3.4"]
]

# --------------------------------------------

# If its the weekend, then quit
# If you don't care about the weekend, remove these three 
# lines of code below.
weekday = datetime.datetime.today().weekday()
if (weekday == 5) or (weekday == 6):
    sys.exit()

# Connect to EC2
conn = boto.connect_ec2(aws_key, aws_secret)

# Get current hour
hh = strftime("%H", gmtime())

# For each instance
for (instance, description, start, stop, ip) in instances:
    # If this is the hour of starting it...
    if (hh == start):
        # Start the instance
        conn.start_instances(instance_ids=[instance])
        # Sleep for a few seconds to ensure starting
        sleep(10)
        # Associate the Elastic IP with instance
        if ip:
            conn.associate_address(instance, ip)
    # If this is the hour of stopping it...
    if (hh == stop):
        # Stop the instance
        conn.stop_instances(instance_ids=[instance])

1 votes

Est-ce possible pour les environnements Elastic Beanstalk également ?

0 votes

Cela fonctionnera-t-il sur Lightsail ?

5voto

AntonyM Points 816

La société pour laquelle je travaille avait des clients qui demandaient régulièrement ce genre de choses. Nous avons donc écrit une application gratuite de planification EC2 disponible ici :

http://blog.simple-help.com/2012/03/free-ec2-scheduler/

Il fonctionne sur Windows et Mac, vous permet de créer plusieurs programmes quotidiens/hebdomadaires/mensuels et vous permet d'utiliser des filtres de correspondance pour inclure facilement un grand nombre d'instances ou inclure celles que vous ajouterez à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X