Ich versuche, ein docker
Container-Image für die AWS
Verwendung ECS
bereitzustellen, 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 !!
quelle
Antworten:
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:
Hier ist das Rigmarole:
1. Gehen Sie zu Ihrem EC2-Dashboard und klicken Sie auf die
Launch Instance
Schaltfläche.2.
Community AMIs
Suchen Sie unter Suchen nachecs-optimized
und 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 link
und erstellen Sie eine neue Rolle mit dem NamenecsInstanceRole
.4. Hängen Sie die
AmazonEC2ContainerServiceforEC2Role
Richtlinie 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.
quelle
EC2
als Sie diesen Fehler erhalten haben ...#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
in ,Advanced Details -> User data
wenn Sie Ihre eigenen, nicht Standard - Cluster haben. Andernfalls erstellt die neu erstellte EC2-Instanz einen Standardcluster.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
Wobei igw-24b16740 der Name Ihres frisch erstellten Internet-Gateways ist.
quelle
aws ec2 associate-route-table --subnet-id $SUBNET_ID --route-table-id $ROUTE_TABLE_ID
- kann ich vorschlagen, dies der Antwort hinzuzufügen?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
quelle
--launch-type FARGATE
Andere vorgeschlagene Überprüfungen
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 .
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 .
quelle
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:
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:
In der AWS-Dokumentation heißt es, dass dieser Teil optional ist, aber in meinem Fall ohne diese "optionale" Konfiguration nicht funktioniert hat.
quelle
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 wird
ECS Instance
Klicken Sie anschließend auf die IAM-Rolle, um zur IAM-Konsole zu gelangen. 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.
quelle
Das eigentliche Problem ist mangelnde Erlaubnis. Solange Sie eine IAM-Rolle mit der Berechtigung AmazonEC2ContainerServiceforEC2Role erstellen und zuweisen, ist das Problem behoben.
quelle
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.
quelle
In diesem Fall müssen Sie Folgendes beachten:
AmazonEC2ContainerServiceforEC2Role
verwalteten Richtlinien habenecs-optimized
(dies können Sie im EC2-Dashboard überprüfen).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.
Dies sind die Gründe, warum die im ECS-Dashboard aufgelisteten EC2-Instanzen nicht angezeigt werden.
quelle