Wie behebe ich Fehler bei der Zustandsprüfung für Amazon ECS-Aufgaben auf Fargate?

Lesedauer: 6 Minute
0

Ich erhalte bei meinen Amazon Elastic Container Service (Amazon ECS)-Aufgaben auf AWS Fargate Fehler bei der Zustandsprüfung.

Kurzbeschreibung

Fehler bei der Zustandsprüfung von Amazon ECS-Aufgaben auf Fargate können aus den folgenden Gründen auftreten:

  • Fehler bei der Container-Zustandsprüfung
  • Ein Ziel, das sich in einer Availability Zone befindet, die für den Load Balancer deaktiviert ist
  • Ressourcenbeschränkungen für CPU oder Speicher
  • Falsch konfigurierte Einstellungen für die Zustandsprüfung
  • Probleme mit der Netzwerkverbindung

Wenn eine Aufgabe die Load Balancer-Zustandsprüfung nicht besteht, erhältst du in deiner Amazon ECS-Serviceeventmeldung einen der folgenden Fehler:

  • "(service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [5xx]/[4xx]/[3xx]) or (Request timed out)." („(Service AWS-Service) (Port 8080) ist fehlerhaft in (Zielgruppe arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) aufgrund von (Grund, warum die Zustandsprüfungen mit diesen Codes fehlgeschlagen sind: [5xx]/[4xx]/[3xx]) oder (Anforderungs-Timeout)“)
  • "(service AWS-Service) (task eaa3ec9e9f104070b461490987654321) failed container health checks." („(Service AWS-Serivce) (Aufgabe eaa3ec9e9f104070b461490987654321) hat Container-Zustandsprüfung nicht bestanden.“)
  • "service AWS-Service) (instance 10.122.144.145) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) due to (reason Target is in an Availability Zone that is not enabled for the load balancer)." („(Service AWS-Service) (Instance 10.122.144.145) (Port 8080) ist fehlerhaft in (Zielgruppe arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) aufgrund von (Grund, warum das Ziel sich in einer Availability Zone befindet, die nicht für den Load Balancer aktiviert ist)“)

Auf der Amazon ECS-Aufgabenkonsole erhältst du möglicherweise auch die Fehlermeldung "Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789)" („Die Aufgabe hat ELB-Zustandsprüfungen in (Zielgruppe arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789) nicht bestanden“).

Lösung

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 von AWS CLI verwendest.

Einen HTTP [5xx]/[4xx]/[3xx]- oder (Request timed out (Zeitüberschreitung bei Anforderung))-Fehler beheben

Die Zustandsprüfungskonfiguratoin deines Load Balancers überprüfen

Du erhältst diese Fehler, wenn der Elastic Load Balancing (ELB)-Load Balancer einen 200-HTTP-Code erwartet, stattdessen aber einen 3xx-, 4xx- oder 5xx-Fehlercode empfängt. Infolgedessen stoppt der Load Balancer die Aufgabe und markiert sie als fehlerhaft. Um dieses Problem zu beheben, konfiguriere den richtigen Zustandsprüfungspfad oder ändere die Einstellungen für die Zustandsprüfung.

Informationen zu HTTP-Fehlern in deinem Application Load Balancer findest du unter Der Load Balancer generiert einen HTTP-Fehler.

Wenn die Amazon ECS-Aufgabe innerhalb des Timeout-Zeitraums nicht auf die Zustandsprüfung des Load Balancers reagiert, erhältst du den Fehler Request timed out (Zeitüberschreitung bei der Anforderung).

Sicherstellen, dass der Load Balancer Zustandsprüfungen durchführen kann

Überprüfe die folgenden Konfigurationen:

  • Die Sicherheitsgruppe, die deinem Load Balancer zugeordnet ist, ermöglicht ausgehenden Datenverkehr zu deinen Amazon ECS Task Elastic Network Interfaces auf dem registrierten Container-Port.
  • Die Amazon ECS-Sicherheitsgruppe lässt den gesamten eingehenden Verkehr auf dem registrierten Container-Port von der Sicherheitsgruppe zu, die deinem Load Balancer zugeordnet ist.

Deine Timeout-Parameter konfigurieren

Wenn deine Amazon ECS-Aufgaben nur langsam auf Zustandsprüfungen reagieren, empfiehlt es sich, den Wert des HealthCheckGracePeriod-Parameters zu erhöhen.

Wenn deine Anwendung in der Regel lange braucht, um auf Zustandsprüfungen zu antworten, kannst du auch den Timeout-Wert der Zielgruppe für die Zustandsprüfung erhöhen. Dieser Parameter definiert, wie viel Zeit Amazon ECS-Aufgaben haben, auf Zustandsprüfungen zu reagieren.

Deinen Ressourcenverbrauch überprüfen

Wenn deine Anwendung Backend-Konnektivität zu einer Datenbank benötigt, überprüfe auf Datenbankebene, ob ein hoher Ressourcenverbrauch vorliegt. Ein hoher Ressourcenverbrauch kann zu Problemen bei der Anwendungsinitialisierung und zu Fehlern bei der Zustandsprüfung des Load Balancers führen.

Problembehandlung bei langsamer Reaktion

Verwende ECS Exec, um zu überprüfen, wie die Anwendung auf den Pfad und Port der Zustandsprüfung reagiert. Führe den folgenden Befehl aus, um zu überprüfen, ob das Backend unverzüglich erfolgreich reagiert hat:

curl -iv localhost:container-port/path

**Hinweis:**Ersetze container-port durch den Port, den dein Container verwendet, und path durch den Zustandsprüfungspfad.

Deine Konfiguration für die Zustandsprüfung überprüfen

Stelle zunächst sicher, dass sich die Datei in dem Pfad befindet, den du bei der Zielgruppenzustandsprüfung konfiguriert hast.

Wenn sich deine Datei am richtigen Speicherort befindet, die Zustandsprüfungen jedoch immer noch fehlschlagen, führe die folgenden Schritte aus:

  1. Öffne die Amazon Elastic Compute Cloud (Amazon EC2)-Konsole.
  2. Wähle im Navigationsbereich unter Load Balancing die Option Zielgruppen aus.
  3. Wähle die Zielgruppe aus.
  4. Wähle die Registerkarte Zustandsprüfungen und dann Bearbeiten aus.
  5. Gib auf der Seite Zielgruppe bearbeiten unter Erfolgscode den HTTP-Code aus deiner Fehlermeldung ein. Gib beispielsweise 404 ein.
  6. Wähle Speichern.

Wichtig: Stelle sicher, dass das Zielgruppenprotokoll auf das HTTP-Protokoll eingestellt ist, das deine Anwendung unterstützt.

Amazon ECS auf Ressourcenbeschränkungen überprüfen

Prüfe die Amazon ECS-Servicemetriken auf CPU- und Speicherauslastung. Wenn CpuUtilization oder MemoryUtilization konstant hoch sind, treten Leistungsprobleme auf, die dazu führen können, dass Zustandsprüfungen fehlschlagen.

Gehe wie folgt vor, um den Ressourcenverbrauch zu reduzieren:

  • Weise der Aufgabendefinition mehr CPU- und Speicherressourcen zu.
  • Um deine Konfiguration horizontal zu skalieren, erhöhe die Anzahl der laufenden Aufgaben, um den Workload gleichmäßig auf mehrere Instances zu verteilen und eine bessere Leistung bei plötzlichen Spitzen zu erzielen.
  • Bewerte regelmäßig die Leistung des Systems unter verschiedenen Lastbedingungen, um potenzielle Engpässe zu identifizieren und die Ressourcen besser zuzuweisen.
  • Überwache die Netzwerknutzung, Verbindungsmuster und Reaktionszeiten deiner Anwendung, um potenzielle Engpässe zu identifizieren und ineffiziente Netzwerknutzungsmuster zu optimieren.

Es hat sich bewährt, das Verhalten des Systems regelmäßig zu überwachen und die Konfiguration nach Bedarf anzupassen.

Zustandsprüfungsfehler aufgrund eines fehlgeschlagenen Containers beheben

Wenn die ECS-Container-Instances in deiner Aufgabe Zustandsprüfungen verwenden, die dein Service nicht bestehen kann, erhältst du den Fehler failed container health checks (Container-Zustandsprüfungen fehlgeschlagen). Informationen zur Behebung dieses Problems findest du unter Wie behebe ich Probleme bei der Container-Zustandsprüfung für Amazon ECS-Aufgaben?

Availability Zone-Probleme mit den Amazon ECS-Zielaufgaben beheben

Wenn du Ziele in einer Availability Zone registrierst, die du nicht aktivierst, erhalten die registrierten Ziele keinen Traffic. Weitere Informationen findest du unter Availability Zones und Load Balancer-Knoten.

Deine Amazon ECS-Subnetze gehören beispielsweise zu den Availability Zones us-east-1x und us-east-1y. Wenn für den Load Balancer die Availability Zones us-east-1p und us-east-1q aktiviert sind, erhältst du eine Fehlermeldung.

Um Amazon ECS so zu aktualisieren, dass es die Subnetze für die Availability Zone des Load Balancers verwendet, führe den AWS-CLI-Befehl update-service aus:

aws ecs update-service --cluster cluster-name --service service-name --region region-code --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-1","subnet-2"],"securityGroups": ["sg-abcdxyz"]}}'

**Hinweis:**Ersetze cluster-name durch deinen Cluster-Namen, service-name durch deinen Service-Namen und region-code durch deine AWS-Region. Ersetze außerdem subnet-1 und subnet-2 durch deine Subnetze und sg-abcdxyz durch deine Sicherheitsgruppe.

Ähnliche Informationen

Container-Definitionen

Deinen Amazon ECS-Service automatisch skalieren

Bewährte Methoden für Amazon ECS

Amazon ECS überwachen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten