Debugging an AWS Lambda that stopped working

Josh Sherman
2 min read
Software Development AWS DevOps

My wife and seed would agree that talking about AWS Lambdas are in my “big three” of things to not shut up about, along with fishing and professional wrestling.

Regardless, I do love them so (both the Lambdas and the fam bam).

As I’ve grown to use them more and more frequently for both work and play, I’ve honed in on how to improve performance as well as how to debug them when they decide to stop working as expected.

Here are a few of my favorite tips and tricks to quickly figure out what may be wrong with your Lambda:

1. Check the recent invocation logs

For all the ridicule that the AWS console receives, they still provide you with everything you need to figure out what the hell may be going wrong. It may be obvious, but checking the logs will usually reveal something, especially if the issue is caused by your code and not a configuration issue.

To check the logs, go to your Lambda, click on Monitor and then Logs to list out recent invocations. Clicking the LogStream link will get you more details.

2. Check the memory usage

Digging into the logs is great if you have a failure in your code that is dumping out an error, but if you’re maxing out your configured memory allotment, you will need to take a deeper look into the logs to see how much memory was consumed.

An easier approach is to list out the recent invocations (without drilling down into the logs) and you will see how much memory was allocated and how much was consumed. If you’re running out of memory your consumed memory will be the same as the configured memory, but also could be a megabyte or so more.

The values you want are MemorySetInMB and MemoryUsedInMB.

3. Check the execution time

Similar to memory usage, if your Lambda is running longer than the configured execution time, it’ll bomb out somewhat silently. By default an AWS Lambda has an execution time of three (3) seconds. This tends to be enough time if your code isn’t doing much and/or isn’t interfacing with external services.

I can’t even tell you how many times this has bit me and some of my peers. Hits especially hard when you’re adding logging to your function and you cry out “it’s not even getting to my code, what the actual eff?!”

Same place as before, but you’ll want to check DurationInMS and BilledDurationInMS.

Join the Conversation

Good stuff? Want more?

Weekly emails about technology, development, and sometimes sauerkraut.

100% Fresh, Grade A Content, Never Spam.

Related Articles