Ich versuche, die neue AWS Batch-Funktion zu verwenden:https://aws.amazon.com/batch/
Ich kann nicht einmal den einfachsten Batch-Job ausführen (mit der Demo „echo hello world“). Der Job bleibt einfach immer im ausführbaren Zustand hängen.
Um zu versuchen, das Problem zu isolieren, verwende ich alle Standardeinstellungen auf einem brandneuen AWS-Konto.
Nach meinem Verständnis muss ich keine EC2-Instanzen manuell starten, um diese Funktion zu verwenden, sondern AWS Batch sollte dies für mich tun. Es scheint jedoch, als würde es auf eine verfügbare EC2-Instanz warten, um den Job auszuführen. Sollte es nicht einfach eine EC2-Instanz starten, um den Job selbst auszuführen?
Dank im Voraus.
Antwort1
Mir ist aufgefallen, dass beim Angeben einer Jobdefinition mit 8000 MiB eine Instanz gestartet wurde, die nur über 7986 MB verfügte, und mein Job im Status „Ausführbar“ hängen blieb.
8000 MiB entsprechen 8388,608 MB. Es sieht also so aus, als ob die hochgefahrene Instanz nicht über genügend Speicher verfügt, um den Job auszuführen, und deshalb hängt sie sich auf.
Wenn ich eine Jobdefinition mit 7000 MiB erstelle, bleibt mein Job nicht mehr im ausführbaren Zustand hängen, da er immer noch dieselbe Instanz mit 7986 MB Speicher verwendet.
Antwort2
In der Batch-Dokumentation finden Sie eine Anleitung zur Fehlerbehebung bei „Jobs, die im Status RUNNABLE hängen bleiben“. https://docs.aws.amazon.com/batch/latest/userguide/troubleshooting.html#job_stuck_in_runnable
Wenn Ihre Computerumgebung Computerressourcen enthält, Ihre Jobs aber nicht über den Status RUNNABLE hinauskommen, gibt es etwas, das verhindert, dass die Jobs tatsächlich auf einer Computerressource platziert werden. Hier sind einige häufige Ursachen für dieses Problem:
Der awslogs-Protokolltreiber ist auf Ihren Computerressourcen nicht konfiguriert
AWS Batch-Jobs senden ihre Protokollinformationen an CloudWatch Logs. Um dies zu ermöglichen, müssen Sie Ihre Rechenressourcen so konfigurieren, dass sie den awslogs-Protokolltreiber verwenden. Wenn Ihr Rechenressourcen-AMI auf dem für Amazon ECS optimierten AMI (oder Amazon Linux) basiert, wird dieser Treiber standardmäßig mit dem ecs-init-Paket registriert. Wenn Sie ein anderes Basis-AMI verwenden, müssen Sie sicherstellen, dass der awslogs-Protokolltreiber als verfügbarer Protokolltreiber mit der Umgebungsvariable ECS_AVAILABLE_LOGGING_DRIVERS angegeben ist, wenn der Amazon ECS-Container-Agent gestartet wird. Weitere Informationen finden Sie unter AMI-Spezifikation für Rechenressourcen und Erstellen eines AMI für Rechenressourcen.
Unzureichende Ressourcen
Wenn Ihre Auftragsdefinitionen mehr CPU- oder Speicherressourcen angeben, als Ihre Rechenressourcen zuordnen können, werden Ihre Aufträge nie platziert. Wenn Ihr Auftrag beispielsweise 4 GiB Speicher angibt und Ihre Rechenressourcen weniger haben, kann der Auftrag nicht auf diesen Rechenressourcen platziert werden. In diesem Fall müssen Sie den angegebenen Speicher in Ihrer Auftragsdefinition reduzieren oder Ihrer Umgebung größere Rechenressourcen hinzufügen.
Amazon EC2-Instanzlimit erreicht
Die Anzahl der Amazon EC2-Instanzen, die Ihr Konto in einer AWS-Region starten kann, wird durch Ihr EC2-Instanzlimit bestimmt. Bestimmte Instanztypen haben auch ein Limit pro Instanztyp. Weitere Informationen zu den Amazon EC2-Instanzlimits Ihres Kontos (einschließlich der Möglichkeit, eine Limiterhöhung anzufordern) finden Sie unter Amazon EC2-Servicelimits im Amazon EC2-Benutzerhandbuch für Linux-Instanzen.
Andere sehr häufige Probleme, die dies verursachen können, sind:
- Kein Weg ins Internet
- CPU/Speicher in der Jobdefinition ist höher als die Instanzen
- Die Instanz ist nicht beim ECS-Cluster registriert.
- Agent ist getrennt -https://aws.amazon.com/premiumsupport/knowledge-center/ecs-agent-disconnected/
Weitere Schritte zur Fehlerbehebung, die Sie unternehmen können:
- Starten Sie die zugehörige ECS-Aufgabendefinition manuell in Ihrem Cluster
- Führen Sie eine SSH-Operation durch und versuchen Sie, Docker von der Containerinstanz aus auszuführen
- Curl ECS- und Batch-Endpunkte aus der Containerinstanz heraus
- Entfernen Sie CPU-/Speicherbeschränkungen bei der Jobdefinition
- Überprüfen Sie /etc/ecs/ecs.config
- ECS-Protokolle abrufen -https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html
Antwort3
Heute hatte ich das gleiche Problem. Ich habe es wie folgt gelöst:
Öffnen Sie VPC
→ Subnets
→ <YOUR SUBNET>
→ Subnet Actions
→ Modify Auto-assign IP
Einstellungen .
Aktivieren Sie Enable auto-assign public IPV4 address
„Ihre AWS Batch Computing-Umgebung neu erstellen“.
Weil die Containerinstanz Zugriff auf das Internet benötigt. Daher benötigt die Containerinstanz eine globale öffentliche IP.