VOOZH about

URL: https://dzone.com/articles/serverless-aws-http-gateway-502-bad-gateway

⇱ Serverless: AWS HTTP Gateway — 502 Bad Gateway


Related

  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. Serverless: AWS HTTP Gateway — 502 Bad Gateway

Serverless: AWS HTTP Gateway — 502 Bad Gateway

If you're running into 502 errors when making HTTP calls with Lambda, make sure you read the manual and are returning maps.

By Aug. 15, 17 · Code Snippet
Likes
Comment
Save
16.7K Views

Join the DZone community and get the full member experience.

Join For Free

In my continued work with serverless and AWS Lambda, I ran into a problem when trying to call an 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-13b228cd4cb6Duration: 0.27 msBilled Duration: 100 ms Memory Size: 1024 MBMax 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!

AWS

Published at DZone with permission of Mark Needham. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Building a RAG-Powered Bug Triage Agent With AWS Bedrock and OpenSearch k-NN
  • Amazon Quick: AWS's Agentic Workspace, Explained for Engineers
  • Build a GitHub Slack Bot With AWS Bedrock and MCP, Part 2
  • Compliance Automated Standard Solution (COMPASS), Part 11: Compliance as Code, the OSCAL MCP Server Way

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

Let's be friends: