Working with Node.js on AWS Lambda
Error handling with Node.js on AWS Lambda becomes incredibly simple with Dashbird. We detect all errors that fall into the next four categories.
- Exceptions
- Errors
- Configuration errors
- Timeouts
Throwing an exception
Check out the example below.
exports.handler = async (event) => {
const err = new Error('I am a dog')
throw err
}
When this lambda function is invoked, it will notify AWS Lambda that function execution completed with an error and passed the error information to AWS Lambda. AWS Lambda sends the error information to AWS CloudWatch where the logs are stored. Developers don’t need to attach any agents inside their code. This means, to start using Dashbird, you don’t need to do any code changes whatsoever!
In addition, with each error, you get the context. Logs of the whole invocation, along with memory usage, duration, and other meaningful metrics.
On top of that, Dashbird groups similar errors, making it possible to estimate the scope of the problem and make debugging easier. For example, it might help to better observe the problem if you find some commonalities in the executions.
Here’s how a Node.js error looks like in Dashbird.
Got to love those stack traces!
Errors
You can find the complete list of Node.js errors here. Errors are parsed out automatically in Dashbird, and include a rundown of traceback and logs of the specific invocation. Per function errors are visible on a dedicated list, shown below.
AWS Lambda Timeouts
All calls made to AWS Lambda must complete execution within 15 minutes. The default timeout is 3 seconds, but you can set the timeout to any value between one second and 15 minutes.
Normally, error handling agents are unable to catch timeout errors, because the execution is halted on an upper level. Dashbird, however, reports timeouts like any other type of error.
Timeouts are expressed in Lambda logs in the following way.
REPORT RequestId: 41a10717-e9af-11e7-892c-5bb1a4054ed6
Duration: 300085.71 ms Billed Duration: 300000 ms Memory Size: 128 MB Max Memory Used: 92 MB
2017-12-25T20:12:38.950Z 41a10717-e9af-11e7-892c-5bb1a4054ed6 Task timed out after 300.09 seconds
Configuration errors
We make sure to tag configuration errors differently from regular errors so you can debug issues easier.
Missing module
Another scenario for errors in AWS Lambda is when you have a missing module included in your function code. In other types of programs, this isn’t a very common occurence since a developer would catch that right away. However, with Lambdas, the container is started up on demand, masking the problem until the user encounters it.
What’s important to note here, is that configuration errors are also not reported with agents, since the code execution does not reach the handler.
Here’s how it looks like:
START RequestId: 89342c24-91a1-11e8-b8ce-2981c530381f Version: $LATEST
Unable to import module 'app': Error
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/var/task/app.js:1:79)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
REPORT RequestId: 89342c24-91a1-11e8-b8ce-2981c530381f
Duration: 3.98 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 20 MB
Missing handler
Handler is a function in your code that is invoked by AWS Lambda when your service is executed. If the handler name provided in the Lambda configuration is different from the function in your code, this error will be produced upon Lambda execution and caught by Dashbird.
START RequestId: 5da69de5-91a2-11e8-8a9a-6d1e6b337909 Version: $LATEST
Unable to import module 'app': Error
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
REPORT RequestId: 5da69de5-91a2-11e8-8a9a-6d1e6b337909
Duration: 0.53 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 21 MB
###AWS Lambda errors
Apart from NodeJS specific errors, programmers have to think about failures that are specific to Lambda functions. In Runtime-agnostic Best Practices we have covered most of the problems that cause headaches to serverless developers.
We aim to improve Dashbird every day and user feedback is extremely important for that, so please let us know if you have any feedback about our features and error handling! We would really appreciate it!
Can’t find what you’re looking for? We’d love to help. Send us a message through the chat bubble or email us.