2

Ich Replayforming eine vorhandene Anwendung für die Arbeit mit AWS API Gateway und AWS Lambda. Die aktuelle Anwendung stellt ihre Funktionalität als REST-API zur Verfügung, die als Spring-Boot-Anwendung und Spring-REST-Controller-Anmerkungen implementiert ist.Wie bekomme ich Zugriff auf die Anfrage und Pfadvariablen von AWS API Gateway URI in einer AWS Lambda-Funktion

Während ich den Anfragekörper JSON vom API-Gateway in die Lambda-Funktion bekommen kann, würde ich in bestimmten Fällen Variablen vom Request-Objekt sowie Pfadvariablen in der Lambda-Funktion benötigen. Ich habe mir das Lambda Context-Objekt angeschaut, aber es hat mir nichts gebracht, was mir dabei helfen könnte.

Beispiel API URLs: verwende ich eine Pfadvariable ähnlich dem ID-Variable in folgenden API-Aufruf GET http://www.example.com/users/{id}/alerts. {id} wird hier die Pfadvariable sein. Ein Beispiel dafür, wie wir eine Anforderungsvariable in der folgenden URL verwenden ist, wo die Alarm-ID als Query-String-Parameter übergeben wird - GET http://www.example.com/users/{id}/alerts?id=1234

Gibt es einen empfohlene Weg, dies zu tun bekommen? Ich möchte die RequestHandler-Schnittstelle nicht verwenden, da ich jede API an eine separate Lambda-Funktion binden möchte.

+0

Sie sollten Beispiele geben von was Sie sprechen re "Variablen aus dem Request-Objekt" und "Pfad Variablen in der Lambda-Funktion zugänglich" –

Antwort

1

Wenn Sie AWS Integrationstyp verwenden:

eine Zuordnungsvorlage Verwenden $ input.params (‚id‘) Immobilie in der Anfrage Körper auf Ihre Lambda-Funktion zu senden.

Wenn Sie AWS_PROXY Integrationstyp verwenden:

Sie können den Pfad Parameter über die „pathParameters“ Eigenschaft des kommenden Ereignisses zuzugreifen. Für weitere Details lesen Sie bitte die docs.

+0

Vielen Dank! Ich benutzte den Mapping-Vorlagen-Ansatz, um die Pfadparameter zu erhalten und Variablen in die Lambda-Funktion zu laden. – kl27driver

0

Ich schlage vor, Sie verwenden die Lambda-Proxy-Integration Typ, es macht alle Informationen, die Sie benötigen, mit dem geringsten Aufwand. So , die Eigenschaften müssen Sie verfügbar sein wird, um wie folgt lauten:

  • Ihre /users/... Pfad: event.path
  • Ihre ID in Query-String: event.queryStringParameters.id
  • Sie auch die HTTP-Methode benötigen: event.httpMethod
  • Ihren Weg Parameter wie die ID ein: event.pathParameters

lambda proxy integration option in api gateway

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+0

Der Lambda-Proxy-Integrationstyp scheint die Daten über das Ereignisobjekt verfügbar zu machen, das in Java anscheinend nicht unterstützt wird. Ein anderer Grund, warum ich den Mapping-Vorlagen-Ansatz verwende, ist, dass ich den JSON-Resquest-Body in ein Java-POJO kartiert und in die Lambda-Funktion injiziert bekomme. – kl27driver

+0

Die Lambda-Proxy-Integration Typ funktioniert definitiv in Java –

+0

siehe diesen Link für wie es in Java zu tun: http://docs.aws.amazon.com/apiateway/latest/developerguide/api-gateway-create-api -as-simple-proxy-für-lambda.html? shortFooter = true # api-gateway-proxy-integration-lambda-funktion-java Quote: "... die Funktion gibt einen JSON-String zurück, der die benötigten * enthält * statusCode ** und alle anwendbaren * Header * und ** body **, damit API Gateway es als HTTP-Antwort an den Client zurückgibt. " Aber ja, ich erinnere mich, dass es ein Schmerz war, als ich es das erste Mal in Java versuchte. Das sollte dir helfen, den richtigen Weg zu finden. –

Verwandte Themen