7
votes

Am using API gateway to trigger a Lambda function, using Lambda Proxy integration, however the request body is encoded base64, why is that? and how can I change it to be JSON to stringify JSON?

2
How do you invoke the api? - Marcin

2 Answers

3
votes

That's because you are using Lambda Proxy Integration in API Gateway. If you use Lambda integration, it will be fine and you can get JSON.

Also you can change it to be JSON to stringify JSON with following method.

let buff = Buffer.from(event.body, "base64");
let eventBodyStr = buff.toString('UTF-8');
let eventBody = JSON.parse(eventBodyStr);
1
votes

If I am understanding your question correct, you are sending non base64 encoded JSON payload as request to API gateway, however your Lambda is receiving it as base64 encoded string.

It seems that you are not setting application/json as your request content-type. You can see in this table how API gateway decides whether Integration Request Payload (last column) is Base64-encoded string or some other type.

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html