Direkt zum Inhalt

Wie behebe ich häufig auftretende Fehler bei API-Aufrufen in Amazon ECS?

Lesedauer: 9 Minute
0

Ich möchte häufig auftretende Fehler bei API-Aufrufen in Amazon Elastic Container Service (Amazon ECS) beheben.

Kurzbeschreibung

Die folgenden Fehler können dazu führen, dass ein Amazon-ECS-API-Aufruf fehlschlägt:

  • „AccessDeniedException“
  • „ClientException“
  • „ClusterNotFoundException“
  • „InvalidParameterException“
  • „ServerException“
  • „ServiceNotActiveException“
  • „PlatformTaskDefinitionIncompatibilityException“
  • „PlatformUnknownException“
  • „ServiceNotFoundException“
  • „UnsupportedFeatureException“

Anwendungen, die innerhalb der Amazon/ECS-Aufgaben ausgeführt werden, können auch dazu führen, dass der Amazon-ECS-API-Aufruf fehlschlägt.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhältst, findest du weitere Informationen unter Beheben von AWS-CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Einen API-Aufruffehler finden

Wenn in Amazon ECS Aktivitäten stattfinden, zeichnet AWS CloudTrail die API-Anforderung als Ereignis im Ereignisverlauf auf.

Gehe wie folgt vor, um den AWS CloudTrail-Ereignisverlauf anzuzeigen und den API-Fehler zu lokalisieren:

  1. Öffne die CloudTrail-Konsole.
  2. Wähle im Navigationsbereich die Option Ereignisverlauf aus.
  3. Wähle das Zahnradsymbol aus.
  4. Wähle unter Sichtbare Spalten auswählen die Option Fehlercode aus. Wähle dann Bestätigen.
  5. Wähle auf der Seite Ereignisverlauf unter Suchattribute die Option Ereignisname aus.
  6. Gib unter Geben Sie einen Ereignisnamen ein die fehlgeschlagene Aktion ein.
    Hinweis: Wenn du den Namen des Ereignisses nicht kennst, rufe die Seite Ereignisverlauf auf. Wähle unter Suchattribute die Option Ereignisquelle aus. Wähle unter Geben Sie eine Ereignisquelle ein die Option ecs.amazonaws.com aus, um alle Ereignisse im Zusammenhang mit dem ECS-Service zu filtern.
  7. Wähle aus der Ergebnisliste die Ereignisse mit Fehlercodes aus, über die du mehr erfahren möchtest.

Hinweis: Du kannst Amazon Athena auch verwenden, um CloudTrail-Protokollefür Ereignisse nach errorcode abzufragen.

Einen API-Aufruffehler beheben

Ergreife basierend auf dem Fehlercode, den du erhältst, die folgenden Maßnahmen.

AccessDeniedException

Wenn der/die AWS Identity and Access Management (IAM)-Benutzer:in oder die IAM-Rolle nicht über die erforderlichen Berechtigungen verfügt, erhältst du die Fehlermeldung „AccessDeniedException“. Das folgende Fehlerbeispiel weist darauf hin, dass der/die Benutzer:in arn:aws:sts::123456789012:assumed-role/test-role/test-session nicht über die erforderlichen Berechtigungen zum Ausführen der CreateCluster-Aktion verfügt:

„An error occurred (AccessDeniedException) when calling the CreateCluster operation: User: arn:aws:sts::123456789012:assumed-role/test-role/test-session is not authorized to perform: CreateCluster on resource: * because no identity-based policy allows the ecs:CreateCluster action“

Gehe wie folgt vor, um der Berechtigungsrichtlinie der IAM-Identität die entsprechende Berechtigung hinzuzufügen:

  1. Öffne die IAM-Konsole.
  2. Wähle im Navigationsbereich je nach IAM-Identität Rollen, Benutzergruppen oder Benutzer aus.
  3. Verwende den Suchfilter, um die Rollen- oder Benutzeroptionen zu filtern. Wähle dann die IAM-Identität aus, die du anzeigen möchtest.
  4. Wähle die Registerkarte Berechtigungen aus.
  5. Um die Berechtigungen anzuzeigen, die der IAM-Identität zugeordnet sind, erweitere die Berechtigungsrichtlinie.
  6. Füge in der Berechtigungsrichtlinie ecs:your-event-name zur Liste Aktionen hinzu. Wähle dann Erlauben für Effekt. Oder erstelle eine neue Richtlinie, die ecs:your-event-name zulässt, und füge die Richtlinie an die IAM-Rolle oder den/die IAM-Benutzer:in an. Weitere Informationen findest du unter Vom Kunden verwaltete Richtlinien bearbeiten (Konsole).

Du kannst den IAM-Richtliniensimulator verwenden, um eine Richtlinie zu testen, die an keinen/keine IAM-Benutzer:in, keine Benutzergruppe oder Rolle angefügt ist.

ClientException

Wenn der ECS-Client einen Bezeichner oder eine Ressource angibt, die nicht gültig ist oder nicht existiert, erhältst du den Fehler „ClientException“. Das folgende Fehlerbeispiel weist darauf hin, dass der Befehl RunTask auf eine ungültige TaskDefinition verweist:

„An error occurred (ClientException) when calling the RunTask operation: TaskDefinition not found.“

Stelle sicher, dass du im Befehl, in den API-Aufrufen und in deinem Code auf die richtigen Ressourcen verweist.

ClusterNotFoundException

Wenn Amazon ECS den Cluster, den du für einen Vorgang angegeben hast, nicht finden kann, erhältst du den Fehler „ClusterNotFoundException“. Das folgende Fehlerbeispiel weist darauf hin, dass Amazon ECS den Cluster, den du für den StartTask-Vorgang angegeben hast, nicht finden kann:

„An error occurred (ClusterNotFoundException) when calling the StartTask operation: Cluster not found.“

Stelle sicher, dass du im Befehl, in den API-Aufrufen und in deinem Code auf den richtigen Clusternamen verweist.

Um alle aktuellen ECS-Cluster aufzulisten, führe den AWS-CLI-Befehl list-clusters aus:

aws ecs list-clusters --region example_region

Hinweis: Ersetze example_region durch deine AWS-Region.

Stelle dann sicher, dass der Cluster, auf den du im API-Aufruf verweist, vorhanden ist.

InvalidParameterException

Wenn ein Parameter, den du in einen Befehl eingibst, nicht gültig ist und die Version der Aufgabendefinition nicht existiert, erhältst du die folgende Fehlermeldung:

„An error occurred (InvalidParameterException) when calling the RunTask operation: TaskDefinition not found.“

Der folgende Beispielbefehl RunTask beinhaltet, dass die Aufgabendefinition CentOS:3 nicht existiert:

aws ecs run-task --task-definition CentOS:3 --cluster example_cluster --region ap-southeast-2

Hinweis: Ersetze im vorherigen Beispiel example_cluster durch den Namen deines Clusters.

Das folgende Fehlerbeispiel entspricht dem vorherigen RunTask-Befehl:

„An error occurred (InvalidParameterException) when calling the RunTask operation: TaskDefinition not found.“

Stelle sicher, dass die Parameter im Befehl gültig sind.

ServerException

Wenn ein Server ausfällt, wenn du einen API-Aufruf tätigst, erhältst du den Fehler „ServerException“. Wenn du diesen Fehler bei allen API-Aufrufen erhältst, ist der AWS-Service nicht verfügbar.

ServerException-Fehler sind oft temporär. Warte und führe dann den API-Aufruf erneut durch. Wenn das Problem weiterhin besteht, wende dich an den AWS-Support und gib die folgenden Informationen an:

  • Gib den Zeitstempel an, der dem Fehler entspricht.
  • Wenn du die Befehlszeile verwendest, gib den Befehl an, der den Fehler zurückgibt.
  • Wenn du eine Programmiersprache oder Infrastruktur als Codetools verwendest, die das AWS SDK verwenden, gib den Codeblock an, der den Fehler zurückgibt.
  • Wenn du die AWS-Managementkonsole verwendest, gib die URL der Seite der AWS-Managementkonsole und die Aktion an, die den Fehler zurückgibt.

ServiceNotActiveException

Wenn du einen Amazon-ECS-Service aktualisierst, der inaktiv ist, erhältst du den Fehler „ServiceNotActiveException“. Stelle sicher, dass sich der ECS-Service, den du aktualisieren möchtest, in deinem ECS-Cluster befindet und sich im Status ACTIVE befindet.

Um alle Services in einem Cluster aufzulisten, führe den AWS-CLI-Befehl list-clusters aus:

aws ecs list-services --cluster example_cluster

Hinweis: Ersetze example_cluster durch den Namen deines Clusters.

Stelle sicher, dass die Ausgabe des Befehls den Service enthält, den du aktualisieren möchtest. Führe dann den Befehl describe-services aus, um zu überprüfen, ob sich der Service im Status ACTIVE befindet:

aws ecs describe-services --services example_service_name --cluster example_cluster

Hinweis: Ersetze example_service_name und example_cluster durch deine Werte.

Das folgende Ausgabebeispiel zeigt an, dass sich example-service im Status ACTIVE befindet:

{    "services": [{  
        "serviceArn": "arn:aws:ecs:ap-southeast-2:111122223333:service/my-cluster/example-service",  
        "serviceName": "example-service",  
        "clusterArn": "arn:aws:ecs:ap-southeast-2:111122223333:cluster/example-cluster",  
        "loadBalancers": [],  
        "serviceRegistries": [],  
        "status": "ACTIVE",  
        ......  
    }]  
}

Wenn sich der Service nicht im Status ACTIVE befindet, stelle sicher, dass der Wert des Amazon-ECS-Service für Anzahl der Aufgaben größer als Null ist. Du kannst auch den AWS-CLI-Befehl update-service ausführen, um den Wert Anzahl der Aufgaben auf 1 zu aktualisieren:

aws ecs update-service --cluster example_cluster_name --service example_service_name --desired-count 1

Hinweis: Ersetze example_cluster_name und example_service_name durch deine Werte. Du kannst den gewünschten Zählwert auf eine Zahl größer als Null setzen.

Stelle dann in der ECS-Konsole sicher, dass der Status der Aufgabendefinition ACTIVE ist. Du kannst auch den Befehl describe-task-definition ausführen:

aws ecs describe-task-definition --task-definition example_taskdefinition

Hinweis: Ersetze example_taskdefinition durch deine Aufgabendefinition.

Überprüfe die CloudWatch-Protokolle auf Serviceausfälle oder Netzwerküberprüfungen, die dem ServiceNotActiveException-Fehler entsprechen.

PlatformTaskDefinitionIncompatibilityException

Wenn du eine Aufgabe auf einer Plattform startest, die die erforderlichen Funktionen der Aufgabendefinition nicht erfüllt, erhältst du den Fehler „PlatformTaskDefinitionIncompatibilityException“. Im folgenden Beispielfehler unterstützt die Plattformversion 1.3.0 die Anforderungen des AWS-CLI-Befehls create-service nicht:

„An error occurred (PlatformTaskDefinitionIncompatibilityException) when calling the CreateService operation: One or more of the requested capabilities are not supported.“

Der folgende Beispielbefehl create-service erstellt einen Service mit einem Amazon Elastic File System (Amazon EFS)-Volume, das auf Plattformversion 1.3.0 angefügt ist:

aws ecs create-service \  
    --cluster example_cluster \  
    --task-definition  example_taskdefinition  \  
    --launch-type FARGATE \  
    --service-name example_service \  
    --desired-count 1 \  
    --network-configuration "awsvpcConfiguration={subnets=[subnet-ed7d31b5,subnet-833ef1cb],securityGroups=[sg-eeb28aa1]}" \  
    --platform-version 1.3.0

Stelle sicher, dass die AWS-Fargate-Version die Funktionen unterstützt, die deine Aufgabendefinition erfordert.

PlatformUnknownException

Wenn du beim Starten einer Aufgabe eine unbekannte oder falsche Plattformversion angibst, erhältst du den Fehler „PlatformUnknownException“. Das folgende Fehlerbeispiel weist darauf hin, dass die Plattformversion, die du in einem Vorgang zum Erstellen eines Service angibst, nicht korrekt ist:

„An error occurred (PlatformUnknownException) when calling the CreateService operation: The specified platform does not exist.“

Der folgende Beispielbefehl create-service enthält die falsche Plattformversion 1.3 anstelle der richtigen Version 1.3.0:

aws ecs create-service \    --cluster example_cluster\  
    --task-definition example_taskdefinition \  
    --launch-type FARGATE\  
    --enable-execute-command \  
    --service-name example_service\  
    --desired-count 1 \  
    --network-configuration="awsvpcConfiguration={subnets=["subnet-ed7d31b5","subnet-833ef1cb"],securityGroups=["sg-eeb28aa1"]}"\  
    --platform-version 1.3

Stelle sicher, dass die Plattformversion, die du beim Starten einer Aufgabe angibst, korrekt ist. Weitere Informationen findest du unter Fargate-Linux-Versionen für Amazon ECS und Fargate-Windows-Versionen für Amazon ECS.

ServiceNotFoundException

Der Fehler „ServiceNotFoundException“ tritt auf, wenn der angegebene ECS-Service in deinem Befehl oder Code nicht vorhanden ist. Stelle sicher, dass der Servicename im Befehl oder Code korrekt ist, und vergewissere dich dann, dass sich der Service im Cluster befindet. Um alle Services im Cluster anzuzeigen, führe den AWS-CLI-Befehl list-clusters aus:

aws ecs list-services --cluster example_cluster

Hinweis: Ersetze example_cluster durch deinen Cluster.

UnsupportedFeatureException

Der Fehler „UnsupportedFeatureException“ tritt auf, wenn du eine Fargate-Aufgabe in einer AWS-Region startest, in der Fargate den Container nicht unterstützt. Weitere Informationen findest du unter Unterstützte Regionen für Amazon ECS auf AWS Fargate.

API-Probleme in Anwendungen beheben

Du kannst die folgenden allgemeinen HTTP-5##-Statuscode-Antworten erhalten, wenn du auf die Anwendung zugreifst, die in einer ECS-Aufgabe gehostet wird:

  • Der Fehler „HTTP 500 – Internal server“ tritt auf, wenn in einer Anwendung ein unerwarteter Zustand auftritt, z. B. ein Fehler. Oder du erhältst diesen Fehler, wenn du eine Anwendung falsch konfigurierst.
  • Der Fehler „HTTP 503 – Service unavailable“ tritt auf, wenn eine ECS-Aufgabe eine hohe Workload bewältigen soll. Oder du erhältst diesen Fehler, wenn die Anwendung in der Aufgabe wegen Wartungsarbeiten nicht verfügbar ist.

Überprüfe die Anwendungsprotokolle für die ECS-Aufgaben in Amazon CloudWatch Logs. Jede Aufgabendefinition entspricht einem Protokollstream, der das Anwendungsprotokoll der Aufgabe enthält. Führe den Befehl describe-task-definition aus, um Informationen zur Protokollgruppe und zum Protokollstream der Aufgabendefinition anzuzeigen:

aws ecs describe-task-definition --task-definition example_taskdefinition

Hinweis: Ersetze example_task_definition durch deine Aufgabendefinition.

Ähnliche Informationen

Gründe für den Ausfall der Amazon-ECS-API