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

114

Ich versuche, ein dockerContainer-Image für die AWSVerwendung ECSbereitzustellen, aber die EC2-Instanz wird nicht erstellt. Ich habe im Internet nach einer Erklärung gesucht, warum ich den folgenden Fehler erhalte:

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

Hier sind meine Schritte:

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

2. Registrierte eine ECS-Aufgabendefinition:

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

3. Führen Sie die Aufgabe aus:

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

Es schlägt jedoch fehl.

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, mithilfe der Verwaltungskonsole einen Cluster und Dienste zu konfigurieren, erhalte jedoch den gleichen Fehler. Wie konfiguriere ich den Cluster für ec2-Instanzen und welche Art von Containerinstanzen muss ich verwenden? Ich dachte, dieser ganze Prozess bestand darin, zunächst die EC2-Instanzen zu erstellen !!

cosbor11
quelle
Ich habe das Gefühl, dass ich das gesehen habe, als ich zwischen den Schritten des Erstellens eines Clusters und des Ausführens einer Aufgabe schnell gegangen bin.
Ben Creasy

Antworten:

156

Ich fand das nach ein paar Stunden Nachforschungen heraus. Amazon, wenn Sie zuhören, sollten Sie dies irgendwo 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 zunächst die EC2-Verwaltungskonsole aufrufen und ecs-optimizedInstanzen mit einer IAM-Rolle erstellen , an die die AmazonEC2ContainerServiceforEC2RoleRichtlinie angehängt ist."

Hier ist das Rigmarole:

1. Gehen Sie zu Ihrem EC2-Dashboard und klicken Sie auf die Launch InstanceSchaltfläche.

2. Community AMIsSuchen Sie unter Suchen nach ecs-optimizedund wählen Sie diejenige aus, die Ihren Projektanforderungen am besten entspricht. Jeder wird funktionieren. Weiter klicken.

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

4. Hängen Sie die AmazonEC2ContainerServiceforEC2RoleRichtlinie an diese Rolle an.

5. Beenden Sie anschließend die Konfiguration Ihrer ECS-Instanz.
ANMERKUNG: Wenn Sie einen Webserver erstellen, möchten Sie eine Sicherheitsgruppe erstellen, um den Zugriff auf Port 80 zu ermöglichen.

Nach einigen Minuten, wenn die Instanz initialisiert und ausgeführt wird, können Sie die Registerkarte ECS-Instanzen aktualisieren, auf der Sie auch Instanzen hinzufügen möchten.

cosbor11
quelle
10
Die Auswahl des vorgeschlagenen Ami, der für die angegebene Region angegeben wurde, löste mein Problem. Um das Ami herauszufinden, sollten Sie diese URL überprüfen docs.aws.amazon.com/AmazonECS/latest/developerguide/…
sanath_p
1
Wenn Sie AmazonEC2ContainerServiceforEC2Role nicht sehen, hat sich seit Ihrem letzten Beitrag etwas geändert?
BlueDolphin
1
@BlueDolphin Ich konnte diese Richtlinie finden, als ich eine neue Rolle in IAM erstellt habe.
Cyrf
6
Es ist erwähnenswert, dass Sie jetzt (April 2018) das aktuelle Beta-Fargate ( aws.amazon.com/fargate ) verwenden, um diesen ganzen Ärger zu vermeiden. Vielleicht möchten Sie, dass ich nur diesen Starttyp ausgewählt habe, EC2als Sie diesen Fehler erhalten haben ...
Deklination
10
Und wenn EC2 zu schaffen, vergessen Sie nicht , hinzuzufügen , #!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.configin , Advanced Details -> User datawenn Sie Ihre eigenen, nicht Standard - Cluster haben. Andernfalls erstellt die neu erstellte EC2-Instanz einen Standardcluster.
Jakub Czaplicki
40

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

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 kein Internet-Gateway hat, 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  

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

P_W999
quelle
Dies wird unter docs.aws.amazon.com/AWSEC2/latest/UserGuide/… [EC2-VPC] erwähnt. Überprüfen Sie die Routentabelle für das Subnetz. Sie benötigen eine Route, die den gesamten außerhalb der VPC bestimmten Datenverkehr an das Internet-Gateway für die VPC sendet.
Justin M. Keyes
2
Danke für den Hinweis! Ich hatte meinen Instanzen eine Sicherheitsgruppe zugewiesen, die den gesamten ausgehenden Datenverkehr mit Ausnahme des Datenverkehrs zu meinem Load Balancer blockierte. Ich habe dies umgeschaltet, um den gesamten ausgehenden Datenverkehr zuzulassen, aber den eingehenden Datenverkehr nur vom Load Balancer einzuschränken. Die Instanzen wurden dann in meinem EC2-Cluster angezeigt.
Mikepote
1
Ich wünschte, ich könnte Ihre Antwort mehr als einmal abstimmen. Dies hat mein genaues Problem behoben. "In Ihrem Cluster wurden keine Containerinstanzen gefunden." und die ursprüngliche Antwort, für die mehr gestimmt wurde, hatte nichts mit Ihrer tatsächlichen Lösung zu tun. Danke nochmal.
Alexkb
Möglicherweise müssen Sie das Gateway nicht nur Ihrer VPC zuordnen, sondern auch den Internetverkehr für das spezifische Subnetz, in dem sich Ihre ECS-Instanzen befinden, durch das Gateway leiten. - zum Beispiel aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID- kann ich vorschlagen, dies der Antwort hinzuzufügen?
Greg
Ich denke, es ist erwähnenswert, dass das Subnetz in dem Moment, in dem Sie eine Route für 0.0.0..0 / 0 hinzufügen, die auf ein IGW zeigt, kein privates Subnetz mehr ist. Aus Sicht der Netzwerksicherheit ist es besser, eine Route zu erstellen, die auf ein NAT-Gateway verweist.
Henrik Pingel
18

Ich bin auf dieses Problem gestoßen, als ich Fargate verwendet habe. Ich habe es behoben, als ich es beim Aufruf explizit definiert habe .launchType="FARGATE"run_task

Milan Cermak
quelle
1
Mit der CLI habe ich hinzugefügt--launch-type FARGATE
shlomiLan
11

Andere vorgeschlagene Überprüfungen

  1. Die Auswahl des vorgeschlagenen AMI, der für die angegebene Region angegeben wurde, löste mein Problem.

    Informationen zum AMI finden Sie unter Starten einer Amazon ECS-Containerinstanz .

  2. Standardmäßig werden alle ec2-Instanzen zum Standardcluster hinzugefügt. Daher ist auch der Name des Clusters von Bedeutung.

Siehe Punkt 10 unter Starten einer Amazon ECS-Containerinstanz .

Weitere Informationen finden Sie in diesem Thread .

sanath_p
quelle
3

Nur für den Fall, dass jemand anderes mit diesem Problem blockiert ist, wie ich es war ... Ich habe hier alles versucht und nicht für mich gearbeitet.

Abgesehen davon, was hier über die hier kommentierte Rolle der EC2-Instanz gesagt wurde , hat sie in meinem Fall nur funktioniert, wenn ich die EC2-Instanz noch mit einfachen Informationen konfiguriert habe. Verwenden der 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, hat mein Problem behoben. Ohne diese Konfiguration zeigte das ECS-Agentenprotokoll an der EC2-Instanz einen Fehler an, bei dem keine Verbindung zum ECS hergestellt werden konnte. Dabei wurde die EC2-Instanz für den ECS-Cluster sichtbar.

Danach konnte ich die EC2-Instanz für meinen EC2-Cluster verfügbar machen: Geben Sie hier die Bildbeschreibung ein

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

Ualter Jr.
quelle
2

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

Gehen Sie zur ECS-Instanz in der Liste der EC2-Instanzen und überprüfen Sie die IAM-Rolle, die Sie der Instanz zugewiesen haben. Sie können die Instanzen leicht anhand des Instanznamens identifizieren, mit dem begonnen wirdECS Instance

Geben Sie hier die Bildbeschreibung ein

Klicken Sie anschließend auf die IAM-Rolle, um zur IAM-Konsole zu gelangen. Wählen Sie die AmazonEC2ContainerServiceforEC2RoleRichtlinie aus der Liste der Berechtigungsrichtlinien aus und speichern Sie die Rolle.

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

sandaru.ny
quelle
1

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

Ben
quelle
0

Eine andere mögliche Ursache, auf die ich stieß, war das Aktualisieren meines ECS-Cluster-AMI auf ein "Amazon Linux 2" -AMI anstelle eines "Amazon Linux AMI", was dazu führte, dass mein EC2-Startskript "user_data" nicht funktionierte.

skeller88
quelle
0

In diesem Fall müssen Sie Folgendes beachten:

  1. Ihre EC2-Instanzen sollten eine Rolle mit AmazonEC2ContainerServiceforEC2Roleverwalteten Richtlinien haben
  2. Auf Ihren EC2-Instanzen sollte ein AMI-Image ausgeführt werden ecs-optimized(dies können Sie im EC2-Dashboard überprüfen).
  3. In den privaten Subnetzen Ihrer VPC sind keine öffentlichen IP-Adressen zugewiesen, ODER Sie haben keinen konfigurierten Schnittstellen-VPC-Endpunkt, oder Sie haben kein NAT-Gateway eingerichtet

Meistens tritt dieses Problem aufgrund der falsch konfigurierten VPC auf. Laut Dokumentation :

ZITAT: Wenn Sie keinen Schnittstellen-VPC-Endpunkt konfiguriert haben und Ihre Containerinstanzen keine öffentlichen IP-Adressen haben, müssen sie NAT (Network Address Translation) verwenden, um diesen Zugriff bereitzustellen.

  • So erstellen Sie einen VPC-Endpunkt: Befolgen Sie die Dokumentation hier
  • So erstellen Sie ein NAT-Gateway: Befolgen Sie die Dokumentation hier

Dies sind die Gründe, warum die im ECS-Dashboard aufgelisteten EC2-Instanzen nicht angezeigt werden.

Ein Schuss
quelle