AWS: Passing params to Lambda through API Gateway Mapping Templates
AWS API Gateway offers a tool called Mapping Templates to help you convert the data you have into the data you want. For example, if you want to pass parameters to your API Gateway through a GET
request, you'll need a Mapping Template.
If you want to do something like this, you need a Mapping Template.
curl http://api.myapp.com/users/userid001
How Mapping Templates Work
Mapping templates contain three variables: $context
, $input
, and $util
. These three variables offer you everything you need to extract user-submitted data, internal resource data (like an IP address), and a few other things.
$context
Context holds all the contextual information of your API request.
The API ID.
$context.apiId
The AWS Account ID is associated with the request.
$context.identity.accountOwner
The IP address of the API caller (based on x-forwarded-for
).
$context.identity.sourceIp
User Agent of the API caller.
$context.userAgent
$input
This is the payload ready to be processed by the templates.
This evaluates the parameters as a JSON path and converts it to a JSON string.
$input.json(x)
This returns a map of the request parameters.
$input.params()
This allows you to manipulate the JSON payload as if it were a native object. For example, you can get an array of string objects and run functions like size()
.
$input.path(x)
$util
These are utilities for mapping templates such as:
Escape javascript in a string.
$util.escapeJavaScript()
URL encode and decode.
$util.urlEncode()
$util.decode()
$util.escapeJavaScript()
This is helpful if you're planning to store images as base64. Suppose you have no idea what this means, read this other article I wrote a few months ago..
$util.base64Encode()
$util.base64Decode()
Example
Let's create a quick example using the AWS API Gateway.
Step 1 - Create a Resource
Step 2 - Create a Method
Assign a GET
method.
Grab all of the information in the request, put it in JSON, and pass that JSON into the lambda function.
Step 3 - Edit Integration Request
Select "Integration Request" to start modifying the Mapping Template.
Step 4 - Edit Mapping Template
Once you've clicked on Integration Requests, you can type application/json
, select "Empty," and then fill in the parameter you want to map.
Within the Body Mapping Template, we say that the /{id}
will map to "orderId"
within our lambda function.