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

Lesedauer: 4 Minute
0

Ich erhalte den Fehlerstatuscode HTTP 504, wenn ich meine REST-API, HTTP-API oder WebSocket-API mit Amazon API Gateway aufrufe.

Kurzbeschreibung

Wenn eine Integrationsanforderung länger dauert als der Parameter für das maximale Integrations-Timeout Ihrer API-Gateway-REST-API, gibt API Gateway den Statuscode HTTP 504 zurück.

Um 504-Timeout-Fehler von API Gateway zu beheben, müssen Sie zunächst die Fehlerquelle in Ihren Amazon-CloudWatch-Ausführungsprotokollen identifizieren und überprüfen. Verwenden Sie anschließend eine oder mehrere der folgenden Methoden, um die Laufzeit Ihrer Integrationsanforderungen zu verkürzen, bis es nicht mehr zum Timeout kommt.

Behebung

So überprüfen Sie die Ursache des 504-Fehlers in Ihren Amazon-CloudWatch-Logs

1.    Richten Sie für die Rest-API und die Websocket-API die API Gateway-Ausführungsprotokollierung für die 504-Fehler ein. Aktivieren Sie für die HTTP-API die Protokollierung, um die Protokolle in die CloudWatch-Protokolle zu schreiben.

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

3.    Aktivieren Sie die Zugriffsprotokollierung für die API und diagnostizieren Sie anschließend die Fehlerquelle anhand der folgenden Parametervariablen:

$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 finden Sie unter $Kontextvariablen für Datenmodelle, Autorisierer, Zuordnungsvorlagen und CloudWatch-Zugriffsprotokollierung.

4.    Verwenden Sie die folgende CloudWatch-Log-Insights-Abfrage, um den Statuscode '5XX' aus den Zugriffsprotokollen zu filtern:

fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId

5.    Sehen Sie sich in der CloudWatch-Konsole die API-Gateway-Ausführungsprotokolle für die Integration an, bei der der Fehler aufgetreten ist.

6.    Verfolgen Sie die Anforderungs-ID in Ihren CloudWatch-Protokollen. Wenn es bei der Integration zu Zeitüberschreitungen kommt, wird nach der Zeile „Endpunktanforderungstext nach Transformationen:“ der Fehler „Ausführung aufgrund einer Zeitüberschreitung fehlgeschlagen“ angezeigt. Weitere Informationen finden Sie unter Wie finde ich API-Gateway-REST-API-Fehler in meinen CloudWatch-Protokollen?

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

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc

8.    Überprüfen Sie, ob der zugehörige Integrationsendpunkt aufgerufen wurde, um die Fehlerquelle zu ermitteln.

9.    Bestätigen Sie, wie lange die Integration gebraucht hat, um die Verarbeitung der Anfrage abzuschließen und dem API Gateway zu antworten.

10.    Wurde die Integration nicht aufgerufen, implementieren Sie API-Wiederholungsversuche auf dem Client. (Der Fehler ist möglicherweise auf einen vorübergehenden Netzwerkausfall im API-Gateway-Service zurückzuführen.)

Hinweis: Stellen Sie sicher, dass Ihre Anwendung idempotent ist. Auf diese Weise werden Datenkonflikte vermieden, wenn Sie die API-Anfrage erneut stellen.

-oder-

Wurde die Integration aufgerufen, gab aber dennoch eine 504-Fehlermeldung zurück, versuchen Sie, die Laufzeit Ihrer Integration zu reduzieren. Wenn es sich um eine HTTP-API handelt, können Sie versuchen, den Parameter für das maximale Integrations-Timeout zu erhöhen.

**Hinweis:**Das standardmäßige maximale Integrations-Timeout der API-Gateway-REST-API beträgt 29 Sekunden. Für die HTTP-API kann die Zeitüberschreitung bis zu einem Höchstwert von 30 Sekunden konfiguriert werden. Die Höchstwerte können nicht erhöht werden.

So reduzieren Sie die Laufzeit Ihrer Integration

  • Stellen Sie sicher, dass Ihre Backend-Integration nur die Logik enthält, die für API Gateway erforderlich ist, um eine HTTP-Antwort an den Client zu senden. Ziehen Sie in Erwägung, nicht abhängige oder nachverarbeitende Logik in einen anderen Service zu verlagern, z. B. Lambda.
  • Liegt die Ursache für den 504-Fehler bei den Netzwerklatenzen, implementieren Sie eine Wiederholungslogik in der Client-Anwendung.
  • Verbessern Sie die Leistung der Backend-Integration, indem Sie sich an die bewährten Optimierungsmethoden für Ihre Plattform halten.
  • Ziehen Sie in Erwägung, einen asynchronen Aufruf der Backend-Lambda-Funktion einzurichten.

Ähnliche Informationen

REST-API-Integrationen einrichten

Eine WebSocket-API-Integrationsanfrage im API Gateway einrichten

Integrationen für HTTP-APIs konfigurieren

Amazon-API-Gateway-Kontingente und wichtige Hinweise