2

Ich konfiguriere die API-Gateway-Integration einer Lambda-Funktion mit der Serverless Framework Version 0.4.2.requestParameters gibt "Ungültiger Zuordnungsausdruck angegeben: true" zurück

Mein Problem besteht darin, die Anforderungsparameter eines Endpunkts zu definieren. Der AWS docs for API gateway Eintrag sagt:

requestParameters

Stellt Anforderungsparameter, die von Amazon-API-Gateway akzeptiert werden kann. Anforderungsparameter werden als eine Schlüssel/Wert-Abbildung dargestellt, mit einer Quelle als Schlüssel und einem booleschen Flag als Wert. Das boolesche Flag wird verwendet, um anzugeben, ob der Parameter benötigt wird. Eine Quelle muss dem Muster method.request {location}. {Name} entsprechen, wobei der Speicherort entweder querystring, path oder header ist. name ist ein gültiger eindeutiger Parametername. Hier angegebene Quellen stehen der Integration für die Zuordnung zu Integration Request-Parametern oder Templates zur Verfügung.

Wie ich es verstehe, ist die config in der s-function.json direkt an die AWS CLI gegeben, also habe ich die Anforderungsparameter im Format angegeben: "method.request.querystring.startYear": true. Ich erhalte jedoch einen Fehler Invalid mapping expression specified: true. Ich habe auch versucht, die Konfiguration als "method.request.querystring.startYear": "true" mit dem gleichen Ergebnis zu spezifizieren.

s-function.json:

{ 
    "name": "myname", 
    // etc... 
    "endpoints": [ 
     { 
      "path": "mypath", 
      "method": "GET", 
      "type": "AWS", 
      "authorizationType": "none", 
      "apiKeyRequired": false, 
      "requestParameters": { 
       "method.request.querystring.startYear": true, 
       "method.request.querystring.startMonth": true, 
       "method.request.querystring.startDay": true, 
       "method.request.querystring.currentYear": true, 
       "method.request.querystring.currentMonth": true, 
       "method.request.querystring.currentDay": true, 
       "method.request.querystring.totalDays": true, 
       "method.request.querystring.volume": true, 
       "method.request.querystring.userId": true 
      }, 
      // etc... 
     } 
    ], 
    "events": [] 
} 

Irgendwelche Ideen? Danke im Voraus!

Antwort

1

Es sieht aus wie die requestParameters in der s-function.json Datei für configuring the integration request section gemeint ist, so dass ich am Ende mit:

"requestParameters": { 
    "integration.request.querystring.startYear" : "method.request.querystring.startYear", 
    "integration.request.querystring.startMonth" : "method.request.querystring.startMonth", 
    "integration.request.querystring.startDay" : "method.request.querystring.startDay", 
    "integration.request.querystring.currentYear" : "method.request.querystring.currentYear", 
    "integration.request.querystring.currentMonth" : "method.request.querystring.currentMonth", 
    "integration.request.querystring.currentDay" : "method.request.querystring.currentDay", 
    "integration.request.querystring.totalDays" : "method.request.querystring.totalDays", 
    "integration.request.querystring.volume" : "method.request.querystring.volume", 
    "integration.request.querystring.userId" : "method.request.querystring.userId" 
}, 

Diese endete diese automatisch auf den Methode Anfrage Abschnitt auf dem Armaturenbrett Zugabe auch:

Method request section with parameters automatically added

dann könnte ich sie in der Mapping-Vorlage verwenden, um sie in einem Verfahren Post zu drehen, die gesendet werden würde wie die event in meine Lambda-Funktion. Im Moment habe ich eine bestimmte Zuordnungsvorlage, die ich verwende, aber ich werde zukünftig Alua K's suggested method verwenden, um alle Eingaben allgemein zuzuordnen, so dass ich keine separate Zuordnungsvorlage für jede Funktion konfigurieren muss.

1

Sie können Abfrage params auf Ihre Lambda wie

"requestTemplates": { 
    "application/json": { 
     "querystring": "$input.params().querystring" 
     } 
} 

In Lambda-Funktion Zugriff passieren Abfragezeichen wie diese event.querystring

+0

andere bessere Lösung http://StackOverflow.com/A/33602122/2318357. Aber es geht nicht um sls. –

+0

http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api-gateway/ –

+0

Ich war mehr besorgt über die Syntax/Format der 'requestParameters' für diese Frage, aber das ist ein guter Vorschlag, den ich auch verwenden werde – Seafish

0

Stellen Sie sicher, dass auch die richtigen Endpunkte verwenden. Es gibt zwei Arten oder einige solche in AWS .. Freund von mir wurde in der Vergangenheit damit erwischt.

Verwandte Themen