Monitoring platform for keeping systems up and running at all times.
Full stack visibility across the entire stack.
Detect and resolve any incident in record time.
Conform to industry best practices.
One problem that pops up quite frequently when people try to build serverless applications with AWS API Gateway and AWS Lambda is Execution failed due to configuration error: Malformed Lambda proxy response.
There is nothing worse than generic error messages that don’t tell you anything you need to fix the problem, right? And AWS isn’t particularly known for its error message design, if you can even call it that, let alone for giving you the means of fixing the problem. So how to fix this Lambda error and what causes it?
In order to fix this, you need to change what your Lambda function returns. And to do so, you need to return an object with two attributes:
statusCode
body
If you used an asynchronous function, it should look like this:
exports.handler = async function(event, context) { return {statusCode: 200, body: "OK"}; };
If you’re more of a promise type of developer, it would look like this:
exports.handler = function(event, context) { return new Promise(function(resolove, reject) { resolve({statusCode: 200, body: "OK"}); }); };
And finally, if you’re into callbacks, this will resolve your problem:
exports.handler = function(event, context, callback) { callback({statusCode: 200, body: "OK"}); };
If you have some time to spare, why not learn a bit about the “Why” of the error along the way?
First, Malformed Lambda proxy response isn’t really a configuration error because the problem lies in your Lambda code. But still, it could very well be that the routine that checks your return value also checks for other things that can be configured from the outside, like from AWS CloudFormation.
But what about the proxy part of that error message?
If you configure a route for your API in AWS API Gateway in the AWS Console, you get to choose an integration for that route, in our case, a Lambda integration. This integration is the glue between AWS Lambda and AWS API Gateway. After all, Lambda can be used for more than just handling API Gateway requests.
If you configure the route via CloudFormation, things get a bit clearer.
ExampleApi: ... DefaultStage: ... ExampleRoute: Type: AWS::ApiGatewayV2::Route Properties: ApiId: Ref: ExampleApi RouteKey: ANY / Target: Fn::Join: - integrations/ - Ref: ProxyIntegration ProxyIntegration: Type: AWS::ApiGatewayV2::Integration Properties: ApiId: Ref: ExampleApi IntegrationType: AWS_PROXY IntegrationUri: Fn::GetAtt: - ExampleFunction - Arn PayloadFormatVersion: "2.0" ExampleRole: ... ExampleFunction: Type: AWS::Lambda::Function Properties: Code: ZipFile: 'exports.handler = async () => ({ statusCode: 200, body: "Example" });' Handler: index.handler Role: Fn::GetAtt: - ExampleRole - Arn Runtime: nodejs12.x DependsOn: - ExampleRole
I guess you already spotted the important point here. The integration we create in the AWS Console is actually a specific type of integration, called AWS_PROXY. It’s used to integrate with many AWS services and the AWS Console just has a nice UI to make integrating with Lambda simpler.
AWS_PROXY
There are actually five types of API Gateway integrations. Three you can use for your WebSockets endpoints and two for the HTTP endpoints.
When you build a regular HTTP API.
HTTP_PROXY
When you build a WebSocket based HTTP API.
AWS
HTTP
MOCK
Error messages are a common pain point for developers, but often the fix is quite simple. However, if you know a bit of background to the error’s origin, it can help to fix it faster in the future.
To learn more about specific common serverless errors and how to fix them, make sure to visit our Event Library.
In this guide, we’ll talk about common problems developers face with serverless applications on AWS and share some practical strategies to help you monitor and manage your applications more effectively.
Today we are announcing a new, updated pricing model and the end of free tier for Dashbird.
In this article, we’re covering 4 tips for AWS Lambda optimization for production. Covering error handling, memory provisioning, monitoring, performance, and more.
Dashbird was born out of our own need for an enhanced serverless debugging and monitoring tool, and we take pride in being developers.
Dashbird gives us a simple and easy to use tool to have peace of mind and know that all of our Serverless functions are running correctly. We are instantly aware now if there’s a problem. We love the fact that we have enough information in the Slack notification itself to take appropriate action immediately and know exactly where the issue occurred.
Thanks to Dashbird the time to discover the occurrence of an issue reduced from 2-4 hours to a matter of seconds or minutes. It also means that hundreds of dollars are saved every month.
Great onboarding: it takes just a couple of minutes to connect an AWS account to an organization in Dashbird. The UI is clean and gives a good overview of what is happening with the Lambdas and API Gateways in the account.
I mean, it is just extremely time-saving. It’s so efficient! I don’t think it’s an exaggeration or dramatic to say that Dashbird has been a lifesaver for us.
Dashbird provides an easier interface to monitor and debug problems with our Lambdas. Relevant logs are simple to find and view. Dashbird’s support has been good, and they take product suggestions with grace.
Great UI. Easy to navigate through CloudWatch logs. Simple setup.
Dashbird helped us refine the size of our Lambdas, resulting in significantly reduced costs. We have Dashbird alert us in seconds via email when any of our functions behaves abnormally. Their app immediately makes the cause and severity of errors obvious.