Skip to content

Commit

Permalink
Include payload in logging in case of Lambda invocation error
Browse files Browse the repository at this point in the history
  • Loading branch information
alexcasalboni committed May 19, 2020
1 parent 25ec494 commit c54f896
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lambda/executor.js
Expand Up @@ -117,7 +117,7 @@ const runInParallel = async(num, lambdaARN, lambdaAlias, payloads) => {
const data = await utils.invokeLambda(lambdaARN, lambdaAlias, payloads[i]);
// invocation errors return 200 and contain FunctionError and Payload
if (data.FunctionError) {
throw new Error('Invocation error: ' + data.Payload);
throw new Error(`Invocation error (running in parallel): ${data.Payload} with payload ${payloads[i]}`);
}
results.push(data);
});
Expand All @@ -133,7 +133,7 @@ const runInSeries = async(num, lambdaARN, lambdaAlias, payloads) => {
const data = await utils.invokeLambda(lambdaARN, lambdaAlias, payloads[i]);
// invocation errors return 200 and contain FunctionError and Payload
if (data.FunctionError) {
throw new Error('Invocation error: ' + data.Payload);
throw new Error(`Invocation error (running in series): ${data.Payload} with payload ${payloads[i]}`);
}
results.push(data);
}
Expand Down
80 changes: 80 additions & 0 deletions test/test-lambda.js
Expand Up @@ -567,7 +567,87 @@ describe('Lambda Functions', async() => {
value: '1024',
num: 10,
});
});

it('should include payload in exception message if invocation fails (series)', async() => {
utils.invokeLambda = async() => {
return {
FunctionError: 'Unhandled',
Payload: '{"errorType": "MemoryError", "stackTrace": [["/var/task/lambda_function.py", 11, "lambda_handler", "blabla"], ["/var/task/lambda_function.py", 7, "blabla]]}',
};
};
const error = await invokeForFailure(handler, {
lambdaARN: 'arnOK',
value: '1024',
num: 10,
payload: 'SENTINEL',
});

expect(error.message).to.contain('SENTINEL');
expect(error.message).to.contain('in series');
});

it('should include payload in exception message if invocation fails (parallel)', async() => {
utils.invokeLambda = async() => {
return {
FunctionError: 'Unhandled',
Payload: '{"errorType": "MemoryError", "stackTrace": [["/var/task/lambda_function.py", 11, "lambda_handler", "blabla"], ["/var/task/lambda_function.py", 7, "blabla]]}',
};
};
const error = await invokeForFailure(handler, {
lambdaARN: 'arnOK',
value: '1024',
num: 10,
parallelInvocation: true,
payload: 'SENTINEL',
});

expect(error.message).to.contain('SENTINEL');
expect(error.message).to.contain('in parallel');
});


it('should include weighted payload in exception message if invocation fails (series)', async() => {
utils.invokeLambda = async() => {
return {
FunctionError: 'Unhandled',
Payload: '{"errorType": "MemoryError", "stackTrace": [["/var/task/lambda_function.py", 11, "lambda_handler", "blabla"], ["/var/task/lambda_function.py", 7, "blabla]]}',
};
};
const error = await invokeForFailure(handler, {
lambdaARN: 'arnOK',
value: '1024',
num: 10,
payload: [
{payload: {key: 'SENTINEL1'}, weight: 1},
{payload: {key: 'SENTINEL2'}, weight: 1},
],
});

expect(error.message).to.contain('SENTINEL1');
expect(error.message).to.contain('in series');
});

it('should include weighted payload in exception message if invocation fails (parallel)', async() => {
utils.invokeLambda = async() => {
return {
FunctionError: 'Unhandled',
Payload: '{"errorType": "MemoryError", "stackTrace": [["/var/task/lambda_function.py", 11, "lambda_handler", "blabla"], ["/var/task/lambda_function.py", 7, "blabla]]}',
};
};
const error = await invokeForFailure(handler, {
lambdaARN: 'arnOK',
value: '1024',
num: 10,
parallelInvocation: true,
payload: [
{payload: 'SENTINEL1', weight: 1},
{payload: 'SENTINEL2', weight: 1},
],
});

expect(error.message).to.contain('SENTINEL1');
expect(error.message).to.contain('in parallel');
});

it('should report an error if invocation fails (parallel)', async() => {
Expand Down

0 comments on commit c54f896

Please sign in to comment.