2

ラムダ関数のAPIゲートウェイの統合をServerless Frameworkバージョン0.4.2と設定しています。「無効なマッピング式が指定された:true」を返すrequestParameters

私の問題は、エンドポイントのリクエストパラメータを定義することです。 AWS docs for API gatewayエントリは言う:

requestParameters

をアマゾンAPIゲートウェイによって受け入れ可能なリクエストパラメータを表します。要求パラメータは、キーをソースとし、ブール値を値とするキー/値マップとして表されます。 Booleanフラグは、パラメータが必須かどうかを指定するために使用されます。ソースはmethod.request。{location}。{name}のパターンと一致する必要があります。locationはクエリーストリング、パス、またはヘッダーです。 nameは有効な一意のパラメータ名です。ここで指定されたソースは、統合要求パラメーターまたはテンプレートへのマッピングのために統合で使用できます。

私はそれを理解し、s-function.jsonで設定はAWS CLIに直接与えられているので、私は形式でリクエストパラメータに指定しました: "method.request.querystring.startYear": trueを。しかし、私はInvalid mapping expression specified: trueエラーを受け取りました。私は同じ結果を持つ"method.request.querystring.startYear": "true"として設定を指定しようとしました。

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": [] 
} 

任意のアイデア?前もって感謝します!

答えて

1

それはconfiguring the integration request sectionためのものですs-function.jsonファイル内requestParametersのように見えるので、私は使用して終了:

"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" 
}, 

これは、同様にダッシュボード上のメソッド要求セクションに自動的に追加することになりました。私はそれから送信されるメソッドのポストにそれらを回すためにマッピングテンプレートでそれらを使用することができ

Method request section with parameters automatically added

私のラムダ機能にeventとして。今私は、私が使用している特定のマッピングテンプレートがありますが、私は将来的にAlua K's suggested methodを使用して、すべての入力を一般的な方法でマッピングして、各機能ごとに別々のマッピングテンプレートを設定する必要はありません。

1

あなたは、あなたにも、右のエンドポイントを使用していることを確認し、このevent.querystring

+0

その他の優れたソリューションhttp://stackoverflow.com/a/33602122/2318357しかしそれはslsを伴わない。 –

+0

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

+0

私は、文法/この質問のための 'requestParameters'の書式ですが、これは良い使い方です – Seafish

0

のようなクエリ文字列ラムダ関数へのアクセスでは

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

のようなあなたのラムダにクエリのparamsを渡すことができます。 AWSには2つのタイプやいくつかのタイプがあります。私の友人は過去にそれに巻き込まれました。

関連する問題