Serverless: AWS HTTP Gateway - 502 Bad Gateway
In my continued work with Serverless and AWS Lambda I ran into a problem when trying to call a HTTP gateway.
My project looked like this:
serverless.yaml
service: http-gateway
frameworkVersion: ">=1.2.0 <2.0.0"
provider:
name: aws
runtime: python3.6
timeout: 180
functions:
no-op:
name: NoOp
handler: handler.noop
events:
- http: POST noOp
handler.py
def noop(event, context):
return "hello"
Let’s deploy to AWS:
$ serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (179 B)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............
Serverless: Stack update finished...
Service Information
service: http-gateway
stage: dev
region: us-east-1
api keys:
None
endpoints:
POST - https://29nb5rmmd0.execute-api.us-east-1.amazonaws.com/dev/noOp
functions:
no-op: http-gateway-dev-no-op
And now we’ll try and call it using cURL:
$ curl -X POST https://29nb5rmmd0.execute-api.us-east-1.amazonaws.com/dev/noOp
{"message": "Internal server error"}
That didn’t work so well, what do the logs have to say?
$ serverless logs --function no-op
START RequestId: 64ab69b0-7d8f-11e7-9db5-13b228cd4cb6 Version: $LATEST
END RequestId: 64ab69b0-7d8f-11e7-9db5-13b228cd4cb6
REPORT RequestId: 64ab69b0-7d8f-11e7-9db5-13b228cd4cb6 Duration: 0.27 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 21 MB
So the function is completely fine. It turns out I’m not very good at reading the manual and should have been returning a map instead of a string:
API Gateway expects to see a json map with keys “body”, “headers”, and “statusCode”.
Let’s update our handler function and re-deploy.
def noop(event, context):
return {
"body": "hello",
"headers": {},
"statusCode": 200
}
Now we’re ready to try the endpoint again:
$ curl -X POST https://29nb5rmmd0.execute-api.us-east-1.amazonaws.com/dev/noOp
hello
Much better!
About the author
I'm currently working on short form content at ClickHouse. I publish short 5 minute videos showing how to solve data problems on YouTube @LearnDataWithMark. I previously worked on graph analytics at Neo4j, where I also co-authored the O'Reilly Graph Algorithms Book with Amy Hodler.