Wie kann ich meine Amazon-ECS-Aufgaben mithilfe des Amazon-EC2-Starttyps ausführen, um die Application-Load-Balancer-Zustandsprüfung in Amazon ECS zu bestehen?

Lesedauer: 10 Minute
0

Eine Application-Load-Balancer-Zustandsprüfung für eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance in Amazon Elastic Container Service (Amazon ECS) gibt einen fehlerhaften Status zurück. Ich möchte, dass meine EC2-Instance die Zustandsprüfung besteht.

Kurzbeschreibung

Wenn Ihre Amazon-ECS-Aufgabe die Load Balancer-Zustandsprüfung nicht besteht, erhalten Sie in Ihrer 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: [502 or 504]) or (request timeout)“
  • „(service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed)“
  • „(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)“

Möglicherweise erhalten Sie auch die folgende Fehlermeldung von Ihrer Amazon-ECS-Task-Konsole:

„Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)“

Wenn Sie die Fehlermeldung „(service AWS-Service) (task c13b4cb40f1f4fe4a2971f76ae5a47ad) failed container health checks“ erhalten, finden Sie weitere Informationen unter Wie behebe ich die Fehler bei der Container-Zustandsprüfung für Amazon-ECS-Aufgaben?

**Anmerkung:**Eine Amazon-ECS-Aufgabe kann aus vielen Gründen den Status „ungesund“ zurückgeben. Wenn die folgenden Schritte Ihr Problem nicht lösen, finden Sie weitere Informationen unter Problembehebung bei Service Load Balancers. Um herauszufinden, warum Ihre ECS-Aufgabe gestoppt wurde, finden Sie weitere Informationen unter Überprüfen gestoppter Aufgaben auf Fehler.

Lösung

Anmerkung: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Beheben von AWS-CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Um die Probleme mit der Load Balancer-Zustandsprüfung bei Ihrer Amazon-ECS-Aufgabe zu beheben und die Application Load Balancer-Zustandsprüfung zu bestehen, überprüfen Sie Folgendes:

  • Verbindung zwischen Ihrem Load Balancer und der Amazon-ECS-Aufgabe
  • Einstellungen für die Zustandsprüfung Ihrer Zielgruppe
  • Status und Konfiguration der Anwendung in Ihrem ECS-Container
  • Status der Container-Instance

Überprüfen der Verbindung zwischen Ihrem Load Balancer und der Amazon-ECS-Aufgabe

Um sicherzustellen, dass Ihr Load Balancer Zustandsprüfungen für Ihre Amazon-ECS-Aufgaben durchführen darf, sollten Sie Folgendes beachten.

Die an Ihren Load Balancer und Ihre Container-Instance angehängten Sicherheitsgruppen oder das ECS Task Elastic Network-Interface für den awsvpc-Netzwerkmodus sind korrekt konfiguriert.

Es hat sich bewährt, verschiedene Sicherheitsgruppen für Ihren Load Balancer und Ihre Container-Instance oder Ihre Task Elastic Network-Interface zu konfigurieren. Mit diesem Ansatz lassen Sie den gesamten Verkehr zwischen Ihren Load Balancers und Container-Instances oder des Task Elastic Network-Interface für Aufgaben zu. Sie können Ihre Container-Instances auch so einrichten, dass sie Traffic auf dem Port annehmen, der für die Aufgabe angegeben wurde.

  • Vergewissern Sie sich, dass die Ihrem Load Balancer zugeordnete Sicherheitsgruppe ausgehenden Datenverkehr zu Ihren Container-Instances oder des Task Elastic Network-Interface auf dem registrierten Port zulässt. Vergewissern Sie sich, dass dies auch für den Zustandsprüfungs-Port gilt, der Ihrer Container-Instance zugeordnet ist, falls zutreffend.
  • Vergewissern Sie sich, dass die Sicherheitsgruppe, die Ihrer Container-Instance oder Task Elastic Network-Interface zugeordnet ist, den gesamten eingehenden Datenverkehr auf dem Task-Host-Portbereich zulässt, der Ihrem Load Balancer zugeordnet ist. Informationen zur Überprüfung der Sicherheitsgruppe, die Ihrem Load Balancer zugeordnet ist, finden Sie unter Sicherheitsgruppen für Ihren Application Load Balancer.

**Wichtig:**Wenn Sie die dynamische Portzuordnung verwenden, wird der Dienst auf dem dynamischen Port (normalerweise die Ports 32768 bis 65535) und nicht auf dem Host-Port verfügbar gemacht. Stellen Sie in diesem Fall sicher, dass Ihre Container-Instance-Sicherheitsgruppe den kurzlebigen Portbereich in den Zugangsregeln für den Load Balancer als Quelle widerspiegelt.

Ihr Load Balancer ist in derselben Availability Zone wie Ihre Container-Instance oder ECS-Task (elastisches Netzwerkinterface für den awsvpc-Netzwerkmodus) konfiguriert.

Wenn Sie eine Availability Zone für Ihren Load Balancer aktivieren, erstellt Elastic Load Balancing einen Load Balancer-Knoten in der Availability Zone. Wenn Sie Ziele in einer Availability Zone registrieren, die Availability Zone aber nicht aktivieren, erhalten die registrierten Ziele keinen Traffic. Weitere Informationen finden Sie unter Availability Zones und Load Balancer-Knoten.

Gehen Sie wie folgt vor, um die Availability Zones zu ermitteln, für die Ihr Load Balancer konfiguriert ist:

  1. Öffnen Sie die Amazon-EC2-Konsole.
  2. Wählen Sie im Navigationsbereich unter Load Balancing die Option Load Balancers aus.
  3. Wählen Sie den Load Balancer aus, den Sie für Ihren Amazon-ECS-Dienst verwenden.
  4. Auf der Registerkarte Beschreibung können Sie die Availability Zones unter dem Feld Availability Zones einsehen.

**Anmerkung:**Für einen Load Balancer-Applikation können Sie die Availability Zones jederzeit aktivieren oder deaktivieren. Bei einem Network Load Balancer können Sie die Availability Zones nicht deaktivieren, nachdem Sie sie aktiviert haben, aber Sie können zusätzliche Availability Zones aktivieren.

Wenn Sie Application Load Balancers verwenden, ist der zonenübergreifende Load Balancing immer aktiviert. Wenn Sie Network Load Balancer verwenden, ist der zonenübergreifende Load Balancing standardmäßig deaktiviert. Nachdem Sie den Network Load Balancer erstellt haben, können Sie den zonenübergreifenden Load Balancing jederzeit ein- oder ausschalten. Weitere Informationen finden Sie unter So funktioniert Elastic Load Balancing.

Gehen Sie wie folgt vor, um die Availability Zones zu ermitteln, für die Ihre Container-Instances konfiguriert sind:

  1. Öffnen Sie die Amazon-EC2-Konsole.
  2. Wählen Sie im Navigationsbereich unter Auto Scaling die Option Auto-Scaling-Gruppen aus.
  3. Wählen Sie die Auto-Scaling-Gruppe der Container-Instance aus, die Ihrem Cluster zugeordnet ist.
  4. Stellen Sie auf der Registerkarte Details unter Netzwerk sicher, dass die aufgelisteten Availability Zones mit den Availability Zones übereinstimmen, die für Ihren Load Balancer aufgeführt sind.

Um die Availability Zones Ihres Clusters zu ändern, öffnen Sie die AWS-CloudFormation-Konsole, wählen Sie den CloudFormation-Stack für Ihren Cluster aus und aktualisieren Sie die Subnetzkonfiguration. Gehen Sie wie folgt vor, um die Availability Zones zu ermitteln, für die Ihres Task Elastic Network-Interface für awsvpc konfiguriert ist:

  1. Öffnen Sie dieAmazon-ECS-Konsole.
  2. Wählen Sie im Navigationsbereich Clusters und dann den Cluster aus, der Ihren Dienst enthält.
  3. Wählen Sie auf der Registerkarte Dienste auf der Seite Ihres Clusters in der Spalte Dienstname den Dienst aus, den Sie überprüfen möchten.
  4. Wählen Sie Details und dann Zulässige Subnetze aus, um die Subnetze anzuzeigen, die für den Dienst aktiviert sind.
  5. Sie können die Subnetze in der Amazon-VPC-Konsole ansehen.
  6. Stellen Sie sicher, dass die Availability Zones der Subnetze mit den Availability Zones übereinstimmen, die für Ihren Load Balancer aufgeführt sind.

**Anmerkung:**Sie können die Subnetzkonfiguration eines Amazon-ECS-Dienstes nicht von der Amazon-ECS-Konsole aus ändern. Sie können den AWS-CLI-Befehl update-service verwenden, um die Subnetzkonfiguration zu ändern.

Die Netzwerk-Zugriffssteuerungsliste (ACL), die den Subnetzen Ihres Load Balancer und Ihrer ECS-Container-Instances zugeordnet ist, oder das ECS Task Elastic Network-Interface für den awsvpc-Netzwerkmodus sind korrekt konfiguriert.

Die Subnetze für Ihren Load Balancer und Ihre Container-Instance oder Task-Elastic-Netzwerkinterface können unterschiedlich sein. Um sicherzustellen, dass Datenverkehr zwischen diesen Subnetzen zulässig ist, überprüfen Sie Folgendes:

  • Stellen Sie sicher, dass die Netzwerk-ACL, die den Subnetzen Ihres Load Balancer zugeordnet ist, eingehenden Datenverkehr an den kurzlebigen Ports (1024-65535) und dem Listener-Port zulässt. Stellen Sie sicher, dass die Netzwerk-ACL auch ausgehenden Datenverkehr auf den Zustandsprüfungs- und kurzlebigen Ports zulässt.
  • Stellen Sie sicher, dass die Netzwerk-ACL, die den Subnetzen für Ihre Container-Instance zugeordnet ist, oder das Elastic-Task-Netzwerkinterface für den awsvpc-Modus eingehenden Datenverkehr auf dem Zustandsprüfungs-Port zulässt. Stellen Sie sicher, dass die Netzwerk-ACL ausgehenden Datenverkehr an den kurzlebigen Ports zulässt.

Weitere Informationen zu Netzwerk-ACLs finden Sie unter Arbeiten mit Netzwerk-ACLs.

Überprüfen der Einstellungen für die Zustandsprüfung Ihrer Zielgruppe

Gehen Sie wie folgt vor, um sicherzustellen, dass die Einstellungen für die Zustandsprüfung für Ihre Zielgruppe korrekt konfiguriert sind:

  1. Öffnen Sie die Amazon-EC2-Konsole.
  2. Wählen Sie im Navigationsbereich unter Load Balancing die Option Zielgruppen aus.
  3. Wählen Sie Ihre Zielgruppe aus.
    Wichtig: Verwenden Sie eine neue Zielgruppe. Vermeiden Sie es, Ziele manuell zur Zielgruppe hinzuzufügen, da Amazon ECS Container automatisch bei der Zielgruppe registriert und deregistriert werden.
  4. Geben Sie auf der Registerkarte Zustandsprüfungen die folgenden Informationen ein:
    Vergewissern Sie sich, dass die Felder Port und Pfad korrekt konfiguriert sind. Wenn das Feld Port nicht richtig konfiguriert ist, wird der Container möglicherweise von Ihrem Load Balancer deregistriert.
    Wählen Sie für Port die Option Traffic Port aus.
    Anmerkung: Wenn Sie Override wählen, überprüfen Sie, ob der angegebene Port mit dem Task-Host-Port übereinstimmt.
    Stellen Sie für Timeout sicher, dass der Antwort-Timeout-Wert richtig eingestellt ist.
    Anmerkung: Das Antwort-Timeout ist die Zeit, die Ihr Container zur Verfügung hat, um eine Antwort auf den Zustandsprüfungs-Ping zurückzugeben. Wenn dieser Wert niedriger ist als die für eine Antwort benötigte Zeit, schlägt die Zustandsprüfung fehl.

Überprüfen Sie den Status und die Konfiguration der Anwendung in Ihrem ECS-Container

Vergewissern Sie sich, dass die Anwendung in Ihrem ECS-Container auf die Zustandsprüfung Ihres Load Balancer reagiert

Um sicherzustellen, dass die Anwendung in Ihrem ECS-Container korrekt auf die Zustandsprüfung Ihres Load Balancer reagiert, führen Sie die folgenden Aufgaben aus:

  • Vergewissern Sie sich, dass der Ping-Port und der Zustandsprüfungs-Pfad für Ihre Zielgruppe korrekt konfiguriert sind.
  • Überwachen Sie die Kennzahlen zur CPU- und Speicherauslastung für den ECS-Dienst. Beispielsweise kann eine hohe CPU-Auslastung dazu führen, dass Ihre Anwendung nicht mehr reagiert und ein 502-Fehler oder ein Timeout verursacht wird.
  • Definieren Sie einen Mindestzeitraum für die Zustandsprüfung. Diese Einstellung weist den Service-Scheduler an, die Elastic-Load-Balancing-Zustandsprüfungen für einen vordefinierten Zeitraum zu ignorieren, nachdem eine Aufgabe instanziiert wurde. Für Ihre Amazon-ECS-Aufgabe ist möglicherweise eine längere Zustandsprüfung für die Registrierung des Network Load Balancer erforderlich.
  • Überprüfen Sie Ihre Anwendungsprotokolle auf Anwendungsfehler. Weitere Informationen finden Sie unter awslogs-Container-Protokolle in CloudWatch-Protokollen anzeigen.

Vergewissern Sie sich, dass die Anwendung in Ihrem ECS-Container den richtigen Antwortcode zurückgibt

Wenn der Load Balancer eine HTTP-GET-Anfrage an den Zustandsprüfungs-Pfad sendet, wird erwartet, dass die Anwendung in Ihrem ECS-Container den standardmäßigen Antwortcode 200 OK zurückgibt.

**Anmerkung:**Wenn Sie einen Application Load Balancer verwenden, können Sie die Matcher-Einstellung auf einen anderen Antwortcode als 200 aktualisieren. Weitere Informationen finden Sie unter Zustandsprüfungen für Ihre Zielgruppen.

  1. Verwenden Sie SSH, um eine Verbindung zu Ihrer Container-Instance herzustellen.

  2. (Optional) Installieren Sie curl mit dem für Ihr System geeigneten Befehl.
    Führen Sie für Amazon Linux und andere RPM-basierte Distributionen den folgenden Befehl aus:

    sudo yum -y install curl

    Führen Sie für Debian-basierte Systeme (wie Ubuntu) den folgenden Befehl aus:

    sudo apt-get install curl
  3. Führen Sie den folgenden Befehl aus, um die Container-ID abzurufen:

    docker ps

    **Anmerkung:**Der Port für den lokalen Listener wird in der Befehlsausgabe unter PORTS am Ende der Sequenz angezeigt.

  4. Führen Sie den Befehl docker inspect aus, um die IP-Adresse des Containers abzurufen:

    $ IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' 112233445566)

    Anmerkung: Die IP-Adresse des Containers wird in IPADDR gespeichert. Verwenden Sie diesen Befehl nur, wenn Sie den BRIDGE-Netzwerkmodus verwenden. Achten Sie darauf, 112233445566 durch die ID-Nummer des Containers zu ersetzen.
    Wenn Sie den awsvpc-Netzwerkmodus verwenden, verwenden Sie die Task-IP-Adresse, die das Task Elastic Network-Interface zugewiesen wurde. Wenn Sie den HOST-Netzwerkmodus verwenden, verwenden Sie die IP-Adresse des Hosts, über den die Aufgabe verfügbar gemacht wird.

  5. Um den Statuscode abzurufen, führen Sie einen curl-Befehl aus, der IPADDR und den Port des lokalen Listeners enthält. Wenn Sie beispielsweise den Befehl „curl“ auf einem Container ausführen, der Port 8080 mit dem Zustandsprüfpfad /health überwacht, muss der Befehl den Antwortcode 200 OK zurückgeben:

    curl -I http://${IPADDR}:8080/health

    Wenn Sie eine Nicht-HTTP-Fehlermeldung erhalten, hört Ihre Anwendung den HTTP-Verkehr nicht ab. Wenn Sie einen HTTP-Statuscode erhalten, der sich von dem unterscheidet, was Sie in der Matcher-Einstellung angegeben haben, hört Ihre Anwendung den HTTP-Verkehr ab, gibt aber keinen Statuscode für ein fehlerfreies Ziel zurück.

Überprüfen des Status Ihrer Container-Instance

Angenommen, Sie erhalten die folgende Ereignismeldung von Ihrem AWS-ECS-Serviceevent:

„(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)“

Überprüfen Sie den Status Ihrer Container-Instance, indem Sie sich die Statusüberprüfung auf der Amazon-EC2-Konsole ansehen. Wenn Ihre Instance die Systemstatusprüfungen nicht besteht, versuchen Sie, Ihre Instance zu stoppen und zu starten.

Weitere Informationen

Konfigurieren einer Zielgruppe für das Routing

Service Load Balancing

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren