Direkt zum Inhalt

Wie behebe ich ein Problem mit einem getrennten Amazon ECS-Agenten?

Lesedauer: 7 Minute
0

Meine Container-Instances für Amazon Elastic Container Service (Amazon ECS) sind nicht verbunden.

Kurzbeschreibung

Es ist normal, dass dein Amazon ECS-Container-Agent im Rahmen des normalen Betriebs innerhalb einer Stunde mehrfach die Verbindung trennt und wiederherstellt. Veränderungsereignisse, die nur wenige Minuten dauern, werden erwartet und deuten möglicherweise nicht auf Probleme mit dem Container-Agenten oder deiner Container-Instance hin.

Wenn der Container-Agent jedoch länger im getrennten Zustand bleibt, kann die Container-Instance nicht als Teil des Amazon ECS-Clusters betrieben werden. Dieses Problem kann aus einem der folgenden Gründe verursacht werden:

  • Netzwerkprobleme verhindern die Kommunikation zwischen der Instance und Amazon ECS.
  • Der Container-Agent verfügt nicht über die erforderlichen AWS Identity and Access Management (IAM)-Berechtigungen für die Kommunikation mit Amazon ECS-Endpunkten.
  • Es gibt Probleme mit dem Host- oder Docker-Daemon innerhalb der Container-Instance.
  • Auf dem zugrunde liegenden Host gibt es einen Ressourcenkonflikt.

Es ist eine bewährte Methode, die neueste Version des Amazon-ECS-Container-Agenten zu verwenden.

Lösung

Hinweis: Die folgende Lösung gilt für Amazon ECS-optimierte Amazon Linux 2023-AMIs.

Du kannst SSH-Schlüssel verwenden, um eine Verbindung zu den Amazon EC2-Instances herzustellen. Wenn du die SSH-Schlüssel nicht generiert hast, kannst du den Session Manager, eine Funktion von AWS Systems Manager, verwendest, um eine Verbindung zu der Instance herzustellen. Standardmäßig ist der Systems Manager Agent auf Amazon Linux 2023-AMIs und dem für Amazon Linux 2023 ECS-optimierten Basis-AMI installiert.

Sicherstellen, dass der Container-Agent auf der Container-Instance ausgeführt wird

Führe einen der folgenden Befehle auf der Container-Instance aus, um den Status und die Konnektivität des Amazon ECS-Container-Agenten zu überprüfen:

sudo systemctl status ecs
sudo docker ps -f name=ecs-agent

Die Ausgabe spezifiziert active (aktiv) und sieht ähnlich aus wie die folgende:

ecs.service - Amazon Elastic Container Service - container agent
        Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; preset: disabled)
        Active: active (running) since Thu 2026-02-19 08:42:39 UTC; 1min 17s ago
          Docs: https://aws.amazon.com/documentation/ecs/
     Main PID: 2578 (amazon-ecs-init)
        Tasks: 5 (limit: 9497)
       Memory: 136.5M
          CPU: 214ms
       CGroup: /system.slice/ecs.service
               └─2578 /usr/libexec/amazon-ecs-init start

CONTAINER ID  IMAGE                           COMMAND   CREATED         STATUS
8ab4e7c372d7  amazon/amazon-ecs-agent:latest  "/agent"  2 minutes ago   Up 2 minutes (healthy)

Wenn das Problem durch einen getrennten Agenten verursacht wird, führe den folgenden Befehl aus, um den ECS-Agenten neu zu starten:

sudo systemctl restart ecs

Hinweis: Nach der Ausführung des vorhergehenden Befehls wird keine Ausgabe zurückgegeben.

Führe den folgenden Befehl aus, um zu überprüfen, ob der Agent ausgeführt wird:

sudo systemctl status ecs

Sicherstellen, dass der Docker-Service auf der Container-Instance ausgeführt wird

Führe den folgenden Befehl aus, um zu überprüfen, ob der Docker-Service auf der betroffenen Container-Instance ausgeführt wird:

sudo systemctl status docker

Die Ausgabe spezifiziert active (aktiv) und sieht ähnlich aus wie die folgende:

docker.service - Docker Application Container Engine
        Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: disabled)
        Active: active (running) since Thu 2026-02-19 08:42:37 UTC; 3min 46s ago
   TriggeredBy: docker.socket
          Docs: https://docs.docker.com
     Main PID: 2314 (dockerd)
        Tasks: 13
       Memory: 485.3M
          CPU: 4.846s
       CGroup: /system.slice/docker.service
               └─2314 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536

Wenn der Docker-Service inaktiv ist, führe den folgenden Befehl aus, um den Docker-Service neu zu starten:

sudo systemctl restart docker

Hinweis: Nach der Ausführung des vorhergehenden Befehls wird keine Ausgabe zurückgegeben.

Führe den folgenden Befehl aus, um zu überprüfen, ob der Docker-Service neu gestartet wurde:

sudo systemctl status docker

Die Protokolldateien für den Container-Agenten und Docker überprüfen

Wenn die Container-Instance immer noch nicht verbunden sind, dann überprüfe die Protokolldateien auf dem Container-Host für den Container-Agenten und Docker.

Überprüfe die folgenden Protokolldateien auf Schlüsselwörter wie „error“, „warn“ oder „agent transition state“:

  • Zeige die neuesten Protokolle des Amazon-ECS-Container-Agenten unter /var/log/ecs/ecs-agent.log an. Du kannst das rotierte Protokoll anzeigen, indem du nach /var/log/ecs/ecs-agent-log.timestamp filterst.
  • Das Amazon ECS-Initialisierungsprotokoll unter /var/log/ecs/ecs-init.log ansehen
  • Die Ausführungsprotokolle der Benutzerdaten unter /var/log/cloud-init.log ansehen
  • Die Docker-Daemon-Protokolle mit dem Befehl sudo journalctl -u docker ansehen

Wenn du Linux verwendest, kannst du auch die Beendencodes überprüfen, um weitere Informationen über den gestoppten Agenten-Container zu erhalten.

Führe den folgenden Befehl aus, um den Beendencode abzurufen:

docker inspect <your container ID>

Hinweis: Ersetze die Container-ID durch die ID des gestoppten Containers.

Du kannst den Amazon ECS-Protokollsammler verwenden, um allgemeine Betriebssystemprotokolle, Docker-Protokolle und Container-Agenten-Protokolle für Amazon ECS zu sammeln.

Sicherstellen, dass das IAM-Instance-Profil über die erforderlichen Berechtigungen verfügt

Wenn der Container-Agent immer noch getrennt ist, überprüfe, ob das mit der Container-Instance verknüpfte IAM-Instance-Profil über die erforderlichen IAM-Berechtigungen verfügt:

  1. Verwende SSH oder Session Manager, um eine Verbindung zur Instance herzustellen.

  2. Führe den folgenden Befehl aus, um die Instance-Metadaten im Instance-Profil anzuzeigen, das der Instance zugeordnet ist:

    TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
    curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/info
    

    Die Ausgabe sieht ähnlich wie die folgende aus:

    {
       "Code" : "Success",
       "LastUpdated" : "2026-02-19T08:42:14Z",
       "InstanceProfileArn" : "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole",
       "InstanceProfileId" : "AIPA4VIZXOFF55F72XIZN"
    }
    
  3. Stelle sicher, dass die IAM-Rolle die richtigen Berechtigungen für die Container-Instances enthält.

  4. Um spezifische Fehler bei Anmeldeinformationen zu überprüfen, führe den folgenden Befehl aus, um das Protokoll des Container-Agenten zu prüfen:

    cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-##
    

    Hinweis: Ersetze YYYY-MM-DD-## durch den relevanten Zeitstempel.

    Das Protokoll des Container-Agenten wird stündlich rotiert. Das Suffix ändert sich automatisch, um das aktuelle Datum und die aktuelle Uhrzeit widerzuspiegeln. Aktualisiere den Befehl, sodass er den Datumsbereich und die Protokoll-ID enthält, wann das Problem aufgetreten ist.

Sicherstellen, dass die Container-Instance über genügend Ressourcen verfügt, um den ECS-Agenten auszuführen

Wenn deine Aufgaben eine hohe Speicher- oder CPU-Auslastung aufweisen, verfügt deine Container-Instance möglicherweise nicht über genügend Ressourcen, um den ECS-Agenten auszuführen.

Der Amazon-ECS-Container-Agent verwendet die Docker-Funktion ReadMemInfo(), um die Menge des für das Betriebssystem verfügbaren Arbeitsspeichers abzufragen.

Führe den folgenden Befehl auf deiner Container-Instance aus, um den gesamten vom Betriebssystem erkannten Arbeitsspeicher anzuzeigen:

free -b

Beispielausgabe für eine t2.large-Instance, auf der das Amazon ECS-optimierte Amazon Linux 2023-AMI ausgeführt wird:

               total        used        free      shared  buff/cache   available
Mem:     8327938048   337494016  6402355200      557056  1588088832  7745118208
Swap:             0           0           0

Du kannst etwas Arbeitsspeicher für den Amazon-ECS-Container-Agenten und andere wichtige Systemprozesse auf deinen Container-Instances reservieren. Die Reservierung dieses Speichers hilft sicherzustellen, dass die Container deiner Aufgabe nicht um denselben Speicher konkurrieren. Weitere Informationen findest unter Arbeitsspeicher für Linux-Container-Instances von Amazon ECS reservieren.

Sicherstellen, dass die Umgebungsvariable ECS_CLUSTER den richtigen Clusternamen hat

Wenn der Konfigurationsparameter ECS_CLUSTER des Amazon-ECS-Container-Agenten den falschen Clusternamen hat, kann die Container-Instance dem Cluster nicht beitreten. Um den Inhalt der Datei /etc/ecs/ecs.config zu überprüfen und diesen Parameter zu verifizieren, führe den folgenden Befehl aus:

cat /etc/ecs/ecs.config

Sicherstellen, dass der ECS-Agent mit ECS-Endpunkten kommunizieren kann

Um eine Verbindung mit ECS-Endpunkten herzustellen, müssen die Netzwerk-Zugriffssteuerungslisten und die Container-Instance-Sicherheitsgruppe ausgehende Verbindungen auf Port 443 (HTTPS) zulassen.

Wenn sich deine Container-Instance in einem öffentlichen Subnetz befindet, überprüfe, ob die Instance eine öffentliche IP-Adresse hat und die Routing-Tabelle des Subnetzes eine Route zu einem Internet-Gateway aufweist.

Wenn sich deine Container-Instance in einem privaten Subnetz befindet, überprüfe, ob die Routing-Tabelle des Subnetzes eine Route zu einem NAT-Gateway aufweist oder ob du VPC-Endpunkte für Amazon ECS konfiguriert hast.

Um die ausgehenden Verbindungen zu ECS-Endpunkten (ACS/TCS) zu überprüfen, führe einen der folgenden Befehle auf die Container-Instance aus:

sudo yum install telnet -y
telnet ecs.REGION.amazonaws.com 443

oder

curl https://ecs.REGION.amazonaws.com

Hinweis: Ersetze REGION durch deine AWS-Region.

Überprüfe die folgenden bewährten Methoden:

  • Verwende die Amazon ECS-optimierten Linux-AMIs, um deine ECS-Workloads auszuführen, es sei denn, deine Anwendung erfordert ein bestimmtes Betriebssystem oder eine Docker-Version, die im Amazon ECS-optimierten AMI nicht verfügbar ist.
  • Verwende die neueste Version des Amazon-ECS-Container-Agenten. Die neueste Version enthält erweiterte Funktionen und bietet wichtige Updates.
  • Konfiguriere Aufgaben mit CPU- und Speicherlimits.

Ähnliche Informationen

Amazon-ECS-Fehlersuche

IAM-Rolle für Amazon-ECS-Container-Instance

Protokolle des Amazon-ECS-Container-Agenten anzeigen

AWS OFFICIALAktualisiert vor 7 Monaten