Lately, I’ve been developing a Lambda function to create a pair of keys, store one in a parameter and return the other to the user. Today I got my first clean run, and I’m writing this to celebrate.
As part of learning lots of things along the way, because I hadn’t developed anything on AWS before, I found out that AWS reports errors in many different ways. Here are those that occurred to me in the last few hours.
See: AWS Lambda Invoke Errors (documentation)
Error — InvalidZipFileException
{ InvalidZipFileException: Lambda was not able to unzip the file <stack trace...> message: 'Lambda was not able to unzip the file', code: 'InvalidZipFileException', time: 2017-09-16T16:04:04.558Z, requestId: '<request id...>', statusCode: 502, retryable: true } }
- This error occurred because the zip file I had uploaded was wrong: the files it contained were stored into a directory.
- This is a Lambda creation error, and it’s quite complete.
- Unhandled / Handled classification is limited to Lambda execution.
Error — Process exited
{ errorMessage: 'RequestId: <request id...> Process exited before completing request' }
- This error occurred because I threw a validation error.
- I could catch this error, but don’t, so it’s classified as Unhandled.
- The logs show my error and its stack trace.
17:12:39 START RequestId: <request id...> Version: $LATEST 17:12:39 2017-09-16T17:12:39.442Z <request id...> Error: Expected a pair ID for your keys. at setPairId (/var/task/createPairOfKeys.js:9832:15) at handler (/var/task/createPairOfKeys.js:9805:9) 17:12:39 END RequestId: <request id...> 17:12:39 REPORT RequestId: <request id...> Duration: 203.72 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 78 MB 17:12:39 RequestId: <request id...> Process exited before completing request
Error — Timed out
{ errorMessage: '2017-09-16T17:32:08.746Z <request id...> Task timed out after 10.00 seconds' }
- This error occurred because generating a pair of keys is not fast (bigint maths involved) and, in my few tests, it sometimes needed more than 40 seconds.
- Surprisingly, my MacBook is faster than AWS Lambda. A few times it took less than 1 second, most of the times less than 6 seconds, and only once it timed out at 10 seconds.
- I can’t catch this error, so it’s classified as Unhandled.
Error — AccessDeniedException
{ errorMessage: 'User: <user arn...> is not authorized to perform: ssm:PutParameter on resource: <resource arn...>', errorType: 'AccessDeniedException', stackTrace: [Object] } } }
- This error occurred because the role I had assigned to my Lambda function didn’t have the right to write SSM parameters.
- I catch this error and swallow it, so it’s classified as Handled.
Error — ParameterAlreadyExists
{ errorMessage: 'The parameter already exists. To overwrite this value, set the overwrite option in the request to true.', errorType: 'ParameterAlreadyExists', stackTrace: [Object] } } }
- This error occurred because I explicitly create my SSM parameter with overwrite set to false. Not gonna change it, this is by design.
- Notice how this is an exception whose name doesn’t end with Exception.
- I catch this error and swallow it, so it’s classified as Handled.