Careful sending complex objects to lambda callback
Ran into an issue today with the following code. It's the second or third time it's bitten me, and I think this time I finally am learning the general guideline: don't pass complex objects into your lambda success/failure callbacks!
export async function main(event, context, callback) {
const id = event.pathParameters.id;
try {
const result = await startExecution(
process.env.statemachine_arn, JSON.stringify({ id })
);
callback(null, success({ status: true, result }));
} catch (error) {
console.log(error.message);
callback(error, failure({ status: false, message: error.message }));
}
}
This lambda will fail with Converting circular structure to JSON
exception, because the result object returned from the startExecution
function is a big complex object that doesn't work with JSON.stringify
. I've had the same thing happen to me with the results of axios
requests, as well as other AWS service calls.
To fix, don't pass result
but instead pass only what you need returned, or simply true
.