Warum kann meine Amazon-ECS- oder Amazon-EC2-Instance dem Cluster nicht beitreten?

Letzte Aktualisierung: 18.08.2022

Ich kann meine Instance aus der Amazon Elastic Compute Cloud (Amazon EC2) nicht bei einem Cluster des Amazon Elastic Container Service (Amazon ECS) anmelden.

Kurzbeschreibung

Ihre Amazon-EC2-Instance kann sich aus einem oder mehreren der folgenden Gründe nicht bei einem ECS-Cluster anmelden oder einem ECS-Cluster beitreten:

  • Der ECS-Endpunkt kann nicht öffentlich auf den DNS-Hostnamen der Instance zugreifen.
  • Ihre öffentlichen Subnetzkonfigurationen sind falsch.
  • Ihre privaten Subnetzkonfigurationen sind falsch.
  • Ihre VPC-Endpunkte sind falsch konfiguriert.
  • Ihre Sicherheitsgruppen erlauben keinen Netzwerkverkehr.
  • Die EC2-Instance verfügt nicht über die erforderlichen Berechtigungen im AWS Identity and Access Management (IAM). Oder der API-Aufruf ecs:RegisterContainerInstance wird verweigert.
  • Die Instance-Benutzerdaten für Ihren ECS-Container sind nicht richtig konfiguriert.
  • Der ECS-Agent wurde angehalten oder läuft nicht auf der Instance.
  • Die Startkonfiguration der Auto-Scaling-Gruppe ist nicht korrekt (wenn Ihre Instance Teil einer Auto-Scaling-Gruppe ist).
  • Das für Ihre Instance verwendete Amazon Machine Image (AMI) erfüllt die Voraussetzungen nicht.

Lösung

Wichtig: Verwenden Sie das AWS-Systems-Manager-Runbook AWSSupport-TroubleshootECSContainerInstance, um häufig auftretende Probleme zu beheben, die im vorherigen Abschnitt aufgeführt sind. Wenn die Ausgabe des Runbooks keine Empfehlungen enthält, gehen Sie nach den in den folgenden Abschnitten erläuterten Methoden zur manuellen Problembehandlung vor.

Verwendung des Systems-Manager-Automation-Runbook

Mit dem Runbook AWSSupport-TroubleshootECSContainerInstance können Sie Fehler der EC2-Instance beheben, die sich nicht beim ECS-Cluster anmelden kann. Diese Automatisierung überprüft Folgendes:

  • Enthalten die Benutzerdaten für die Instance die richtigen Cluster-Informationen?
  • Enthält das Instance-Profil die erforderlichen Berechtigungen?
  • Gibt es Probleme mit der Netzwerkkonfiguration?

Wichtig: Verwenden Sie das Runbook AWSSupport-TroubleshootECSContainerInstance in derselben AWS-Region, in der sich Ihr ECS-Cluster und Ihre EC2-Instance befinden.

  1. Öffnen Sie die AWS-Systems-Manager-Konsole.
  2. Wählen Sie im Navigationsbereich unter Change Management die Option Automation (Automatisierung) aus.
  3. Wählen Sie Execute automation (Automatisierung ausführen).
  4. Wählen Sie die Registerkarte Owned by Amazon (Im Besitz von Amazon).
  5. Suchen Sie unter Automation document (Automatisierungsdokument) nach TroubleshootECSContainerInstance.
  6. Wählen Sie die Karte AWSSupport-TroubleshootECSContainerInstance aus.
    Hinweis: Stellen Sie sicher, dass Sie das Optionsfeld und nicht den verlinkten Namen der Automatisierung auswählen.
  7. Wählen Sie Weiter.
  8. Stellen Sie für Execution automation document (Dokument zur Ausführungsautomatisierung) sicher, dass Simple execution (Einfache Ausführung) ausgewählt ist.
  9. Geben Sie im Abschnitt Input parameters (Eingabeparameter) für AutomationAssumeRole den Amazon-Ressourcennamen (ARN) der Rolle ein, die Systems Manager Automation erlaubt, Aktionen auszuführen.
    Hinweis: Wenn Sie keine IAM-Rolle angeben, verwendet Systems Manager Automation die Berechtigungen der IAM-Benutzerrolle, die das Runbook ausführt. Weitere Informationen zum Erstellen der Übernahme der Rolle für Systems Manager Automation finden Sie unter Aufgabe 1: Erstellen einer Servicerolle für Automatisierung.
    Wichtig: Stellen Sie sicher, dass entweder die AutomationAssumeRole oder der IAM-Benutzer/die IAM-Rolle über Berechtigungen für die folgenden Aktionen verfügen: ec2:DescribeIamInstanceProfileAssociations, ec2:DescribeInstanceAttribute, ec2:DescribeInstances, ec2:DescribeNetworkAcls, ec2:DescribeRouteTables, ec2:DescribeSecurityGroups, ec2:DescribeSubnets, ec2:DescribeVpcs, ec2:DescribeVpcEndpoints, iam:GetInstanceProfile, iam:GetRole, iam:SimulateCustomPolicy und iam:SimulatePrincipalPolicy.
  10. Geben Sie für ClusterName den Clusternamen ein, bei dem sich die EC2-Instance nicht anmelden konnte.
  11. Geben Sie für InstanceId die EC2-Instance-ID ein, die sich nicht anmelden konnte.
  12. Wählen Sie Execute (Ausführen).

Die Ausgabe des Runbooks enthält Schritte zur Fehlerbehebung und Empfehlungen zur Behebung des Problems, das dazu führte, dass sich Ihre EC2-Instance nicht im Cluster anmelden konnte.

Überprüfen Sie den Status des Amazon-ECS-Agenten auf der Amazon-Linux-2-Instance

Prüfen Sie, ob der ECS-Agent auf der Instance ausgeführt wird, indem Sie den folgenden Befehl ausführen:

sudo status ecs

Wenn der Container-Agent nicht auf Ihrer Container-Instance ausgeführt wird, führen Sie den folgenden Befehl aus, um den Agenten zu starten:

sudo start ecs

Die Ausgabe der Befehlsausgabe muss etwa wie folgt aussehen:

ecs start/running, process 23403

Startkonfigurationen überprüfen

Wenn Ihre Instance als Teil einer Auto-Scaling-Gruppe gelauncht wird, stellen Sie sicher, dass die Startkonfiguration der Auto-Scaling-Gruppe korrekt ist. Weitere Informationen finden Sie in Schritt 5 in Aktualisieren eines Container-Instance-Clusters von Amazon ECS mit einem neuen AMI.

Prüfen Sie das AMI Ihrer Instance

Wenn das für die EC2-Instance verwendete AMI ein kopiertes AMI oder ein benutzerdefiniertes AMI ist, müssen Sie sicherstellen, dass die Instance über die folgenden Komponenten verfügt:

Die Amazon-ECS-optimierten AMIs sind mit diesen Anforderungen vorkonfiguriert. Daher ist es eine bewährte Methode, sie für Ihre Container-Instances zu verwenden, sofern Ihre Anwendung kein bestimmtes Betriebssystem oder eine Docker-Version benötigt, die in diesem AMI noch nicht verfügbar ist.

Überprüfen Sie die Protokolle

Wenn das Problem weiterhin besteht, sammeln Sie die Protokolle mit dem ECS Logs Collector und überprüfen Sie dann die Protokolle, um die Ursache zu ermitteln. Sie können auch Protokolldateien auf dem Container-Host für den Container-Agenten und Docker überprüfen.

Führen Sie die folgenden Befehle aus, um die Protokolldateien für den Container-Agent und Docker anzuzeigen:

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

Häufige Fehler

Fehler: Launchen einer neuen EC2-Instance. Statusgrund: Dieses Konto ist derzeit gesperrt und nicht als gültiges Konto anerkannt. Bitte wenden Sie sich bei Fragen an aws-verification@amazon.com. Das Launchen der EC2-Instance ist fehlgeschlagen.

Wenden Sie sich wie im Statusgrund angegeben an aws-verification@amazon.com und geben Sie an, dass Sie Ihr Konto entsperren müssen.

Fehler: re-registering (erneutes Anmelden): ClientException: Container instance 12345678910xxxxxxxxxxxx is inactive.\n\tstatus code: 400, request id: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

Sie erhalten diesen Fehler, wenn der ECS-Agent die EC2-Container-Instance nicht beim ECS-Cluster anmelden kann, da die EC2-Instance jetzt inaktiv ist. Dieser Fehler hängt mit der Anwendung zusammen, die auf der Instance ausgeführt wird. Um die Ursache des Fehlers zu verstehen, überprüfen Sie die Anwendung. Wenn der Fehler weiterhin besteht, überprüfen Sie die Protokolle des ECS-Agenten.

Fehler: Einige Instances können dem Cluster beitreten, aber mit denselben Konfigurationen können andere Instances dem Cluster nicht beitreten.

Dieser Fehler kann durch ThrottlingException verursacht werden, die sich ergibt, wenn das Ratenlimit für einen bestimmten API-Aufruf überschritten wird. Um diesen Fehler zu beheben, erhöhen Sie das Ratenlimit auf Kontoebene. Achten Sie darauf, nach APIs wie RegisterTargets und RegisterContainerInstance zu suchen.

Fehler: Nach dem Ändern des Instance-Typs können neue Instances dem Cluster nicht beitreten.

Dieser Fehler wird verursacht, wenn der ECS-Agent im Status „ausstehend“ feststeckt und den Instance-Typ nicht ändern kann. Im Gegensatz zu anderen EC2-Instances können Sie die ECS-Instance nicht anhalten, den Instance-Typ ändern und sie dann erneut starten. Um den Instance-Typ in ECS zu ändern, müssen Sie die Container-Instance beenden und dann eine neue Container-Instance mit der gewünschten Instance-Größe unter Verwendung des neuesten Amazon-ECS-optimierten Amazon-Linux-2-AMI für Ihren gewünschten Cluster launchen. Sie können auch eine neue Startkonfiguration erstellen und diese Startkonfiguration dann in der Auto-Scaling-Gruppe aktualisieren.

Fehler: Unable to register as a container instance with ECS (Anmelden als Container-Instance bei ECS nicht möglich): AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster . status code: 400, request id: 0a123456-7899-10101-a987-6543210deff

2019-06-29T16:10:09Z [ERROR] Error re-registering (Fehler beim erneuten Anmelden): AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster status code: 400, request id: 0a123456-7899-10101-a987-123456pqrs

Diese Fehler werden durch fehlende IAM-Berechtigungen verursacht. Um diese Fehler zu beheben, lesen Sie die Anweisungen unter Überprüfen der IAM-Rolle der Amazon-ECS-Container-Instance.

Führen Sie außerdem das AWSSupport-TroubleshootECSContainerInstance-Runbook aus, um festzustellen, welche Berechtigungen in der Container-Instance-Rolle fehlen.