【AWS】API Gateway マッピングテンプレートの設定方法
AWSのAPI Gatewayを介してlambda関数にHTTPヘッダやPOSTパラメータを渡す際の設定方法をメモ。
Lambda プロキシ統合にチェックを入れるだけでもパラメータを参照することはできますが、レスポンスに不要な情報が含まれてしまう為、そちらは利用せずにパラメータを渡したかった次第です。
ドキュメント
マッピングテンプレートのパラメータ名については、公式に一覧があります。 docs.aws.amazon.com
HTTPヘッダの設定方法
マッピングテンプレートを以下のように設定すれば、lambda関数からAuthorization
ヘッダやカスタムヘッダなどのHTTPヘッダを参照できます。
$util.escapeJavaScript
でエスケープしておくのがベターです。
HTTPヘッダは以下の記述のみで参照可能ですが、URLパラメータを参照するには「メソッドリクエスト」と「統合リクエスト」の欄から「URLクエリ文字列パラメータ」を指定する必要があります。
マッピングテンプレートの記載例
#set($allParams = $input.params()) { "params": { #foreach($type in $allParams.keySet()) #set($params = $allParams.get($type)) "$type": { #foreach($paramName in $params.keySet()) "$paramName": "$util.escapeJavaScript($params.get($paramName))" #if($foreach.hasNext),#end #end } #if($foreach.hasNext),#end #end } }
lambda関数の実装例
def lambda_handler(event, context): # `Authorization`ヘッダの取得 auth_header = event.get('params', {}).get('header', {}).get('Authorization', {}) # クエリパラメータ(GETのURLパラメータ)の取得 p = event.get('params', {}).get('querystring', {}).get('<パラメータ名>')
POSTパラメータの設定方法
POST時のリクエストパラメータのJSONは以下のように設定すると、lambda関数から参照可能となります。
マッピングテンプレートの記載例
#set($allParams = $input.params()) { "params": { "body": $input.json('$'), **←ココ** #foreach($type in $allParams.keySet()) #set($params = $allParams.get($type)) "$type": { #foreach($paramName in $params.keySet()) "$paramName": "$util.escapeJavaScript($params.get($paramName))" #if($foreach.hasNext),#end #end } #if($foreach.hasNext),#end #end } }
lambda関数の実装例
def lambda_handler(event, context): # jsonボディの取得 body = event.get('params', {}).get('body', {}) # json物理名を指定して、各パラメータを取得 p = body.get('<パラメータ名>')