Ausführen von Crontab auf einer AWS-Auto-Scaling-Gruppe

Ausführen von Crontab auf einer AWS-Auto-Scaling-Gruppe

Ich habe das folgende Setup: 1 Server mit Anwendung X, die einmal pro Stunde eine Crontab ausführt. Die Crontab stellt eine Verbindung zur Datenbank her, führt einige umfangreiche Berechnungen aus, exportiert Daten in eine spezielle Datendatei und startet die Anwendung neu. Der Export kann zwischen 10 und 40 Minuten dauern.

Ich möchte:

  • Verschieben Sie diesen Server zu AWS und verwenden Sie die Auto-Scaling-Gruppe.

  • Die Crontab wird nur auf einem Server ausgeführt, führt die Berechnungen durch, exportiert die Daten und synchronisiert sie irgendwie mit allen anderen Live-Servern.

  • Alle Server sollten die neuen Daten automatisch erkennen und sicher neu starten (beispielsweise nicht während der Synchronisierung).

  • Neue Server, die aus den Auto-Scaling-Gruppen gestartet werden, holen die Datendateien beim Start automatisch ab, bevor die eigentliche Anwendung gestartet wird.

Ich habe keine „einfache“ Idee, wie das geht, und auch keine AWS-spezifische Lösung.

Das ist meine Idee:

  • Führen Sie einen Server außerhalb der Auto-Scaling-Gruppe aus. Führen Sie Crontab nur auf diesem Server aus. Alle Datendateien werden auf S3 hochgeladen.

  • Alle Autoscaling-Server verfügen über eine Crontab, die jede Minute ausgeführt wird und nach einer eindeutigen Datei „please_download_me_TIMESTAMP“ sucht.

  • Sobald die Dateien heruntergeladen sind, startet das Skript den Dienst neu.

  • Wenn ein neuer Server gestartet wird, ruft er beim Start automatisch alle Dateien von S3 ab.

Glauben Sie, dass das funktionieren würde?

Antwort1

Dies ist ein häufiges Problem in AWS EC2 und wurde behoben. Siehehttps://gist.github.com/kixorz/5209217für ein Beispiel mit Implementierung.

Antwort2

Ich muss zugeben, dass dies eine alte Frage aus dem Jahr 2015 ist, die von Joe hochgeschoben wurde, also kann ich sie auch gleich beantworten.

Wenn der Job einmal pro Stunde ausgeführt wird und 10 bis 40 Minuten dauert, zahlen Sie trotzdem für eine ganze Stunde. Es hat keinen Sinn, Server zu starten und herunterzufahren. Lassen Sie einen Server einfach laufen.

Wenn es weniger häufig wäre, könnten Sie ein zeitgesteuertes Ereignis haben, das eine Nachricht in eine SQS-Warteschlange einfügt - dies könnte von einem t2.nano erledigt werden, oder vielleicht gibt es eine günstigere Möglichkeit, dies mit Amazon-Diensten zu tun - Lambda? Automatische Skalierung basierend auf der Warteschlangengröße. Wenn Daten zu verarbeiten sind, wird ein Server erstellt, der die Daten verarbeitet, sie an den gewünschten Ort verschiebt und sich dann selbst herunterfährt.

Eine andere Möglichkeit wäre eine zeitbasierte Skalierung, allerdings wiederum nur, wenn dies seltener als stündlich erfolgen würde.

verwandte Informationen