Ich bin daran interessiert zu hören / auf das Ereignis zu reagieren, dass ein Dienst wegen unzureichender CPU- oder Speicherkapazität keine Aufgabe starten kann. Diese Informationen können in der Konsole angezeigt werden, wenn ich den spezifischen Dienst auswähle und auf der Registerkarte "Ereignisse" nachschaue. Dort würde ein Ereignis wie das Folgende angezeigt:
"Service X konnte keine Aufgabe platzieren, da keine Container-Instanz alle Anforderungen erfüllt hat. Die am nächsten passende Container-Instanz Y verfügt nicht über genügend verfügbare CPU-Einheiten. Weitere Informationen finden Sie im Abschnitt Fehlerbehebung."
Die Container-Instanzen im Cluster werden in einer AutoScalingGroup verwaltet. Die entsprechende Aktion besteht also darin, auf dieses Ereignis zu reagieren, indem eine zusätzliche Instanz skaliert wird, sodass die Ausführung der Aufgabe geplant werden kann. Nun, mein Problem ist, wie reagiere ich auf dieses Ereignis?
Ich habe eine LogGroup, die Daten aus den folgenden Dateien von allen EC2-Instanzen im Cluster enthält:
(Die EC2-Instanzen basieren auf amazon-ecs-optimierten Bildern)
Zuerst dachte ich, dass die Nachricht "service X konnte keine Aufgabe platzieren ..." in einer dieser Protokolldateien (genauer gesagt in der Datei ecs-agent.log oder ecs-init.log) erscheinen würde. aber das war nicht der Fall.
Ich erkannte dann, dass "ECS Evenets" eine Sache ist (mehr dazu unter Ссылка ). Leider ist diese spezielle Veranstaltung nicht von den "ECS Events" unterstützt. Nur: Containerinstanzstatus-Änderungsereignisse und Statusänderungen für Taskstatus . NICHT "Service-Status-Änderungsereignisse" . Auch wenn man denkt, dass die Ereignisse aus der Registerkarte "Ereignisse" im Dienst ebenfalls gestreamt werden, ist dies nicht der Fall. Ich kam zu der Erkenntnis, dass die Dokumentation sogar sagt:
"Sie können den Amazon ECS-Ereignisdatenstrom für CloudWatch-Ereignisse verwenden, um nahezu Echtzeitbenachrichtigungen über den aktuellen Status der Container-Instanzen in einem Amazon ECS-Cluster und den aktuellen Status aller
Und dadurch "dämpft" Amazon ECS Event Stream für CloudWatch-Ereignisse keine Service-Ereignisse (und damit keine Ereignisse für Aufgaben, die nicht ausgeführt werden können). Ich hoffe wirklich, dass "Service State Change Events" in der Zukunft enthalten sein werden, damit ich eine CloudWatch Event Rule machen kann, die diesem Event entspricht, löst eine Lambda-Funktion aus, die dann feststellen würde, ob das Event ein Event vom Typ "Service X" war konnte keine Aufgabe platzieren ... ", und basierend darauf die AutoScalingGroup bearbeiten, um eine zusätzliche Instanz für den Cluster zu skalieren.
Aber wie gesagt, das wird im Moment nicht unterstützt. Gibt es eine andere Möglichkeit, dass ich auf dieses Ereignis "hören" kann? Ich dachte sogar daran, alle 2-3 Minuten ein Lambda zu verwenden, das die CLI verwendet, um "aws ecs describe-services - service X" aufzurufen, um die Liste der Ereignisse auszugeben, und dann auf dem "service X konnte keine Aufgabe platzieren ..." Veranstaltung. Aber das scheint einfach falsch zu sein ...
Jede Hilfe wird sehr geschätzt. Danke!
Ich suche auch nach einer Lösung für dieses Problem. Unser Unternehmen verwendet Spotinst , um unsere ECS-Cluster zu verwalten. Letztes Jahr habe ich Spottinst gebeten, eine Lösung anzubieten. Ein Produktmanager hat mir gerade mitgeteilt, dass sie das Feature Anfang August (in ein paar Wochen) veröffentlichen werden.
Tags und Links amazon-web-services amazon-ecs