Wie behebe ich API-Gateway-HTTP-Aufruffehler?

Lesedauer: 6 Minute
0

Ich möchte Fehler beim Aufrufen von Amazon API Gateway beheben.

Lösung

Verwende das Runbook AWSSupport-TroubleshootAPIGatewayHttpErrors, um 5xx-Fehler bei REST-APIs zu beheben, die du für die Protokollierung von Ressourcen- und Betriebsanforderungen konfiguriert hast. 

Du kannst 5xx-Fehler auch manuell beheben.

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

Verwendung des automatischen Runbook für die Problembehandlung

Bevor das Runbook AWSSupport-TroubleshootAPIGatewayHttpErrors Amazon CloudWatch Logs analysiert, validiert das Runbook die API, Ressource, Operation und Stufe.

Die erforderlichen Berechtigungen erteilen

Bevor du das Runbook ausführst, stelle sicher, dass dein AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Benutzer oder deine IAM-Rolle über die richtigen Berechtigungen verfügt. Stelle sicher, dass der IAM-Benutzer oder die IAM-Rolle berechtigt ist, auf das Runbook zuzugreifen

Außerdem muss der IAM-Benutzer oder die übernommene Servicerolle, die die Automatisierung ausführt, über die folgenden Berechtigungen verfügen:

  • apigateway:GET
  • Protokolle:AbrufenvonAbfrageergebnissen
  • Protokolle:StartenAbfrage
  • ssm:BeschreibenvonAutomatisierungsausführungen
  • ssm:AbrufenderAutomatisierungsausführung
  • ssm:BeschreibenderAusführungvonAutomatisierungsschritten
  • ssm:StartenAutomatisierungsausführung
  • ssm:BbeschreibenDokument
  • ssm:AbrufenDokument
  • ssm:ListDocuments

Die Automatisierung ausführen

Führe die folgenden Schritte aus:

  1. Öffne das Runbook AWSSupport-TroubleshootAPIGatewayHttpErrors.
  2. Wähle Automatisierung ausführen aus.
    Gib für Eingabeparameter Folgendes ein:
    RestApiId: Die API-ID für die API, für die du Probleme behebst.
    StageName: Der Name der bereitgestellten Stufe.
    ResourcePath: Der Ressourcenpfad der Operation.
    HttpMethod: Die Methode für den konfigurierten Ressourcenpfad.
    StartTime: Das Startdatum und die Startzeit für die Abfrage der CloudWatch-Protokolle. Das Format muss yyyy-MM-ddTHH:mm:ss sein und die Zeitzone muss UTC sein.
    EndTime: Das Enddatum und die Endzeit zum Beenden der Abfrage der CloudWatch-Protokolle. Das Format muss yyyy-MM-ddTHH:mm:ss sein und die Zeitzone muss UTC sein.
    AccessLogs: Die Zugriffsprotokolle, die das Runbook analysieren soll.
    ExecutionId: Die Ausführungs-ID für die Anforderung, bei der Fehler auftreten.
    AutomationAssumeRole: Der ARN der IAM-Rolle, die es Automation ermöglicht, Aktionen in deinem Namen auszuführen. Wenn du keine IAM-Rolle angibst, verwendet Automation die Berechtigungen des Benutzers, der das Runbook startet.
    StageName: Der Name der bereitgestellten Stufe.
  3. Wähle Ausführen aus.
  4. Detaillierte Ergebnisse findest du im Abschnitt ** Ausgaben**.
    Hinweis: Die Automatisierung wird erfolgreich abgeschlossen, auch wenn das Runbook keine Protokolle findet.

Manuelles Beheben von 5xx-Statuscode-Fehlern

Hinweis: Die folgende Lösung wird nur bei REST-APIs angewendet.

Bevor du beginnst, aktiviere Amazon CloudWatch Logs, um API Gateway-Fehler zu beheben. Informationen zum Auffinden von 5xx-Fehlern in Ausführungsprotokollen findest du unter Wie finde ich API Gateway-REST-API-Fehler in meinen CloudWatch-Protokollen?Die API Gateway-Metrik 5XXError erfasst die Anzahl der serverseitigen Fehler in einem bestimmten Zeitraum.

Fehler im Lambda-Funktionscode

Informationen zu API-Endpunkt-500-Fehlern, die in AWS Lambda integriert sind, findest du unter Fehlerbehandlungsmuster in Amazon API Gateway und AWS Lambda.

Fehlende Berechtigungen für eine Stufenvariable

Wenn du eine Stufenvariable verwendest, um ein API-Gateway zum Aufrufen einer Lambda-Funktion einzurichten, wird möglicherweise ein interner Serverfehler angezeigt. Informationen zur Behebung dieses Problems findest du unter Ich habe meine Lambda-Integration in API Gateway mithilfe einer Stufenvariablen definiert. Warum erhalte ich einen „Internal server error“ (Internen Serverfehler) und einen 500-Statuscode, wenn ich die API-Methode aufrufe?

Falsche oder fehlende HTTP-Statuscode-Zuordnung

Um dieses Problem zu lösen, richte Mock-Integrationen im API Gateway ein.

Probleme mit der Drosselung

Wenn eine hohe Anzahl von Anforderungen den Backend-Service drosselt, gibt die API Gateway-API möglicherweise einen internen Serverfehler zurück. Um dieses Problem zu beheben, aktiviere einen Mechanismus für exponentielle Backoff- und Wiederholungsversuche und versuche es dann erneut mit der Anforderung. Wenn das Problem weiterhin besteht, überprüfe das API-Gateway-Kontingent. Wenn du das Servicekontingent überschreitest, kannst du eine Erhöhung des Servicekontingents beantragen.

Undefinierte HTTP-Methode von POST

Für die Lambda-Integration musst du die HTTP-Methode von POST für die Integrationsanforderung verwenden. Führe den folgenden AWS-CLI-Befehl put-integration aus, um die Methodenintegrationsanforderung zu aktualisieren:

aws apigateway put-integration \
    --rest-api-id id \
   --resource-id id \
    --http-method ANY \
    --type AWS_PROXY \
    --integration-http-method POST \
    --uri arn:aws:apigateway:us-east-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-east-2:account_id:function:helloworld/invocations

Hinweis: Ersetze die rest-api-id durch deine REST-API-ID, resource-id durch deine Ressourcen-ID und die Beispiel-URI durch deine URI.

Führe dann den folgenden AWS-CLI-Befehl create-deployment aus, um die REST-API bereitzustellen:

aws apigateway create-deployment \
    --rest-api-id id \
    --stage-name stage-resource

Hinweis: Ersetze rest-api-id durch deine REST-API-ID und stage-resource durch deine Stufenressource für die zu erstellende Bereitstellungsressource.

Lambda-Berechtigungen

Stelle sicher, dass die ressourcenbasierte Richtlinie der Lambda-Funktion oder des Lambda-Genehmigers Berechtigungen für die API zum Aufrufen der Funktion enthält. 

Problem mit der Ausgabe im JSON-Format der Lambda-Funktion

Wenn die Ausgabe der integrierten Lambda-Funktion nicht dem angegebenen JSON-Format für REST-APIs entspricht, erhältst du eine Fehlermeldung. Stelle sicher, dass du das richtige JSON-Format für die Ausgabe von Lambda-Funktionen für Proxy-Integrationen und von Lambda-Genehmigern verwendest. Verwende die folgenden JSON-Beispielformate.

Beispiel für eine Lambda-Funktion für die Proxy-Integration:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
    "body": "..."
}

Beispiel für einen Lambda-Genehmiger:

{
   "principalId": "user",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      { "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/"
      }
    ]
  }
}

Backend-Nutzdatengröße überschreitet 10 MB

Das maximale HTTP-API-Kontingent für eine Backend-Nutzlastgröße beträgt 10 MB. Du kannst die Größe nicht erhöhen. Stelle daher sicher, dass die Backend-Nutzlastgröße das 10-MB-Kontingent nicht überschreitet.

Integration privater Endpunkte

Wenn du einen privaten API-Endpunkt verwendest, musst du auch die private API Gateway-Integration konfigurieren.

Interne Serviceausfälle

Wenn bei AWS interne Serviceprobleme auftreten, erhältst du möglicherweise einen 500-Fehler. Warte, bis das Problem innerhalb von AWS oder innerhalb des API Gateway-Services behoben ist, und wiederhole dann die Anforderung mit exponentiellem Backoff.

502 status code error: Bad gateway

Du erhältst einen 502-Statuscode Bad gateway, wenn API Gateway die Antwort nicht als Gateway oder Proxy verarbeiten kann. Informationen zur Behebung dieses Problems findest du unter Wie behebe ich HTTP-502-Fehler von API-Gateway-REST-APIs mit Lambda-Proxyintegration?

Hinweis: Wenn API Gateway die Antwort des Backend-Service liest, verwendet es Zuordnungsvorlagen, um das Format im Abschnitt mit den Integrationsantworten abzubilden. Weitere Informationen findest du unter Eine Integrationsantwort in API Gateway einrichten.

503 status code error: Service unavailable

Ein 503-Statuscode-Fehler tritt auf, weil die Backend-Integration nicht verfügbar ist, sodass die API Gateway-API keine Antwort erhält.

Dieser Fehler kann aus den folgenden Gründen auftreten:

  • Der Backend-Server hat die Kapazität überschritten und kann keine neuen Client-Anforderungen verarbeiten.
  • Der Backend-Server schließt die temporäre Wartung ab.

Um dieses Problem zu beheben, kannst du dem Backend-Server weitere Ressourcen hinzufügen und einen exponentiellen Backoff- und Wiederholungsmechanismus auf dem Client aktivieren. Versuche es dann erneut mit der Anforderung.

504 status code error: Endpoint request timed out

Wenn eine Integrationsanforderung länger dauert als der maximale Integrations-Timeout-Parameter der API Gateway REST-API, gibt API Gateway einen HTTP 504-Statuscode zurück. Informationen zur Behebung dieses Fehlers findest du unter Wie kann ich API HTTP-504-Timeout-Fehler mit API Gateway beheben?

Ähnliche Informationen

Workflows zur Automatisierung von AWS Support (SAW)

Bewährte Sicherheitsmethoden in Amazon API Gateway

Überwachung der Ausführung der REST-API mit Amazon CloudWatch-Metriken

Wie aktiviere ich CloudWatch-Protokolle zur Problembehebung meiner API-Gateway-REST-API oder WebSocket-API?