I am playing around with AWS Lambda + API Gateway + Serverless (Python). It is amazing!
So I figured that the event parameter in the function holds a lot of information including the HTTP Request information
Furthermore, I found that
queryStringParameters
body
Are the keys that hold the GET and POST parameters.
"queryStringParameters": {
"name": "me"
},
and
"body": "------WebKitFormBoundaryXAin8CB3c0fwFfAe\r\nContent-Disposition: form-data; name=\"sex\"\r\n\r\nmale\r\n------WebKitFormBoundaryXAin8CB3c0fwFfAe--\r\n",
How could I get a hash/dictionary from the body key ?
Thanks
You can opt to have Lambda@Edge expose the body in a request for writable HTTP methods (POST, PUT, DELETE, and so on), so that you can access it in your Lambda function. You can choose read-only access, or you can specify that you'll replace the body.
if you want complete freedom / full transparency in Lambda then you might want to look at Lambda proxy integration
import json
def endpoint(event, context):
# With the Lambda proxy integration, API Gateway maps the entire client request to the
# input event parameter of the backend Lambda function as follows:
# {
# "resource": "Resource path",
# "path": "Path parameter",
# "httpMethod": "Incoming request's method name"
# "headers": {Incoming request headers}
# "queryStringParameters": {query string parameters }
# "pathParameters": {path parameters}
# "stageVariables": {Applicable stage variables}
# "requestContext": {Request context, including authorizer-returned key-value pairs}
# "body": "A JSON string of the request payload."
# "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
# }
body = {}
body["event"] = event
# With the Lambda proxy integration, API Gateway requires the backend Lambda function
# to return output according to the following JSON format:
# {
# "isBase64Encoded": true|false,
# "statusCode": httpStatusCode,
# "headers": { "headerName": "headerValue", ... },
# "body": "..."
# }
response = {
"statusCode": 200,
"isBase64Encoded": False,
"headers": {"x-test-header" : "foobar"},
"body": json.dumps(body),
}
return response
and in template
"paths": {
"/{proxy+}": {
"x-amazon-apigateway-any-method": {
"parameters": [{
"name": "proxy",
"in": "path",
"required": true,
"type": "string"
}],
"produces": ["application/json"],
"responses": {},
"x-amazon-apigateway-integration": {
"responses": {
"default": {
"statusCode": "200"
}
},
"uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:xxxx:function:yyy/invocations",
"passthroughBehavior": "when_no_match",
"httpMethod": "POST",
"cacheNamespace": "57w2aw",
"cacheKeyParameters": [
"method.request.path.proxy"
],
"contentHandling": "CONVERT_TO_TEXT",
"type": "aws_proxy"
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With