wake-up-neo.com

AWS ECS Fehler beim Ausführen der Task: In Ihrem Cluster wurden keine Containerinstanzen gefunden

Ich versuche, ein docker-Container-Image mit AWS in ECS bereitzustellen, aber die EC2-Instanz wird nicht erstellt. Ich habe im Internet nach einer Erklärung gesucht, warum ich die folgende Fehlermeldung bekomme: 

"Beim Aufrufen des RunTask-Vorgangs ist ein Clientfehler (InvalidParameterException) aufgetreten: In Ihrem Cluster wurden keine Containerinstanzen gefunden."

Hier sind meine Schritte:  

1. Schob ein Docker-Image von Ubuntu in mein Amazon ECS-Repo.

2. Eine ECS-Taskdefinition registriert:

aws ecs register-task-definition --cli-input-json file://path/to/my-task.json 

3. Lief die Aufgabe: 

aws ecs run-task --task-definition my-task

Dennoch scheitert es.

Hier ist meine Aufgabe:

{
  "family": "my-task",
  "containerDefinitions": [
    {
        "environment": [],
        "name": "my-container",
        "image": "my-namespace/my-image",
        "cpu": 10,
        "memory": 500,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 80
            }
        ],
        "entryPoint": [
            "Java",
            "-jar",
            "my-jar.jar"
        ],
        "essential": true
    }
  ]
}

Ich habe auch versucht, die Verwaltungskonsole zum Konfigurieren eines Clusters und von Diensten zu verwenden. Ich erhalte jedoch dieselbe Fehlermeldung. Wie konfiguriere ich den Cluster für ec2-Instanzen und welche Art von Containerinstanzen muss ich verwenden? Ich dachte, der ganze Prozess bestand darin, zunächst die EC2-Instanzen zu erstellen !!

69
cosbor11

Nach ein paar Stunden Nachforschungen habe ich das herausgefunden. Amazon, wenn Sie abhören, sollten Sie dies in Ihrer Verwaltungskonsole angeben, wenn Sie einen Cluster erstellen oder Instanzen zum Cluster hinzufügen: 

"Bevor Sie einem Cluster ECS-Instanzen hinzufügen können, müssen Sie zuerst die EC2-Verwaltungskonsole aufrufen und ecs-optimized-Instanzen mit einer IAM-Rolle erstellen, an die die AmazonEC2ContainerServiceforEC2Role-Richtlinie angehängt ist."

Hier ist der Rigmarole:

1. Gehen Sie zu Ihrem EC2 Dashboard und klicken Sie auf die Schaltfläche Launch Instance.

2. Suchen Sie unter Community AMIs nach ecs-optimized und wählen Sie den für Ihre Projektanforderungen am besten geeigneten aus. Jeder wird funktionieren. Weiter klicken.

3. Wenn Sie zu Instanzdetails konfigurieren wechseln, klicken Sie auf create new IAM role link und erstellen Sie eine neue Rolle mit dem Namen ecsInstanceRole.

4. Hängen Sie die AmazonEC2ContainerServiceforEC2Role-Richtlinie an diese Rolle an.

5. Schließen Sie dann die Konfiguration Ihrer ECS-Instanz ab. 
HINWEIS: Wenn Sie einen Webserver erstellen, müssen Sie eine Sicherheitsgruppe erstellen, um den Zugriff auf Port 80 zu ermöglichen.

Nach einigen Minuten, wenn die Instanz initialisiert ist und ausgeführt wird, können Sie die Registerkarte "ECS-Instanzen" aktualisieren, die Sie auch versuchen, Instanzen hinzuzufügen. 

112
cosbor11

Derzeit kann die Amazon AWS-Weboberfläche automatisch Instanzen mit der richtigen AMI und dem richtigen Namen erstellen, damit sie sich im richtigen Cluster registrieren kann.

Obwohl alle Instanzen von Amazon mit den richtigen Einstellungen erstellt wurden, wurden meine Instanzen nicht registriert. In den Amazon AWS-Foren habe ich einen Hinweis gefunden. Es stellt sich heraus, dass Ihre Cluster einen Internetzugang benötigen. Wenn Ihre private VPC über kein Internet-Gateway verfügt, können die Cluster keine Verbindung herstellen.

Die Reparatur

Im VPC-Dashboard sollten Sie ein neues Internet Gateway erstellen und es mit der vom Cluster verwendeten VPC verbinden. Nach dem Anhängen müssen Sie die Routentabelle für die VPC aktualisieren (oder erstellen) und als letzte Zeile hinzufügen

0.0.0.0/0 igw-24b16740  

Dabei ist igw-24b16740 der Name Ihres frisch erstellten Internet-Gateways. 

31
P_W999

Andere empfohlene Überprüfungen

1) Die Auswahl des vorgeschlagenen AMI, der für die angegebene Region angegeben wurde, löste mein Problem. Um die AMI herauszufinden, überprüfen Sie diese URL http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

2) Standardmäßig werden alle ec2-Instanzen zum Standardcluster hinzugefügt. Also ist auch der Name des Clusters wichtig.

Siehe Punkt 10 hier http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html

Weitere Informationen in diesem Thread https://forums.aws.Amazon.com/thread.jspa?threadID=189513

11
sanath_p

Nur für den Fall, dass jemand anderes mit diesem Problem blockiert ist, wie ich es war ... Ich habe hier alles ausprobiert und habe bei mir nicht funktioniert.

Abgesehen davon, was hier gesagt wurde, bezieht sich die EC2-Instanz-Rolle, wie kommentiert hier , in meinem Fall nur, wenn ich die EC2-Instanz noch mit einfachen Informationen konfiguriert habe. Verwenden Sie die Benutzerdaten ein erstes Skript wie folgt:

#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=quarkus-ec2
EOF

Das Informieren des zugehörigen ECS-Clusternamens, der in dieser ecs-Konfigurationsdatei erstellt wurde, löste mein Problem. Ohne diese Konfiguration wurde im ECS-Agentenprotokoll der EC2-Instanz ein Fehler angezeigt, bei dem keine Verbindung zum ECS hergestellt werden konnte. Auf diese Weise ist die EC2-Instanz für den ECS-Cluster sichtbar.

Danach konnte ich die EC2-Instanz für meinen EC2-Cluster erhalten: enter image description here

In der AWS-Dokumentation heißt es, dass dieser Teil optional ist, aber in meinem Fall hat er ohne diese "optionale" Konfiguration nicht funktioniert.

1
Ualter Jr.

Das eigentliche Problem ist der Mangel an Erlaubnis. Solange Sie eine IAM-Rolle mit AmazonEC2ContainerServiceforEC2Role-Berechtigung erstellen und zuweisen, wird das Problem behoben.

0
Ben

Bei der Verwendung von Fargate bin ich auf dieses Problem gestoßen. Ich habe es behoben, als ich explizit launchType="FARGATE" beim Aufruf von run_task definierte.

0
Milan Cermak

Wenn Sie nach dem Erstellen des Clusters auf dieses Problem gestoßen sind

Rufen Sie die ECS-Instanz in der Liste der EC2-Instanzen auf und überprüfen Sie die IAM-Rolle, die Sie der Instanz zugewiesen haben. Sie können die Instanzen leicht identifizieren, indem der Instanzname mit ECS Instance beginnt.

 enter image description here

Klicken Sie anschließend auf die IAM-Rolle und Sie werden zur IAM-Konsole geleitet. Wählen Sie die AmazonEC2ContainerServiceforEC2Role-Richtlinie aus der Liste der Berechtigungsrichtlinien aus und speichern Sie die Rolle.

Ihre Instanzen sind kurz nach dem Speichern im Cluster verfügbar.

0
sandaru.ny

Eine andere mögliche Ursache, auf die ich gestoßen bin, war das Aktualisieren meines ECS-Cluster-AMI auf ein "Amazon Linux 2" -AMI anstelle eines "Amazon Linux AMI", wodurch mein EC2-Startskript "user_data" nicht funktionierte.

0
skeller88