2016-12-12 2 views
2

Mein Anwendungsfall ist so, dass ich eine AWS Lambda-Front mit API-Gateway beenden lassen werde.AWS Lambda aufrufen und Antwort auf API Gateway asynchron zurückgeben

Meine Anforderung ist, dass sobald das Lambda aufgerufen wird, sollte eine 200 OK-Antwort zurück an API Gateway, die diese an den Aufrufer weiterleiten. Und dann sollte der Lambda seine eigentliche Verarbeitung der Nutzlast beginnen.

Der Grund dafür ist, dass der API-Gateway-Anruferdienst eine Antwort innerhalb von 10 Sekunden erwartet, ansonsten wird das Zeitlimit überschritten. Daher möchte ich die Antwort geben, bevor ich mit der Verarbeitung beginne.

Ist das möglich?

+0

Es scheint, wie wir vor dieser Frage gehabt haben, aber ich habe nicht eine entsprechende doppelte Frage finden. –

Antwort

2

Ja, erstellen Sie einfach zwei Lambda-Funktionen. Die erste Lambda-Funktion wird vom API-Gateway aufgerufen und ruft einfach die zweite Lambda-Funktion auf und kehrt dann sofort erfolgreich zurück, so dass das API-Gateway mit einem HTTP 200 auf den Client antworten kann. Die zweite Lambda-Funktion dauert dann so lange, wie sie benötigt wird.

+0

Alternativ kann eine Warteschlange (SQS) verwendet werden. Sie können das API-Gateway direkt mit einer SQS-Warteschlange verbinden oder eine Lambda-Funktion verwenden. In jedem Fall können Sie Nachrichten in einem Tempo bearbeiten, das Sie bevorzugen. – Bram

+0

Ja 2 Lambda-Ansatz kann auf jeden Fall gemacht werden. Aber können wir das mit einem einzigen Lambda haben –

1

Mit dem Integrationstool "Lambda Function" des API-Gateways ist dies nicht mit einer einzigen Lambda-Funktion möglich - diese Schnittstelle wurde speziell für synchrone Verbindungen entwickelt. Die Problemumgehung, wenn Sie den Integrationstyp Lambda-Funktion verwenden möchten, ist für die synchrone Lambda-Funktion, die vom Gateway aufgerufen wird, um eine zweite asynchrone Lambda-Funktion über die Lambda-API aufzurufen.

jedoch asynchrone Aufrufe sind möglich, ohne das Problem zu umgehen, unter Verwendung einer AWS Service Proxy Integration statt einer Lambda-Funktion Integration.

Wenn Ihre API nur synchrone Aufrufe von Lambda-Funktionen im Backend durchführt, sollten Sie den Integrationstyp Lambda-Funktion verwenden. [...]

Wenn Ihre API asynchrone Aufrufe von Lambda-Funktionen ausführt, müssen Sie den in diesem Abschnitt beschriebenen AWS Service Proxy-Integrationstyp verwenden. Die Anweisungen gelten auch für Anforderungen für synchrone Lambda-Funktionsaufrufe. Für den asynchronen Aufruf müssen Sie den Header X-Amz-Invocation-Type:Event explizit zur Integrationsanforderung hinzufügen.

http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html

+0

Wie fügen wir diesen Header hinzu? Müssen wir es unter "HTTP Header" hinzufügen? in der Integrationsanfrage? Es scheint, als ob ich nur Header-Mapping hinzufügen kann, aber keinen fest codierten Header-Wert. Danke. – vangap

+0

Ok, es erlaubt Header-Wert in einfachen Anführungszeichen, aber nicht doppelte Anführungszeichen. Dort habe ich gekämpft. So ein schlechtes UX. – vangap

+1

@vangap ''STATIC_VALUE''. * "Der' STATIC_VALUE' ist ein String-Literal und muss in ein Paar einfacher Anführungszeichen eingeschlossen werden. "* Http: // docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html –

0

Überprüfen Sie die Antwort hier auf wie ein Async Invoke auf die Lambda-Funktion einzurichten. Dies wird 200 sofort an den Client zurückgeben, aber das Lambda wird asynchron asynchron verarbeiten.

https://stackoverflow.com/a/40982649/5679071

Verwandte Themen