Warum wurde meine Amazon ECS-Aufgabe angehalten?

Lesedauer: 6 Minute
0

Meine Amazon Elastic Container Service (Amazon ECS) Aufgabe wurde angehalten. Wie behebe ich Probleme, die meine Amazon ECS-Aufgabe anhalten?

Kurzbeschreibung

Ihre Amazon ECS-Aufgaben können aus verschiedenen Gründen angehalten werden. Die häufigsten Gründe sind:

  • Essentieller Container wurde verlassen
  • Integritätsprüfungen für Elastic Load Balancing (ELB) nicht bestanden
  • Container-Integritätsprüfungen nicht bestanden
  • Container-Instance beschädugt
  • Zugrunde liegende Infrastrukturwartung
  • Ereignis zur Service-Skalierung wurde ausgelöst
  • ResourceInitializationError
  • CannotPullContainerError
  • Aufgabe wurde vom Benutzer beendet

Wenn Sie die Korrelation zwischen einer angehaltenen Aufgabe und einem angehaltenen Grund verstehen, können Sie den für die Fehlerbehebung erforderlichen Aufwand reduzieren.

Lösung

Sie können die Details einer angehaltenen Aufgabe mithilfe der DescribeTasks-API anzeigen. Die Details für die angehaltene Aufgabe werden in den zurückgegebenen Ergebnissen jedoch nur für eine Stunde angezeigt. Um Details zu angehaltenen Aufgaben länger anzuzeigen, können Sie diese AWS CloudFormation-Vorlage verwenden, um Amazon CloudWatch Logs von einem EventBridge-Ereignis zu speichern, das ausgelöst wird, wenn eine Aufgabe angehalten wird.

Gründe für das Anhalten

Essentieller Container in Aufgabe wurde beendet

Alle Aufgaben müssen mindestens einen essentiellen Container haben. Wenn der wesentliche Parameter eines Containers als wahr gekennzeichnet ist und dieser Container aus irgendeinem Grund ausfällt oder stoppt, werden alle anderen Container, die Teil dieser Aufgabe sind, angehalten. Um zu verstehen, warum eine Aufgabe aus diesem Grund beendet wurde, identifizieren Sie den Beendigungscode mithilfe der DescribeTasks-API und navigieren Sie zum Abschnitt Allgemeine Anhaltecodes in diesem Artikel.

Aufgabe hat ELB-Integritätsprüfungen nicht bestanden

Wenn eine Aufgabe aufgrund von ELB-Integritätsprüfungen fehlschlägt, stellen Sie sicher, dass Ihre Containersicherheitsgruppe Datenverkehr von ELB zulässt Berücksichtigen Sie die folgenden Punkte:

  • Definieren Sie eine minimale Nachfrist für die Integritätsprüfung. Dies weist den Service-Scheduler an, ELB-Zustandsprüfungen für einen vordefinierten Zeitraum zu ignorieren, nachdem eine Aufgabe umgeschrieben wurde.
  • Standardmäßig erhält ein Ziel seinen vollen Anteil an Anfragen, sobald es bei einer Zielgruppe registriert ist und eine erste Integritätsprüfung besteht. Wenn Sie den langsamen Startmodus verwenden, haben die Ziele Zeit zum Aufwärmen, bevor der Load Balancer ihnen eine vollständige Anzahl von Anforderungen sendet.
  • Überwachen Sie die CPU- und Speichermetriken des Dienstes. Beispielsweise kann eine hohe CPU dazu führen, dass Ihre Anwendung nicht mehr reagiert und zu einem 502-Fehler führt.
  • Prüfen Sie Ihre Anwendungsprotokolle auf Anwendungsfehler.
  • Prüfen Sie, ob der Ping-Port und der Health Check-Pfad korrekt konfiguriert sind.
  • Wickeln Sie den Healthcheck-Pfad aus Amazon Elastic Compute Cloud (Amazon EC2) heraus und bestätigen Sie den Antwortcode.

Container-Integritätsprüfungen nicht bestanden

Integritätsprüfungen können in der TaskDefinition-API oder in der Dockerfile definiert werden.

Sie können den Integritätsstatus sowohl einzelner Container als auch der Aufgabe mit dem API-Vorgang DescribeTasks anzeigen.

Stellen Sie sicher, dass der Beendigungsstatus des Befehls zur Integritätsprüfung anzeigt, dass der Container fehlerfrei ist. Überprüfen Sie Ihre Container-Protokolle mithilfe der in der Aufgabendefinition angegebenen Protokolltreibereinstellungen auf Anwendungsfehler. Im Folgenden sind die möglichen Werte aufgeführt:

  • 0: success — Der Container ist fehlerfrei und einsatzbereit.
  • 1: ungesund — Der Container funktioniert nicht richtig.
  • 2: reserviert — Verwenden Sie diesen Exit-Code nicht.

(Instance i-xx) (Port x) ist fehlerhaft in (Grund Integritätsprüfungen fehlgeschlagen)

Dies zeigt an, dass der Containerstatus fehlerhaft ist. Zur Behebung dieses Problems:

  • Stellen Sie sicher, dass die an die Container-Instance angehängte Sicherheitsgruppe Datenverkehr zulässt
  • Vergewissern Sie sich unverzüglich, dass vom Backend eine erfolgreiche Antwort vorliegt.
  • Stellen Sie den Wert für die Reaktionszeit richtig ein.
  • Weitere Informationen finden Sie in den Zugriffsprotokollen Ihres Load Balancers.

Service ABCService: ECS führt Wartungsarbeiten an der zugrunde liegenden Infrastruktur durch, die die Aufgabe hostet

Dies zeigt an, dass die Aufgabe aufgrund eines Problems mit der Aufgabenwartung angehalten wurde. Weitere Informationen finden Sie unter AWS Fargate-Aufgabenwartung.

Ein Service stellt sicher, dass die angegebene Planungsstrategie befolgt wird und Aufgaben neu geplant werden, wenn sie angehalten oder fehlgeschlagen sind. Wenn die Container-Instance Teil einer Auto Scaling-Gruppe ist. Eine neue Container-Instance muss gestartet und Aufgaben platziert werden. Weitere Informationen finden Sie unter Überprüfen einer Skalierungsaktivität für eine Auto Scaling-Gruppe.

ECS Service Scaling-Ereignis ausgelöst

Dies ist eine standardmäßige Servicemeldung. Amazon ECS nutzt den Application Auto Scaling-Dienst, um diese Funktion bereitzustellen. Der ECS-Service ist in der Lage, die gewünschte Anzahl von Aufgaben automatisch zu erhöhen oder zu verringern. Berücksichtigen Sie die folgenden Punkte:

ResourceInitializationError: Secrets oder Registry-Auth können nicht abgerufen werden: Abrufen der Ausführungsressource ist fehlgeschlagen

Für diesen Fehler siehe: Wie behebe ich den Fehler „unable to pull secrets or registry auth“ (Geheimnis- oder Registry-Autorisierung kann nicht abgerufen werden) in Amazon ECS?

CannotPullContainerError

Dieser Fehler weist darauf hin, dass die verwendete Aufgabenausführungsrolle nicht berechtigt ist, mit Amazon ECS zu kommunizieren. Zur Behebung dieses Problem:

  • Stellen Sie sicher, dass die Rolle der Aufgabenausführung über die erforderlichen Berechtigungen verfügt. Amazon ECS bietet die verwaltete Richtlinie mit dem Namen AmazonECSTaskExecutionRolePolicy, die die Berechtigungen für die meisten Anwendungsfälle enthält.
  • Stellen Sie sicher, dass der ECR-Serviceendpunkt zugänglich ist für: ecr.region.amazonaws.com und dkr.ecr.region.amazonaws.com
  • Stellen Sie für private Images, die eine Authentifizierung benötigen, sicher, dass RepositoryCredentials und CredentialsParameter mit den richtigen Informationen definiert sind. Weitere Informationen finden Sie unter Authentifizierung der privaten Registrierung für Aufgaben.

Aufgabe wurde vom Benutzer beendet

Dies bedeutet, dass die Aufgabe StopTask erhalten hat. Sie können feststellen, wer den Anruf initiiert hat, indem Sie StopTask in CloudTrail für UserIdentity-Informationen anzeigen.

Gängige Exit-Codes

  • 0 — Entrypoint, success oder CMD schließt seine Ausführung ab und der Container wird somit gestoppt.
  • 1 — Bezieht sich auf Anwendungsfehler. Weitere Informationen finden Sie in den Anwendungsprotokollen.
  • 137 — Tritt auf, wenn das Beenden (SIGKILL) für den Container erzwingen wurde:
    Keine Antwort auf ein SIGTERM innerhalb eines Standardzeitraums von 30 Sekunden, nach dem der SIGKILL-Wert gesendet und Container zwangsweise angehalten werden. Der Standardzeitraum von 30 Sekunden kann auf dem ECS-Container-Agenten mit dem Parameter ECS_CONTAINER_STOP_TIMEOUT konfiguriert werden.
    Dies kann auch bei Out-of-Memory (OOM) auftreten. Prüfen Sie Ihre CloudWatch-Metriken, um zu überprüfen, ob OOM aufgetreten ist.
  • 139 — Tritt auf, wenn ein Segmentierungsfehler auftritt. Wahrscheinlich hat die Anwendung versucht, auf einen Speicherbereich zuzugreifen, der nicht verfügbar ist, oder es gibt eine nicht gesetzte oder ungültige Umgebungsvariable.
  • 255 — Tritt auf, wenn der CMD-Befehl ENTRYPOINT in Ihrem Container aufgrund eines Fehlers fehlgeschlagen ist. Prüfen Sie Ihre CloudWatch Logs, um dies zu bestätigen.

Häufige Fehlermeldungen

In Ihrem Cluster wurden keine Container-Instances gefunden

Lesen Sie den Abschnitt Container-Instances für Ihren Cluster. Bei Bedarf können Sie eine Container-Instance starten.

InvalidParameterException

Stellen Sie sicher, dass alle in TaskDefinition definierten Parameter vorhanden sind und der ARN korrekt ist. Stellen Sie sicher, dass die Aufgabenrolle und die Rolle der Aufgabenausführung über ausreichende Berechtigungen verfügen.

Sie haben das Limit der Anzahl der Aufgaben erreicht, die Sie gleichzeitig ausführen können

Weitere Informationen zu Grenzwerten finden Sie in den ECS-Servicequotas.

Erstellen Sie für alle anderen Anfragen zur Kontingenterhöhung einen Fall in der AWS Support-Konsole, und wählen Sie dann Erhöhung des Service-Limits aus.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren