Derzeit habe ich einen einzigen Server in Amazon, auf dem ich alle meine Cronjobs platziere. Ich möchte diesen einzelnen Fehlerpunkt beseitigen und alle meine Aufgaben als Webdienste verfügbar machen. Ich möchte die Dienste hinter einer VPC-ELB einigen Servern zugänglich machen, auf denen die Aufgaben ausgeführt werden, wenn sie aufgerufen werden.
Gibt es einen Dienst, den Amazon (AWS) anbietet, der in wiederkehrenden Intervallen einen wiederkehrenden Job ausführen kann (wirklich einen Webservice aufrufen)? Ich möchte wirklich in der Lage sein, die Cron-Funktionalität in Bezug auf die Zeit- / Tagesspezifikation beizubehalten, aber die HA des Treibers (das Endpunkte zum richtigen Zeitpunkt aufruft) an AWS weiterzuleiten.
Ich mag, wie SQS Web-Endpunkte anbietet, aber soweit ich das beurteilen kann, kann ich sie nicht planen. SWF scheint auch nicht gut zu passen.
quelle
Antworten:
AWS kündigte auf seiner Konferenz re: Invent 2015 die Unterstützung für geplante Funktionen in Lambda an. Mit dieser Funktion können Benutzer Lambda-Funktionen planmäßig mit einer Cron-ähnlichen Syntax ausführen. Die Lambda-Dokumente zeigen ein Beispiel für die Verwendung von Python zum Ausführen geplanter Ereignisse.
Derzeit beträgt die Mindestauflösung, mit der ein geplantes Lambda ausgeführt werden kann, 1 Minute (wie bei cron, jedoch nicht so feinkörnig wie bei systemd-Timern).
Das Lambder- Projekt hilft, die Verwendung geplanter Funktionen auf Lambda zu vereinfachen.
Das Cron-Beispiel von λ Gordon bietet möglicherweise die einfachste Schnittstelle für die Bereitstellung geplanter Lambda-Funktionen.
Ursprüngliche Antwort, für die Nachwelt gespeichert.
Wie Eric Hammond und andere angegeben haben, gibt es keinen nativen AWS-Service für geplante Aufgaben. Es gibt nur Problemumgehungen und halbe Lösungen, wie in anderen Antworten erwähnt.
So fassen Sie die aktuellen Optionen zusammen:
Hoffentlich kommt bald eine bessere Lösung.
quelle
Einführung in Ereignisse in AWS Cloudwatch
Sie können nach Minuten, Stunden, Tagen oder mithilfe des CRON-Ausdrucks über die Konsole und ohne Lambda oder Programmierung planen.
Ich habe gerade meine ASP.net-WEB-API (HTTP-Post) mit dem SNS-HTTP-Endpunkt so geplant, dass sie jede Minute ausgeführt wird, und sie funktioniert einwandfrei.
quelle
Dies ist einer der wenigen Fehlerpunkte, die Menschen (einschließlich mir) beim Entwerfen von Architekturen mit AWS immer wieder erwähnen. Bis Amazon es mit einem Service löst, habe ich einen Hack veröffentlicht, der von einigen Unternehmen aktiv genutzt wird.
AWS Auto Scaling kann Instanzen mithilfe eines wiederkehrenden Zeitplans ausführen und beenden, der im Cron-Format angegeben ist.
http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html
Sie können die Instanz beim Start automatisch einen Prozess ausführen lassen.
Wenn Sie nicht wissen, wie lange der Job dauern wird, können Sie die Einstellungen so vornehmen, dass Ihr Job die Instanz nach Abschluss beendet.
Hier ist ein Artikel, den ich geschrieben habe und der die genauen Befehle beschreibt, die zum Einrichten erforderlich sind:
Das Starten einer ganzen Instanz, nur um eine Reihe von Jobs zu starten, scheint ein bisschen übertrieben zu sein, aber wenn es sich um ein t1.micro handelt, kostet es nur ein paar Cent.
Das t1.micro muss auch nicht die eigentliche Arbeit erledigen. Ihre Instanz kann Nachrichten in SQS oder über SNS einfügen, sodass die anderen redundanten Server die Aufgaben übernehmen.
quelle
Dies ist eine gehostete Site eines Drittanbieters, die regelmäßig geplante Skripts in Ihrer Domain aufrufen kann.
Dies funktioniert nicht, wenn Ihr Skript in der Shell und nicht als Apache ausgeführt werden soll.
quelle
Klingt so, als wäre dies für Sie nützlich: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html
quelle
Amazon hat Lambda letztes Jahr für NodeJS eingeführt. Gestern hat Amazon die Funktionen Geplante Funktionen, VPC-Unterstützung und Python-Unterstützung hinzugefügt.
Durch die Nutzung der geplanten Funktion kann ein ordnungsgemäßer Ersatz für CRON erreicht werden.
Weitere Informationen - http://aws.amazon.com/lambda/details/
quelle
Dies scheint eine relativ neue Option von AWS BeanStalk zu sein:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks
Grundsätzlich verhalten sie sich wie normale SQS-Empfänger, werden jedoch nicht als Antwort auf eine SQS-Nachricht, sondern nach einem Cron-Zeitplan aufgerufen.
quelle
SWF ist ein Webdienst von AWS, mit dem Aufgaben geplant werden können. Der größte Teil der Arbeit befasst sich mit der Festlegung einer Aufgabe und eines Zeitplans.
http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html ist ein skalierbarer Scheduler, der gegen SWF geschrieben wurde.
quelle
CloudWatch-Ereignisse sind großartig, aber ihre Anzahl ist begrenzt . Wenn Sie eine Skala benötigen und bereit sind, auf die Präzision zu verzichten, können Sie die TTL von DynamoDB als Timer verwenden.
Die Idee ist, Elemente in eine DynamoDB-Tabelle einzufügen, deren TTL auf die Zeit festgelegt ist, zu der Sie eine Aufgabe ausführen müssen. DynamoDB löscht diese Elemente irgendwo um die angegebene Zeit (innerhalb von 48 Stunden nach Ablauf). Diese gelöschten Elemente werden im DynamoDB-Stream angezeigt, der einer Tabelle zugeordnet ist. Eine Lambda-Funktion könnte den Stream abhören und bei den Löschungen geeignete Maßnahmen ergreifen.
Lesen Sie mehr in " DynamoDB TTL als Ad-hoc-Planungsmechanismus " von theburningmonk.com.
quelle
Ab August 2020 hat Amazon die Lambda / CloudWatch-Ereignisse auf einen Dienst namens EventBridge ( https://aws.amazon.com/eventbridge/ ) verschoben . Es wurde im Juli 2019 nach den meisten Antworten auf diese Frage gestartet.
quelle
Die AWS Elastic Load Balancers pingen Ihre Instanzen an, um zu überprüfen, ob sie fehlerfrei sind. Sie können dem Skript, das die ELB anpingt, Ihre Cron-ähnlichen Aufgaben hinzufügen, die sehr regelmäßig ausgeführt werden.
Sie möchten eine Logik hinzufügen, damit jede Aufgabe die richtige Anzahl von Malen und im richtigen Intervall ausgeführt wird. Dies kann jedoch mit einer Datenbanktabelle erreicht werden, die die Ausführung verfolgt. Jedes Mal, wenn die ELB Ihren Server anpingt, überprüft Ihr Server die Datenbank, um festzustellen, ob ein Job aussteht, und führt diesen Job dann aus.
Die ELB läuft ab, wenn die Ausführung des Skripts zu lange dauert. Daher ist es wichtig, keine Situation zu erstellen, in der die Überprüfung der Cron-Aufgaben durch die Überprüfung der ELB-Integrität viele Sekunden dauert. Um dies zu überwinden, können Sie den AWS Simple Notification Service einsetzen. Ihr ELB-Integritätsprüfungsskript kann einfach eine Nachricht in einem SNS-Thema veröffentlichen, und dieses Thema kann die Nachricht dann über eine HTTP-Anforderung an Ihren Webserver senden.
Mit anderen Worten: ELB pingt Ihre EC2-Instanz an ... Die EC2-Instanz sucht nach ausstehenden Jobs und sendet eine Nachricht an SNS, falls welche gefunden werden ... SNS benachrichtigt Ihre App über HTTP ... Der HTTP-Aufruf von SNS verarbeitet die tatsächlich Cron-Job
quelle