zum Beispiel, wenn wir verwenden wollen
GET /user?name=bob
oder
GET /user/bob
Wie würden Sie diese beiden Beispiele als Parameter an die Lambda-Funktion übergeben?
Ich habe in der Dokumentation etwas über das Festlegen einer "Zuordnung von" gesehen, kann diese Einstellung jedoch nicht in der API-Gateway-Konsole finden.
method.request.path.parameter-name
für einen Pfadparameter mit dem Namen,parameter-name
wie auf der Seite Methodenanforderung definiert.method.request.querystring.parameter-name
für einen Abfragezeichenfolgenparameter mit dem Namen,parameter-name
wie auf der Seite Methodenanforderung definiert.
Ich sehe keine dieser Optionen, obwohl ich eine Abfragezeichenfolge definiert habe.
amazon-web-services
aws-lambda
aws-api-gateway
MonkeyBonkey
quelle
quelle
RequestHandler
bietet, beibehalten wird?Die Schritte, um dies zum Laufen zu bringen, sind:
Innerhalb der API Gateway Console ...
Resources -> Integration Request
application/json
Geben Sie das Feld Inhaltstyp explizit ein , obwohl es eine Standardeinstellung anzeigt (wenn Sie dies nicht tun, wird es nicht gespeichert und es wird keine Fehlermeldung angezeigt).Fügen Sie dies in das Eingabe-Mapping ein
{ "name": "$input.params('name')" }
Klicken Sie auf das Kontrollkästchen neben der Vorlagen-Dropdown-Liste (ich gehe davon aus, dass dies das ist, was es endgültig speichert).
quelle
Ich habe diese Zuordnungsvorlage verwendet, um dem Lambda-Ereignis Parameter für Body, Header, Methode, Pfad und URL-Abfragezeichenfolge bereitzustellen. Ich habe einen Blog-Beitrag geschrieben, in dem die Vorlage ausführlicher erläutert wird: http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api- Tor/
Hier ist die Zuordnungsvorlage, die Sie verwenden können:
quelle
deploy
die API nicht noch einmal. Nachdem ich die API mit dem neuen Mapping bereitgestellt hatte, funktionierte es einwandfrei. Danke vielmals.Heutzutage ist eine Dropdown-Vorlage in der API Gateway Console unter AWS enthalten.
Klicken Sie für Ihre API auf den Ressourcennamen ... und dann auf GET
Erweitern Sie "Body Mapping-Vorlagen".
Eintippen
für Content-Type (muss explizit eingegeben werden) und klicken Sie auf das Häkchen
Ein neues Fenster mit den Worten "Vorlage erstellen" und einem Dropdown-Menü (siehe Bild) wird geöffnet.
Wählen
Klicken Sie dann auf Speichern
Um auf Variablen zuzugreifen, verwenden Sie einfach die folgende Syntax (dies ist Python), z. B. URL:
Sie können Variablen wie folgt abrufen:
Es ist also nicht erforderlich, jede gewünschte Variable explizit zu benennen oder zuzuordnen.
quelle
Um Parameter an Ihre Lambda-Funktion zu übergeben, müssen Sie eine Zuordnung zwischen der API-Gateway-Anforderung und Ihrer Lambda-Funktion erstellen. Die Zuordnung erfolgt im Abschnitt
Integration Request
->Mapping templates
der ausgewählten API-Gateway-Ressource.Erstellen Sie eine Typzuordnung
application/json
, und bearbeiten Sie rechts die Vorlage (klicken Sie auf den Stift).Eine Mapping-Vorlage ist eigentlich eine Velocity-Vorlage, in der Sie ifs, Schleifen und natürlich Druckvariablen verwenden können. In die Vorlage werden diese Variablen eingefügt, über die Sie einzeln auf Querystring-Parameter, Anforderungsheader usw. zugreifen können. Mit dem folgenden Code können Sie den gesamten Querystring neu erstellen:
Hinweis: Klicken Sie auf das Häkchensymbol, um die Vorlage zu speichern. Sie können Ihre Änderungen mit der Schaltfläche "Test" in Ihrer Ressource testen. Um jedoch Querystring-Parameter in der AWS-Konsole zu testen, müssen Sie die Parameternamen im
Method Request
Abschnitt Ihrer Ressource definieren.Hinweis: Weitere Informationen zur Velocity-Vorlagensprache finden Sie im Velocity-Benutzerhandbuch .
Dann können Sie in Ihrer Lambda-Vorlage Folgendes tun, um den Querystring zu analysieren:
quelle
Actions>Deploy API
(ich habe meine Zeit damit verschwendet, dies zu vergessen ...). Der zugehörige Lambda-Arn übernimmt die Änderung unmittelbar nach der Bereitstellung. Sie können es eincheckenStages > #stage (like: prod) > Deployment History
.Die akzeptierte Antwort funktionierte gut für mich, aber als Erweiterung der Antwort von gimenete wollte ich eine generische Vorlage, mit der ich alle Abfrage- / Pfad- / Header-Parameter (vorerst nur als Zeichenfolgen) durchlaufen konnte, und ich kam auf die folgende Vorlage. Ich poste es hier, falls jemand es nützlich findet:
quelle
Als ich versuchte, eine meiner eigenen Fragen hier zu beantworten , stieß ich auf diesen Trick.
Verwenden Sie in der API-Gateway-Zuordnungsvorlage Folgendes, um die vollständige Abfragezeichenfolge anzugeben, die vom HTTP-Client gesendet wurde:
Der Vorteil ist, dass Sie sich nicht auf einen Satz vordefinierter zugeordneter Schlüssel in Ihrer Abfragezeichenfolge beschränken müssen. Jetzt können Sie alle Schlüssel-Wert-Paare in der Abfragezeichenfolge akzeptieren, wenn Sie dies so behandeln möchten.
Hinweis: Nach dieser , nur
$input.params(x)
aufgeführt wird als eine Variable für die VTL - Vorlage zur Verfügung gestellt. Es ist möglich, dass sich die Interna ändern undquerystring
nicht mehr verfügbar sind.quelle
Jetzt sollten Sie in der Lage sein, den neuen Proxy-Integrationstyp für Lambda zu verwenden, um automatisch die vollständige Anforderung in Standardform zu erhalten, anstatt Zuordnungen zu konfigurieren.
Siehe: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on- Proxy-Ressource
quelle
GET / user? Name = bob
GET / user / bob
quelle
Viele der Antworten hier sind großartig. Aber ich wollte etwas einfacheres. Ich wollte etwas, das mit dem "Hello World" -Beispiel kostenlos funktioniert. Dies bedeutet, dass ich wollte, dass ein einfacher einen Anforderungshauptteil erzeugt, der mit der Abfragezeichenfolge übereinstimmt:
Ich denke, die Top-Antwort bringt etwas Nützlicheres hervor, wenn Sie etwas Reales erstellen, aber um mit der Vorlage von AWS eine schnelle Hallo-Welt zum Laufen zu bringen, funktioniert dies hervorragend.
quelle
Das folgende Beispiel für die Parameterzuordnung übergibt alle Parameter, einschließlich Pfad, Querystring und Header, über eine JSON-Nutzlast an den Integrationsendpunkt
Tatsächlich gibt diese Zuordnungsvorlage alle Anforderungsparameter in der Nutzlast wie folgt aus:
Kopiert aus dem Amazon API Gateway Developer Guide
quelle
Die Abfragezeichenfolge ist einfach zu analysieren in Javascript im Lambda
für GET / user? name = bob
Dies löst jedoch nicht die GET-Benutzer- / Bob-Frage.
quelle
event.queryStringParameters.name
Als Antwort von @ Jonathan sollten Sie nach dem Markieren Verwenden der Lambda-Proxy-Integration in der Integrationsanforderung in Ihrem Quellcode das folgende Format implementieren, um den Fehler 502 Bad Gateway zu umgehen.
NodeJS 8.10:
Vergessen Sie nicht, Ihre Ressource bei API Gateway bereitzustellen, bevor Sie Ihre API erneut ausführen. Antwort JSON gibt nur zurück, welcher Satz in body korrekt ist. Sie können also Pfad, Parameter, Header und Body-Wert vom Ereignis abrufen
quelle
Die Lambda-Funktion erwartet eine JSON-Eingabe, daher ist das Parsen der Abfragezeichenfolge erforderlich. Die Lösung besteht darin, die Abfragezeichenfolge mithilfe der Zuordnungsvorlage in JSON zu ändern.
Ich habe es für C # .NET Core verwendet, daher sollte die erwartete Eingabe ein JSON mit dem Parameter "queryStringParameters" sein.
Befolgen Sie diese 4 Schritte, um dies zu erreichen:
application/json
Inhalte hinzu:Kopieren Sie die folgende Vorlage, die die Abfragezeichenfolge in JSON analysiert, und fügen Sie sie in die Zuordnungsvorlage ein:
Rufen Sie im API-Gateway Ihre Lambda-Funktion auf und fügen Sie die folgende Abfragezeichenfolge hinzu (für das Beispiel):
param1=111¶m2=222¶m3=333
Die Zuordnungsvorlage sollte die folgende JSON-Ausgabe erstellen, die die Eingabe für Ihre Lambda-Funktion ist.
Du bist fertig. Ab diesem Punkt kann die Logik Ihrer Lambda-Funktion die Abfragezeichenfolgenparameter verwenden.
Viel Glück!
quelle
Sie können Lambda als "Lambda-Proxy-Integration" verwenden . Siehe hierzu [ https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda. html # api-gateway-proxy-integration-lambda-funktion-python] , Optionen, die für dieses Lambda verfügbar sind, sind
Für Nodejs Lambda 'event.headers', 'event.pathParameters', 'event.body', 'event.stageVariables' und 'event.requestContext'
Für Python Lambda-Ereignis ['Header'] ['Parametername'] und so weiter
quelle
Siehe Dokument: https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html#api-as-lambda-proxy-expose-get-method-with -path-parameters-to-call-lambda-function
Sie müssen die Zuordnungsvorlage ändern
quelle
Nachdem ich einige dieser Antworten gelesen hatte, verwendete ich im August 2018 eine Kombination aus mehreren, um die Abfragezeichenfolgenparameter über Lambda für Python 3.6 abzurufen.
Zuerst ging ich zu API Gateway -> Meine API -> Ressourcen (links) -> Integrationsanforderung. Wählen Sie unten Mapping Templates aus und geben Sie als Inhaltstyp ein
application/json
.Wählen Sie als Nächstes die von Amazon bereitgestellte Vorlage für die Anforderung von Passthrough für Methoden an und wählen Sie Speichern und Bereitstellen Ihrer API aus.
In Lambda
event['params']
greifen Sie dann auf alle Ihre Parameter zu. Für Abfragezeichenfolge:event['params']['querystring']
quelle