Kann ich meine Amazon-Instanz mithilfe der Amazon-API automatisch starten und beenden? Können Sie bitte beschreiben, wie dies getan werden kann? Idealerweise muss ich die Instanz jeden Tag in festgelegten Zeitintervallen starten und stoppen.
90
Antworten:
Nur für den Fall, dass jemand über diese alte Frage stolpert, können Sie heutzutage dasselbe erreichen, indem Sie einer automatischen Skalierungsgruppe einen Zeitplan hinzufügen: Erhöhen Sie die Anzahl der Instanzen in einer automatischen Skalierungsgruppe zu bestimmten Zeiten auf 1 und verringern Sie sie anschließend wieder auf 0 .
Und da diese Antwort viele Aufrufe erhält, habe ich mir überlegt, auf eine sehr hilfreiche Anleitung zu diesem Thema zu verweisen : Ausführen von EC2-Instanzen nach einem wiederkehrenden Zeitplan mit automatischer Skalierung
quelle
Sie können versuchen, die Amazon EC2-API-Tools direkt zu verwenden. Es gibt wirklich nur zwei Befehle, die Sie benötigen: ec2-start-Instanzen und ec2-stop-Instanzen. Stellen Sie sicher, dass Umgebungsvariablen wie EC2_HOME, AWS_CREDENTIAL_FILE, EC2_CERT, EC2_PRIVATE_KEY usw. ordnungsgemäß konfiguriert sind und sich alle AWS-Anmeldeinformationen, Zertifikate und privaten Schlüsseldateien am richtigen Speicherort befinden. Weitere Informationen finden Sie in der Dokumentation zu den AWS EC2-API-Tools.
Sie können den Befehl zuerst von Hand testen und dann, wenn alles einwandfrei funktioniert, Unix crontab oder Scheduled Tasks unter Windows konfigurieren. Im Folgenden finden Sie ein Beispiel für die Linux / etc / crontab-Datei (vergessen Sie nicht, dass alle oben genannten Umgebungsvariablen für den Benutzer "Ihr Konto" vorhanden sein müssen.
Ich bin Entwickler für das BitNami Cloud-Projekt, in dem wir die AWS-Tools (einschließlich der von mir erwähnten) in einem kostenlosen, benutzerfreundlichen Installationsprogramm verpacken , das Sie möglicherweise ausprobieren möchten: BitNami CloudTools Pack Stack
quelle
Ich empfehle Ihnen, einen Blick auf das EC2-Handbuch Erste Schritte zu werfen , das Ihnen zeigt, wie Sie mit den EC2-Befehlszeilentools das tun, was Sie benötigen. Sie können dies einfach in einen Cron-Job (unter Linux / UNIX) oder einen geplanten Job unter Windows schreiben, um die Start- und Stoppbefehle zu einem bestimmten Zeitpunkt aufzurufen.
Wenn Sie dies aus Ihrem eigenen Code heraus tun möchten, können Sie die SOAP- oder REST-APIs verwenden. Weitere Informationen finden Sie im Entwicklerhandbuch .
quelle
Ich habe dazu Code in Python unter Verwendung der Boto-Bibliothek geschrieben. Sie können dies für Ihren eigenen Gebrauch anpassen. Stellen Sie sicher, dass Sie dies als Teil eines Cron-Jobs ausführen. Anschließend können Sie so viele Instanzen starten oder herunterfahren, wie Sie während der Ausführung von Cron-Jobs benötigen.
quelle
Wenn es nicht geschäftskritisch ist - Eine vereinfachende Aufgabe besteht darin, die Batch-Datei so zu planen, dass 'SHUTDOWN' (Windows) jeden Tag um 3 Uhr morgens ausgeführt wird. Dann laufen Sie zumindest nicht Gefahr, versehentlich eine unerwünschte Instanz auf unbestimmte Zeit laufen zu lassen.
Offensichtlich ist dies nur die halbe Wahrheit!
quelle
In der Firma, für die ich arbeite, haben Kunden regelmäßig danach gefragt. Deshalb haben wir hier eine Freeware-EC2-Planungs-App geschrieben:
http://blog.simple-help.com/2012/03/free-ec2-scheduler/
Es funktioniert unter Windows und Mac, ermöglicht das Erstellen mehrerer Tages-, Wochen- und Monatspläne und das Verwenden von passenden Filtern, um eine große Anzahl von Instanzen einfach einzuschließen, oder solche, die Sie in Zukunft hinzufügen.
quelle
AWS Data Pipeline funktioniert einwandfrei. https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/
Wenn Sie Tage vom Start ausschließen möchten (z. B. Wochenende), fügen Sie ein ShellCommandPrecondition-Objekt hinzu.
Erstellen Sie in AWS Console / Data Pipeline eine neue Pipeline. Es ist einfacher, eine Definition (JSON) zu bearbeiten / importieren.
Legen Sie das herunterzuladende und auszuführende Bash-Skript als Voraussetzung in Ihren S3-Bucket
Beim Aktivieren und Ausführen der Pipeline an Wochenendtagen liest der Pipeline-Integritätsstatus der AWS-Konsole einen irreführenden "FEHLER". Das Bash-Skript gibt einen Fehler zurück (Exit 1) und EC2 wird nicht gestartet. An den Tagen 1 bis 5 lautet der Status "GESUND".
Verwenden Sie den täglichen AWS CLI-Befehl ohne Vorbedingung, um EC2 zum Schließen der Bürozeit automatisch zu stoppen.
quelle
Sie könnten sich Ylastic ansehen, um dies zu tun. Die Alternative scheint darin zu bestehen, dass ein Computer ausgeführt wird, der andere Instanzen mithilfe eines Cron-Jobs oder einer geplanten Aufgabe herunterfährt / startet.
Wenn Sie nur eine Instanz möchten, ist dies natürlich eine teure Lösung, da immer ein Computer ausgeführt werden muss und es nicht kosteneffektiv ist, etwa 80 US-Dollar pro Monat für einen Computer zu zahlen, um Cron-Jobs auszuführen.
quelle
AutoScaling ist auf das Beenden von Instanzen beschränkt. Wenn Sie eine Instanz stoppen und den Serverstatus beibehalten möchten, ist ein externes Skript der beste Ansatz.
Sie können dies tun, indem Sie einen Job auf einer anderen Instanz ausführen, die rund um die Uhr ausgeführt wird, oder Sie können einen Drittanbieter-Service wie Ylastic (oben erwähnt) oder Rocket Peak verwenden .
In C # ist der Code zum Stoppen eines Servers beispielsweise recht einfach:
quelle
IMHO ist das Hinzufügen eines Zeitplans zu einer automatischen Skalierungsgruppe der beste "Cloud-ähnliche" Ansatz, wie bereits erwähnt.
Falls Sie Ihre Instanzen jedoch nicht beenden und neue verwenden können, z. B. wenn Sie mit elastischen IPs usw. verknüpft sind.
Sie können ein Ruby-Skript erstellen, um Ihre Instanzen basierend auf einem Datums- und Zeitbereich zu starten und zu stoppen.
Schauen Sie sich amazon_start_stop an, um mit Heroku Scheduler kostenlos einen Scheduler zu erstellen .
quelle
Obwohl es Möglichkeiten gibt, dies mithilfe der automatischen Skalierung zu erreichen, ist es möglicherweise nicht für alle Fälle geeignet, da die Instanzen beendet werden. Cron-Jobs funktionieren niemals für eine einzelne Instanz (obwohl sie perfekt für Situationen wie das Stoppen einer einzelnen Instanz und das Planen anderer Instanzen beim Ausführen vieler Instanzen verwendet werden können). Sie können API-Aufrufe wie StartInstancesRequest und StopInstancesRequest verwenden , um dasselbe zu erreichen, aber Sie müssen sich erneut auf eine dritte Ressource verlassen. Es gibt viele Anwendungen zum Planen von AWS-Instanzen mit vielen Funktionen, aber für eine einfache Lösung würde ich eine kostenlose App wie snapleaf.io empfehlen
quelle
Ja, das können Sie mit AWS Lambda tun. Sie können den Auslöser in Cloudwatch auswählen, der auf Cron-Ausdrücken unter UTC ausgeführt wird.
Hier ist ein verwandter Link https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/
Eine andere Alternative besteht darin, zu verwenden,
awscli
was vonpip
, oder verfügbar istapt-get
, und dann mit Ihren aus IAM exportierten Anmeldeinformationen auszuführen und das folgende Bash-Skript auszuführen, um eine EC2 zu stoppen, die mit und gekennzeichnet wurde . Sie können Ihre Instanzen mit Tags versehen oder manuell über die AWS-Konsole markieren. stoppt die Instanz und wird verwendet, um die JSON-Abfrage zu filtern und die richtige Instanz-ID mithilfe der Tags von abzurufen .yum
brew
aws configure
Name: Appname
Value: Appname Prod
awscli
aws ec2 stop-instances
jq
aws ec2 describe-instances
Um zu überprüfen, ob dies
aws configure
erfolgreich war und json-Ausgabe zurückgibt,aws ec2 describe-instances
sollte Ihre laufende Instanz-ID in der Ausgabe vorhanden sein. Hier ist eine BeispielausgabeDer folgende Bash - Skript wird
stop-ec2.sh
in/home/centos/cron-scripts/
dem von inspiriert diese SO PostFühren Sie die Datei mit aus
sh /home/centos/cron-scripts/stop-ec2.sh
und stellen Sie sicher, dass die EC2-Instanz gestoppt wird. Zum Debuggen führen Sie ausaws 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
und stellen Sie sicher, dass die korrekte Instanz-ID zurückgegeben wird, die mit Tags versehen wurde.Dann kann in
crontab -e
der folgenden Zeile hinzugefügt werden30 14 * * * sh /home/centos/cron-scripts/stop-ec2.sh >> /tmp/stop
Dadurch wird die Ausgabe protokolliert
/tmp/stop
. Das30 14 * * *
ist der UTC Cron - Ausdruck , dass Sie einchecken könnenhttps://crontab.guru/
. Ebenso kann das Ersetzen durchaws ec2 start-instances
eine Instanz starten.quelle
Ich glaube, dass die anfängliche Frage etwas verwirrend war. Es hängt davon ab, was Pasta benötigt: 1. Starten / Beenden (Instanzspeicher) - Automatische Skalierung ist die richtige Lösung (Nakedibles Antwort) 2. Starten / Stoppen der EBS-Startinstanz - Automatische Skalierung hilft nicht, ich verwende geplante Remote-Skripte (z , ec2 CLI).
quelle
Sie können dies nicht automatisch oder zumindest nicht ohne Programmierung und API-Manipulation in Skriptdateien tun. Wenn Sie eine zuverlässige Lösung zum Stoppen, Neustarten und Verwalten Ihrer Bilder suchen (vermutlich um die Kosten in Ihrer Umgebung zu kontrollieren), sollten Sie sich LabSlice ansehen . Haftungsausschluss: Ich arbeite für diese Firma.
quelle