Wie richte ich das ordnungsgemäße Herunterfahren und das Connection Draining für Amazon ECS-Aufgaben während der Bereitstellung ein?
Wenn ich einen neuen Service in meinem Amazon Elastic Container Service (Amazon ECS)-Cluster bereitstelle, werden Aufgaben falsch bereitgestellt oder beendet.
Lösung
Sich vergewissern, dass du einen Container mit ausreichender Ressourcenkapazität verwendest
Wenn neue Bereitstellungen die Load Balancer-Zustandsprüfungen regelmäßig nicht bestehen, überprüfe die Amazon ECS Container Insights-Metriken CpuUtilized, CpuReserved und MemoryUtilized. Wenn du einen Application Load Balancer verwendest, überprüfe auch TargetResponseTime.
Konfiguriere außerdem die HealthCheckGracePeriodSeconds-Eigenschaft mit einem Wert, der länger ist als die Startzeit der Anwendung. Verspätete Antworten auf Zustandsprüfungen können zu Fehlern führen und Amazon ECS dazu veranlassen, Aufgaben zu zyklisieren.
Den Container-Status und die Ausgangscodes überprüfen
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Führe für Aufgaben, die unerwartet beendet werden, den folgenden describe-tasks-Befehl aus, um die Container-Beendencodes zu überprüfen:
aws ecs describe-tasks --cluster ECS_CLUSTER --tasks TASK_ARN -- region REGION
Hinweis: Ersetze ECS_CLUSTER durch den Clusternamen, TASK_ARN durch den Aufgaben-ARN und REGION durch deine AWS-Region.
Wenn die Ausgabe des vorherigen Befehls 0 ist, wurde die Aufgabe erfolgreich gestartet. Wenn die Ausgabe 1 ist, ist ein Anwendungsfehler aufgetreten und du musst die Anwendungsprotokolle überprüfen. Wenn die Ausgabe 137 ist, hat der Container ein SIGKILL-Signal empfangen, das in der Regel durch ein Out-of-Memory-Problem verursacht wird. Informationen zur Behebung dieses Problems findest du unter Wie behebe ich OutOfMemory-Fehler in Amazon ECS?und Warum wurde meine Amazon ECS-Aufgabe gestoppt?
Konfiguration der Aufgabendefinition überprüfen
Stelle sicher, dass alle Aufgabendefinitionskonfigurationen gültig sind, insbesondere nachdem du Aufgabendefinitionen geändert oder neue erstellt hast. Führe eine eigenständige Aufgabe aus, um die Aufgabendefinitionskonfigurationen zu überprüfen.
Die Load Balancer-Einstellungen konfigurieren
Konfiguriere deregistration_delay.timeout_seconds im Load Balancer entsprechend den Anforderungen. Verwende für langlebige Anfragen einen höheren Wert. Für Amazon Elastic Compute Cloud (Amazon EC2)-Spot-Instances muss dieser Wert unter 120 Sekunden liegen.
Führe den folgenden Befehl modify-target-group-attributes aus, um deregistration_timeout_seconds zu ändern:
aws elbv2 modify-target-group-attributes --target-group-arn EXAMPLE_ARN --attributes Key=deregistration_delay.timeout_seconds,Value=120
Hinweis: Ersetze EXAMPLE_ARN durch den Load Balancer-ARN und 120 durch das Timeout für die Verzögerung bei der Abmeldung in Sekunden.
Optimiere außerdem die Einstellungen für die Integritätsprüfung des Load Balancers. Wenn die Einstellungen für die Anwendung zu streng sind, markiert der Load Balancer das Ziel möglicherweise häufig als fehlerhaft.
Die Zeit für das reibungslose Herunterfahren der Anwendung konfigurieren
Standardmäßig ist ECS_CONTAINER_STOP_TIMEOUT auf 30 Sekunden festgelegt. Wenn du während der Entleerungsphase früherer Aufgaben in einer neuen Amazon ECS-Bereitstellung auf die Anwendung zugreifen, wird möglicherweise ein 5xx-Fehler angezeigt. Wenn beim Zugriff auf die Anwendung Probleme auftreten, erhöhe den Wert von ECS_CONTAINER_STOP_TIMEOUT, je nachdem, ob die Anwendung ordnungsgemäß heruntergefahren werden muss. Es hat sich bewährt, den aktualisierten Wert in einer Testumgebung zu testen, bevor du ihn bereitstellst.
Um den Wert zu aktualisieren, füge der Aufgabendefinition Code hinzu, der dem folgenden Beispiel ähnelt:
{ "containerDefinitions": [ { "name": "your-container", "image": "your-image", "stopTimeout": 120 } ] }
Hinweis: Ersetze 120 durch den ECS_CONTAINER_STOP_TIMEOUT-Wert.
Um ein ordnungsgemäßes Herunterfahren zu konfigurieren, füge der Anwendung einen SIGTERM-Handler hinzu. Richte für einen AWS Fargate-Spot die Konfiguration so ein, dass DeregisterTargets während des SIGTERM-Handlers aufgerufen wird. Dadurch wird sichergestellt, dass Amazon ECS FARGATE_SPOT-Aufgaben von der Zielgruppe des Load Balancers abmeldet.
Ähnliche Informationen
Die Parameter für das Load Balancer Connection Draining für Amazon ECS optimieren
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 9 Monaten