Direkt zum Inhalt

Wie behebe ich API-Gateway-HTTP-504-Statuscode-Timeout-Fehler?

Lesedauer: 4 Minute
0

Ich habe einen HTTP-504-Fehlerstatuscode erhalten, als ich Amazon API Gateway verwendet habe, um meine REST-API, HTTP-API oder WebSocket-API aufzurufen.

Kurzbeschreibung

Wenn eine Integrationsanfrage länger dauert als der konfigurierte Parameter für das maximale Integrations-Timeout der API-Gateway-API, gibt API Gateway einen HTTP-504-Statuscode zurück.

Um 504-Timeout-Fehler von API Gateway zu beheben, musst du zunächst die Fehlerquelle in deinen Amazon-CloudWatch-Ereignisprotokollen identifizieren und überprüfen. Verwende anschließend eine der folgenden Methoden, um die Laufzeit der Integrationsanfragen zu reduzieren, bis keine Zeitüberschreitung mehr auftritt.

Du kannst auch das Integrations-Timeout-Limit für regionale und private REST-APIs über das Standardlimit von 29 Sekunden hinaus erhöhen.

Lösung

Identifizierung und Überprüfung der Ursache des 504-Fehlers in CloudWatch-Protokollen

Führe die folgenden Schritte aus:

  1. Richte für die REST-API und die WebSocket-API die API Gateway-Protokollierung für 504-Fehler ein. Aktiviere für die HTTP-API die Protokollierung, um die Protokolle in die CloudWatch-Protokolle zu schreiben.

  2. Versuche, den 504-Fehler in der API manuell zu reproduzieren.

  3. Aktiviere die Zugriffsprotokollierung für die API. Verwende dann die folgenden Parameter-Platzhalter, um die Fehlerquelle zu diagnostizieren:

    $context.integration.status: The status code returned from an integration. For AWS Lambda proxy integrations, this is the status code that your Lambda function code returns.$context.integrationStatus: For Lambda proxy integration, this parameter represents the status code returned from Lambda, not from the backend Lambda function.
    $context.integrationLatency: The integration latency in ms.

    Weitere Informationen findest du unter Kontextvariablen für Datentransformationen.

  4. Verwende die folgende CloudWatch-Log-Insights-Abfrage, um den Statuscode „5##“ aus den Zugriffsprotokollen zu filtern:

    fields @timestamp, @message, @logStream| filter status like '5'
    | sort @timestamp desc
    | display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId
  5. Zeige in der CloudWatch-Konsole die API Gateway-Protokollereignisse für die Integration an, bei welcher der Fehler aufgetreten ist.

  6. Verfolge die Anfragen-ID in den CloudWatch-Protokollen. Wenn bei der Integration Zeitüberschreitungen auftreten, wird nach der Zeile Endpunktanfragetext nach Transformationen der Fehler „Execution failed due to a timeout“ angezeigt. Weitere Informationen findest du unter Wie finde ich API-Gateway-REST-API-Fehler in meinen CloudWatch-Protokollen?

  7. Verwende die folgende-CloudWatch-Log-Insights-Abfrage, um den Fehler zu filtern und deine API-Gateway-Ausführungsprotokollgruppe auszuwählen:

    fields @timestamp, @message|filter @message like "Execution failed due to a timeout error"
    |sort @timestamp desc
  8. Um die Fehlerquelle zu ermitteln, überprüfe die Backend-Protokolle und stelle sicher, dass der zugehörige Integrationsendpunkt aufgerufen wurde.

  9. Überprüfe, wie lange die Integration gedauert hat, um den Anfrageprozess abzuschließen und an API Gateway zu antworten.

  10. Wenn die Integration nicht aufgerufen wurde, implementiere API-Wiederholungen auf dem Client. Der Fehler kann auf einen temporären Netzwerkfehler im API-Gateway-Service zurückzuführen sein.
    Hinweis: Stelle sicher, dass die Anwendung idempotent ist, damit du Datenkonflikte vermeidest, wenn du die API-Anfrage erneut versuchst.

Wenn die Integration aufgerufen wurde, aber immer noch eine 504-Fehlermeldung zurückgegeben wird, reduziere die Laufzeit der Integration.

Die Laufzeit der Integration reduzieren

Ergreife die folgenden Maßnahmen:

  • Stelle sicher, dass die Backend-Integration nur die Logik enthält, die für API Gateway erforderlich ist, um eine HTTP-Antwort an den Client zu senden.
  • Verschiebe jede unabhängige Logik oder Nachbearbeitungslogik in einen anderen Service, wie z. B. AWS Lambda.
  • Wenn Netzwerklatenzen den 504-Fehler verursachen, implementiere die Wiederholungslogik in der clientseitigen Anwendung.
  • Befolge bewährte Methoden für die AWS-Produkte und -Services, um die Leistung der Backend-Integration zu verbessern.
  • Richte den asynchronen Aufruf der Backend-Lambda-Funktion ein.

Das Integrations-Timeout-Limit für regionale und private APIs erhöhen

Du kannst eine Kontingentanforderung stellen, um das standardmäßige Integrations-Timeout-Limitkontingent für regionale APIs und private APIs auf mehr als 29 Sekunden zu erhöhen. Eine Erhöhung des Integrations-Timeouts kann jedoch eine Reduzierung des Drosselkontingents auf Regionsebene für das AWS-Konto erforderlich machen.

Hinweis: Wenn du das Integrations-Timeout-Limit erhöhst, stelle sicher, dass du den Standard-Timeout-Wert von 29 Sekunden auf den neuen Wert änderst. Ändere beispielsweise den Standard-Timeout-Wert von 29 Sekunden in den Integrationen, auf die du die Erhöhung anwenden möchtest. Stelle dann die API erneut bereit, damit das neue Timeout-Limit für die Integration wirksam wird.

Ähnliche Informationen

Integrationen für REST-APIs im API Gateway

Eine WebSocket-API-Integrationsanfrage im API Gateway einrichten

Integrationen für HTTP-APIs im API Gateway erstellen

Wie behebe ich HTTP-504-Fehler von einer API-Gateway-REST-API mit einem Lambda-Backend?