Here’s an API Gateway mapping template to send all HTTP path, query string, and header parameters to your backend integration (i.e. Lambda function).
#set($allParams = $input.params()) { "body-json" : "$input.json('$')", "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 } }
will produce something like:
{ "body-json":"{}", "params":{ "path":{ "pathParamName1":"pathParamValue1", "pathParamName2":"pathParamValue2", "pathParamName3":"pathParamValue3" }, "querystring":{ "queryParamName1":"queryParamValue1", "queryParamName2":"queryParamValue2", "queryParamName3":"queryParamValue3" }, "header":{ "headerParamName1":"headerParamValue1", "headerParamName2":"headerParamValue2", "headerParamName3":"headerParamValue3" } } }
The parameters can then be accessed in your Lambda function, i.e.
exports.myHandler = function(event, context) { console.log("pathParamName1 = " + event.params.path.pathParamName1); context.succeed(""); }
Here’s a Gist with the example.
Cheers,
Ryan