Puis-je démarrer et terminer automatiquement mon instance Amazon à l'aide de l'API Amazon? Pouvez-vous décrire comment cela peut être fait? Je dois idéalement démarrer l'instance et l'arrêter à des intervalles de temps spécifiés chaque jour.
90
Réponses:
Juste au cas où quelqu'un trébucherait sur cette vieille question, de nos jours, vous pouvez réaliser la même chose en ajoutant un calendrier à un groupe de mise à l'échelle automatique: augmentez le nombre d'instances dans un groupe de mise à l'échelle automatique à 1 à certains moments et réduisez-le à 0 par la suite. .
Et comme cette réponse suscite beaucoup de vues, j'ai pensé à créer un lien vers un guide très utile à ce sujet: Exécuter des instances EC2 selon un calendrier récurrent avec Auto Scaling
la source
Vous pouvez essayer d'utiliser directement les outils d'API Amazon EC2. Il n'y a vraiment que 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 et que toutes les informations d'identification AWS, les certificats et les fichiers de clé privée sont au bon emplacement - vous pouvez trouver plus d'informations dans la documentation des outils d'API AWS EC2.
Vous pouvez d'abord tester la commande à la main, puis, lorsque tout fonctionne correctement, configurer le crontab Unix ou les tâches planifiées sous Windows. Vous pouvez trouver l'exemple ci-dessous pour le fichier Linux / etc / crontab (n'oubliez pas que toutes les variables d'environnement mentionnées ci-dessus doivent être présentes pour l'utilisateur 'your-account'.
Je suis développeur pour le projet BitNami Cloud, où nous emballons les outils AWS (y compris ceux que j'ai mentionnés) dans un programme d'installation gratuit et facile à utiliser que vous voudrez peut-être essayer: BitNami CloudTools pack stack
la source
Je vous recommande de consulter le 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 créer un script dans une tâche cron (sous Linux / UNIX) ou une tâche planifiée sous Windows pour appeler les commandes de démarrage et d'arrêt à un moment donné.
Si vous souhaitez le faire à partir de votre propre code, vous pouvez utiliser les API SOAP ou REST; consultez le Guide du développeur pour plus de détails.
la source
J'ai écrit du code en Python, en utilisant la bibliothèque Boto, pour ce faire. Vous pouvez régler cela pour votre propre usage. Assurez-vous de l'exécuter dans le cadre d'une tâche cron, et vous pourrez ensuite démarrer ou arrêter autant d'instances que vous le souhaitez pendant l'exécution des tâches cron.
la source
Si ce n'est pas essentiel à la mission - Une chose simpliste à faire est de planifier le fichier de commandes pour qu'il exécute «SHUTDOWN» (Windows) à 3 heures du matin tous les jours. Alors au moins, vous ne courez pas le risque de laisser accidentellement une instance indésirable en cours d'exécution indéfiniment.
Évidemment, ce n'est que la moitié de l'histoire!
la source
La société pour laquelle je travaille avait des clients qui posent régulièrement des questions à ce sujet, nous avons donc écrit une application de planification EC2 gratuite disponible ici:
http://blog.simple-help.com/2012/03/free-ec2-scheduler/
Il fonctionne sur Windows et Mac, vous permet de créer plusieurs horaires quotidiens / hebdomadaires / mensuels et vous permet d'utiliser des filtres correspondants pour inclure facilement un grand nombre d'instances ou inclure celles que vous ajoutez à l'avenir.
la source
AWS Data Pipeline fonctionne correctement. https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/
Si vous souhaitez exclure des jours du début (par exemple le week-end), ajoutez un objet ShellCommandPrecondition.
Dans AWS Console / Data Pipeline, créez un nouveau pipeline. Il est plus facile de modifier / importer une définition (JSON)
Placez le script Bash à télécharger et à exécuter comme condition préalable dans votre compartiment S3
Lors de l'activation et de l'exécution du pipeline les jours de week-end, l'état de santé du pipeline de la console AWS lit une "ERREUR" trompeuse. Le script bash renvoie une erreur (exit 1) et EC2 n'est pas démarré. Les jours 1 à 5, l'état est «SAIN».
Pour arrêter EC2 automatiquement à l'heure de fermeture du bureau, utilisez la commande AWS CLI quotidiennement sans condition préalable.
la source
Vous pouvez consulter Ylastic pour ce faire. L'alternative semble avoir une machine en cours d'exécution qui arrête / démarre d'autres instances à l'aide d'une tâche cron ou d'une tâche planifiée.
De toute évidence, si vous ne voulez qu'une seule instance, c'est une solution coûteuse, car une machine doit toujours être en cours d'exécution, et payer ~ 80 $ par mois pour qu'une machine exécute des tâches cron n'est pas rentable.
la source
La mise à l'échelle automatique est limitée à l'arrêt des instances. Si vous souhaitez arrêter une instance et conserver l'état du serveur, un script externe est la meilleure approche.
Vous pouvez le faire en exécutant une tâche sur une autre instance qui fonctionne 24h / 24 et 7j / 7 ou vous pouvez utiliser un service tiers tel que Ylastic (mentionné ci-dessus) ou Rocket Peak .
Par exemple en C #, le code pour arrêter un serveur est assez simple:
la source
IMHO l'ajout d'un calendrier à un groupe de mise à l'échelle automatique est la meilleure approche de type «cloud» comme mentionné précédemment.
Mais au cas où vous ne pouvez pas mettre fin à vos instances et en utiliser de nouvelles, par exemple si vous avez des adresses IP Elastic associées à etc.
Vous pouvez créer un script Ruby pour démarrer et arrêter vos instances en fonction d'une plage de dates et d'heures.
Jetez un œil à amazon_start_stop pour créer un planificateur gratuitement à l'aide de Heroku Scheduler .
la source
Même s'il existe des moyens d'y parvenir en utilisant la mise à l'échelle automatique, il peut ne pas convenir à toutes les occasions car il met fin aux instances. Les tâches Cron ne fonctionneront jamais pour une seule instance (bien qu'elles puissent parfaitement être utilisées dans des situations telles que l'arrêt d'une seule instance et la planification d'autres instances lors de l'exécution de plusieurs instances). Vous pouvez utiliser des appels d'API comme StartInstancesRequest et StopInstancesRequest pour obtenir la même chose, mais encore une fois, vous devez vous fier à une troisième ressource. Il existe de nombreuses applications pour planifier des instances AWS avec de nombreuses fonctionnalités, mais pour une solution simple, je recommanderais une application gratuite comme snapleaf.io
la source
Oui, vous pouvez le faire à l'aide d'AWS Lambda. Vous pouvez sélectionner le déclencheur dans Cloudwatch qui s'exécute sur des expressions Cron à UTC.
Voici un lien connexe https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/
Une autre alternative consiste à utiliser
awscli
ce qui est disponible à partir depip
de ,apt-get
,yum
oubrew
, en cours d' exécution et puisaws configure
avec vos informations d' identification exportées de l' AIM et l' exécution du script bash suivant, pour arrêter une EC2 qui a été marqué avecName: Appname
etValue: Appname Prod
. Vous pouvez utiliserawscli
pour baliser vos instances ou les baliser manuellement à partir de la console AWS.aws ec2 stop-instances
arrêtera l'instance etjq
est utilisé pour filtrer la requête json et récupérer l'ID d'instance correct à l'aide des balises deaws ec2 describe-instances
.Pour vérifier que cela
aws configure
a réussi et renvoie la sortie json, exécutezaws ec2 describe-instances
et votre ID d'instance en cours d'exécution doit être présent dans la sortie. Voici un exemple de sortieLe script bash suivant est
stop-ec2.sh
dans ce/home/centos/cron-scripts/
qui est inspiré de ce SO posteExécutez le fichier à l'aide de
sh /home/centos/cron-scripts/stop-ec2.sh
et vérifiez que l'instance EC2 est arrêtée. Pour déboguer, exécutezaws ec2 describe-instances | jq '.Reservations[].Instances | select(.[].Tags[].Value | startswith("Appname Prod") ) | select(.[].Tags[].Key == "Appname") | {InstanceId: .[].InstanceId, PublicDnsName: .[].PublicDnsName, State: .[].State, LaunchTime: .[].LaunchTime, Tags: .[].Tags} | [.]' | jq -r .[].InstanceId
et voyez qu'il renvoie l'ID d'instance correct qui a été balisé.Ensuite, dans
crontab -e
la ligne suivante peut être ajouté30 14 * * * sh /home/centos/cron-scripts/stop-ec2.sh >> /tmp/stop
qui enregistrera la sortie dans
/tmp/stop
. Il30 14 * * *
s'agit de l'expression cron UTC que vous pouvez enregistrerhttps://crontab.guru/
. De même en remplaçant paraws ec2 start-instances
peut démarrer une instance.la source
Je pense que la question initiale était un peu déroutante. Cela dépend de ce dont Pasta a besoin: 1. lancer / terminer (magasin d'instance) - Auto Scaling est la bonne solution (réponse de Nakedible) 2. démarrer / arrêter l'instance de démarrage EBS - Auto Scaling n'aidera pas, j'utilise des scripts planifiés à distance (ie , CLI ec2).
la source
Vous ne pouvez pas le faire automatiquement, ou du moins pas sans programmation et manipulation d'API dans les fichiers de script. Si vous voulez une solution fiable pour arrêter, redémarrer et gérer vos images (vraisemblablement pour contrôler les coûts dans votre environnement), vous pouvez vous tourner vers LabSlice . Avertissement: Je travaille pour cette entreprise.
la source