2016-05-24 10 views
2

Da Api Gateway Zeitlimit 10 Sekunden ist, um jede Anfrage auszuführen Ich versuche, mit Timeout-Fehler umzugehen, aber a habe keine Möglichkeit gefunden, eine benutzerdefinierte Nachricht zu fangen und zu beantworten.Catching Timeout Fehler in AWS Api Gateway

Kontext des Problems: Ich habe eine Funktion, die weniger als 2 Sekunden zur Ausführung benötigt, aber wenn die Funktion einen Kaltstart ausführt, dauert es manchmal mehr als 10 Sekunden, eine Verbindung mit DynamoDB in Java zu erstellen. Ich habe meine Funktion bereits mit Threads optimiert, kann aber immer noch nicht zwischen 10 Sekunden für den ersten Anruf halten.

Ich muss einen Weg finden, um eine Antwort-Modell wie folgt zu liefern:

{ 
    "error": "timeout" 
} 

eine Lösung finden ich eine Funktion in Lambda erstellt, die absichtlich etwas nach 10 Sekunden der Ausführung reagiert. Ich erhalte diese Antwort die Integration mit Api-Gateway zu tun:

Request: /example/lazy 
Status: 
Latency: ms 

Antwort Körper

{ 
    "logref": "********-****-****-****-1d49e75b73de", 
    "message": "Timeout waiting for endpoint response" 
} 

In Dokumentation fand ich, dass Sie, diese Fehler fangen kann in Integration Antwort HTTP-Status regex. Aber ich habe keinen Weg gefunden und es scheint, dass niemand im Internet das gleiche Problem hat, da ich diese spezielle Nachricht in keinem Forum gefunden habe.

Ich habe mit diesem regex versucht:

.*"message".* 
Timeout.* 
.*"status":400.* 
.*"status":404.* 
.*"status":504.* 
.*"status":500.* 

Jeder weiß Hexe regex Ich soll diese "Nachricht" zu erfassen verwenden: „Timeout ...

Antwort

1

Sie verwenden Test-Invoke-Funktion der Konsole Das Zeitlimit für die implementierte API beträgt 30 Sekunden, wie bereits erwähnt, here. Also sollte das gut genug sein, um den Lambda-Kaltstart-Fall zu behandeln. Bitte implementieren und testen Sie dann mit dem API-Link Da Ihr Endpunkt mehr als 30 Sekunden benötigt, lautet die Antwort wie folgt:

{"message": "Endpoint request timed out"} 

Um dies zu verdeutlichen, können Sie Ihre Methodenantwort basierend auf dem HTTP-Statuscode der Integrationsantwort konfigurieren. Aber im Falle einer Zeitüberschreitung gibt es keine Integrationsantwort. Daher können Sie diese Funktion nicht zum Konfigurieren der Methodenantwort während des Zeitlimits verwenden.

+0

Tanks, das war sehr nützlich. Ich wusste nichts über die 30 Sekunden. –

2

Sie können die Kaltstartzeit verbessern, indem Sie Ihrer Lambda-Funktion mehr Speicher zuweisen. Mit den Standard 512 MB sehe ich Kaltstartzeiten von 8-9 Sekunden für in Java geschriebene Funktionen. Dies verbessert sich auf 2-3 Sekunden mit 1536 MB Speicher.

Amazon , dass es die CPU-Zuweisung ist, die wirklich wichtig ist, aber es gibt keine Möglichkeit, es direkt zu erhöhen. Die CPU-Zuweisung erhöht sich proportional zum Speicher.

Und wenn Sie Null-Kalte Startzeiten wollen, ist die Funktion warm zu halten, wie beschrieben here.