AWS ECS Service für Cronjobs?

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.723
So wer kennt sich ein wenig mit ECS aus? Ich hab ein paar Scripte die in Docker Containern liegen und einmal pro Tag ausgeführt werden sollen. Dafür habe ich einen scheduled Task angelegt.
Problem an der Sache ist, dass die auch Abstürzen können (Ursache bisher unbekannt, kann nicht reproduziert werden). Der Healthcheck schlägt fehlt aber AWS macht nichts. Die würden den Container nur neu starten wenn er Teil eines Service ist. Aber dann müsste der Container 24x7 laufen was nur unnötig Kosten verursacht. Der soll einmal am Tag gestartet werden, läuft dann 2-3h und gut ist. Aber falls die Ausführung nicht klappt, soll er neu gestartet werden.
Kann ich das irgendwie hinbekommen? Ich suche gerade ob ich mir Alarme über Cloudwatch erstellen kann und dann irgendwie eine Response dafür mache - aber ich weiss nicht ob das der richtige Ansatz ist.
 
Du brauchst einen "Steuerungsservice".
Dein Container tut in den 2-3 Stunden ja irgendetwas.

  1. Dein Container startet
  2. Container schreibt alle X Minuten ein Update mit "ich laufe" in eine Datenbank.
  3. Container ist fertig und schreibt "fertig" in die Datenbank

Zusätzlich dazu machst du einen sehr kleinen Service der alle X Minuten den Status in der Datenbank prüft und den Hauptcontainer wieder starten kann, falls der letzte Datenbankeintrag älter als X Minuten ist und den Status "ich laufe" hat.

Geht alles auch anders aber das ist der Weg des geringsten Widerstandes.

(Datenbank kann auch eine Datei in S3 sein)
 
  • Gefällt mir
Reaktionen: Falc410
Ich hätte gerne auf den zusätzlichen Steuerungsservice verzichtet - da ich davon ausgegangen bin, dass AWS so etwas mitbringt. Aber alles was ich jetzt angeschaut habe, funktioniert nur für einen ECS Service und nicht für Tasks.

Adding terminate actions to Amazon CloudWatch alarms <-- geht nur für einen Service. Ich hätte z.B. überwachen können ob die CPU idle ist, aber ich kann mir nur eine E-Mail schicken lassen. Keine Aktion hinterlegen.

Der Healthcheck hilft mir ebenfalls nicht da: If a task is run manually, and not as part of a service, the task will continue its lifecycle regardless of its health status. For tasks that are part of a service, if the task reports as unhealthy then the task will be stopped and the service scheduler will replace it.

Also die Datenbank bzw. das EFS muss ich gar nicht überwachen, es würde wohl reichen wenn ich einen Container mit AWS CLI aufsetze der einfach describe-tasks aufruft und den Healthcheck Parameter auswertet und dann über die CLI die Container neu startet.

Also muss ich das wofür ich AWS eigentlich bezahle, nun selbst basteln /facepalm
 
Das ist die Natur des Tasks etwas eingeschränkt.
Wie ich es ja bereits geschrieben habe, es gibt viele Wege um das zu umgehen. Hängt alles am Wissensstand, den Möglichkeiten und dem Kontext.

Das beste wäre natürlich den Container dazu zu bringen, nicht mehr abzustürzen :D ( jaja, oftmals leichter gesagt als getan ).
Ich habe auch schon WOCHEN damit verbracht abstürzende Container in ECS zu analysieren. Am ende war es ein memory leak der zum Absturz geführt hat. Das kannst du dir aber gut in Cloudwatch etc. anzeigen lassen.
 
  • Gefällt mir
Reaktionen: Falc410
Zurück
Oben