39

Say I want to pass val1 and val2 in the URL string when making a GET request from my Api gateway endpoint to my Lambda function:

https://xyz.execute-api.amazonaws.com/prod/test?val1=5&val2=10

And I have a simple function that sums the two inputs, val1 and val2:

def lambda_handler(event, context):
    # How do I get at val1 and val2??
    return {'result': val1 + val2}

I've added val1 and val2 to URL Query String Parameters on the Method Request on the AWS API Gateway. But how do I access them inside the function?

3

2 Answers 2

29

After defining the query string parameters in Method Request section of the API Gateway, you then need to define a Mapping Template in the Method Execution section.

In the Method Execution section, select Mapping Templates and then click Add Mapping Template. Enter application/json for the Content Type and then create a mapping template that looks something like this:

{
    "va1": "$input.params('val1')",
    "val2": "$input.params('val2')"
}

This will tell API Gateway to take the input parameters (either passed on the path, or in headers, or in query parameters) called val1 and val2 and send them to the Lambda function in the event data as val1 and val2.

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks. I'd add that the Mapping Templates are under Integration Request on the Method Execution page. This link was helpful: forums.aws.amazon.com/thread.jspa?threadID=192601. Still having a few problems, but at least I know where to look.
Maybe I'll find some reason for all these layers, but have to say that at first glance this is MUCH more fiddly than I'd imagined. Python is so introspectable that AWS Lambda could just create the mapping automatically by inspecting the function signature.
This link cleared up some details about how to include various types of parameters when editing the Mapping Template: docs.aws.amazon.com/apigateway/latest/developerguide/…
You no longer need to define Mapping templates in order to access your query request params. Another solution consists of using Lambda Proxy integration as described in this answer. stackoverflow.com/questions/31329958/…
17

All the information can be retrieved from Event object.

For example : The value of a variable foo can be retrieved from the event as : event["foo"].

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.