🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

lambda-error-sns-sender

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lambda-error-sns-sender - npm Package Compare versions

Comparing version

to
0.0.53

lambda-error-sns-sender.png

3

.projenrc.ts

@@ -132,5 +132,4 @@ import { awscdk } from 'projen';

],
}),
console.log();
});
project.synth();

@@ -5,7 +5,16 @@ # Lambda Error SNS Sender

How does it work:
- Lambda is subscribed to the SNS topic where you receive your alarms. There is a message body subscription filter that limits errors based on the Lambda error metric. If you defied your metic in some other way, not the default one, you will have to change that filter.
- Lambda analyzes the message, finds a log of the failed Lambda, and queries the log for the period that the metic was configured, plus some additional safety time, so we do not miss that error message. It extracts just a number of errors that can fit in one SNS message.
-Lambda sends errors to the same SNS you use for alerts. So apart from the common Alarm message, you will receive an additional one with error messages.
How does it work?
1. **Lambda is subscribed to the SNS topic where you receive your alarms.** There is a message body subscription filter that limits errors based on the Lambda error metric. You must change the filter if you defied your metric in some other way, not the default one.
1. **Lambda analyzes the message**, finds a log of the failed Lambda, and queries the log group for the period that the metric was configured, plus some additional safety time, so we do not miss that error message. It extracts just a number of errors that can fit in one SNS message.
1. **Lambda sends errors to the same SNS** that you use for alerts. So, apart from the Alarm message for changing the error state, you will receive an additional one with detailed error messages.
![lambda-error-sns-sender](lambda-error-sns-sender.png)
- **[CDK construct](https://constructs.dev/packages/lambda-error-sns-sender)**
If you are building your system with CDK (or [SST](https://sst.dev/)). Available for TypeScript, Java, C#, Python, and Go.
- **[CloudFormation](https://lambda-error-sns-sender.s3.eu-west-1.amazonaws.com/lambda-error-sns-sender.yaml)**
For existing solutions, so you do not have to modify them. You deploy and point to the existing SNS used for CloudWatch alarms.
**If you are interested how to use it and how was build see the [blog post](https://www.serverlesslife.com/live/Improving_CloudWatch_Alarms_for_Lambda_Errors.html).**
# API Reference <a name="API Reference" id="api-reference"></a>

@@ -12,0 +21,0 @@

@@ -107,3 +107,2 @@ import { Buffer } from 'node:buffer';

//const joinedLogs = `LAMBDA ${functionName} ERRORS:\n\n${logs.join('\n')}`;
const joinedLogs = logs.join('\n');

@@ -110,0 +109,0 @@

@@ -92,9 +92,2 @@ "use strict";

exports.CloudFormationExportStack = CloudFormationExportStack;
const app = new aws_cdk_lib_1.App();
new CloudFormationExportStack(app, 'lambda-error-sns-sender-cf', {
synthesizer: new aws_cdk_lib_1.DefaultStackSynthesizer({
generateBootstrapVersionRule: false,
}),
});
app.synth();
function setNodeNames(constructs, parentName) {

@@ -117,2 +110,2 @@ let i = 0;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGb3JtYXRpb25FeHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xvdWRGb3JtYXRpb25FeHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBTXFCO0FBQ3JCLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDJDQUEyQztBQUUzQyxtQ0FBK0M7QUFFL0MsTUFBYSx5QkFBMEIsU0FBUSxtQkFBSztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQW9CLEVBQUU7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFnQixFQUFFLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQXFDLEVBQUUsQ0FBQztRQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQkFBWSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO2dCQUNqRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUseURBQXlEO2FBQ3ZFLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNyQyxJQUFJLEVBQ0osV0FBVyxDQUFDLEVBQUUsRUFDZCxnQkFBZ0IsQ0FBQyxhQUFhLENBQy9CLENBQUM7WUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQXFCLENBQUMsQ0FBQztZQUV0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEVBQUUsRUFBRTtnQkFDcEUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsWUFBWSxD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QUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3REO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcCxcbiAgU3RhY2ssXG4gIFN0YWNrUHJvcHMsXG4gIENmblBhcmFtZXRlcixcbiAgRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYUVycm9yU25zU2VuZGVyIH0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvbkV4cG9ydFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhY2tQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBub09mUGFyYW1ldGVycyA9IDU7XG4gICAgY29uc3Qgc25zVG9waWNzOiBzbnMuVG9waWNbXSA9IFtdO1xuICAgIGNvbnN0IGNvbmRpdGlvbnNEaWN0OiBSZWNvcmQ8c3RyaW5nLCBjZGsuQ2ZuQ29uZGl0aW9uPiA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbm9PZlBhcmFtZXRlcnM7IGkrKykge1xuICAgICAgY29uc3Qgc25zVG9waWNBcm5QYXJhbSA9IG5ldyBDZm5QYXJhbWV0ZXIodGhpcywgYHNuc1RvcGljQXJuJHtpfWAsIHtcbiAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU05TIFRvcGljIEFSTiByZWNlaXZlIGFsYXJtcyBhbmQgc2VuZCBMYW1iZGEgZXJyb3JzIHRvLicsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc25zVG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgc25zVG9waWMke2l9YCxcbiAgICAgICAgc25zVG9waWNBcm5QYXJhbS52YWx1ZUFzU3RyaW5nLFxuICAgICAgKTtcbiAgICAgIHNuc1RvcGljcy5wdXNoKHNuc1RvcGljIGFzIHNucy5Ub3BpYyk7XG5cbiAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IG5ldyBjZGsuQ2ZuQ29uZGl0aW9uKHRoaXMsIGBjb25kaXRpb25TbnNUb3BpYyR7aX1gLCB7XG4gICAgICAgIGV4cHJlc3Npb246IGNkay5Gbi5jb25kaXRpb25Ob3QoXG4gICAgICAgICAgY2RrLkZuLmNvbmRpdGlvbkVxdWFscygnJywgc25zVG9waWMudG9waWNBcm4pLFxuICAgICAgICApLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbmRpdGlvbnNEaWN0W3Nuc1RvcGljQXJuUGFyYW0udmFsdWVBc1N0cmluZ10gPSBjb25kaXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgbWF4TnVtYmVyT2ZMb2dzUGFyYW0gPSBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMsIGBtYXhOdW1iZXJPZkxvZ3NgLCB7XG4gICAgICB0eXBlOiAnTnVtYmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTWF4IG51bWJlciBvZiBsb2dzIHRvIHNlbmQgdG8gU05TIFRvcGljLicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBsYW1iZGFFcnJvclNuc1NlbmRlciA9IG5ldyBMYW1iZGFFcnJvclNuc1NlbmRlcihcbiAgICAgIHRoaXMsXG4gICAgICAnbGFtYmRhRXJyb3JTbnNTZW5kZXInLFxuICAgICAge1xuICAgICAgICBzbnNUb3BpY3M6IHNuc1RvcGljcyxcbiAgICAgICAgbWF4TnVtYmVyT2ZMb2dzOiBtYXhOdW1iZXJPZkxvZ3NQYXJhbS52YWx1ZUFzTnVtYmVyLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGxhbWJkYUVycm9yU25zU2VuZGVyLm5vZGVcbiAgICAgIC5maW5kQWxsKClcbiAgICAgIC5maWx0ZXIoKHMpID0+IHMgaW5zdGFuY2VvZiBzbnMuQ2ZuU3Vic2NyaXB0aW9uKSBhcyBzbnMuQ2ZuU3Vic2NyaXB0aW9uW107XG5cbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zKSB7XG4gICAgICBpZiAoY29uZGl0aW9uc0RpY3Rbc3Vic2NyaXB0aW9uLnRvcGljQXJuXSkge1xuICAgICAgICBzdWJzY3JpcHRpb24uY2ZuT3B0aW9ucy5jb25kaXRpb24gPVxuICAgICAgICAgIGNvbmRpdGlvbnNEaWN0W3N1YnNjcmlwdGlvbi50b3BpY0Fybl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc25zRXJyb3JGdW5jID0gbGFtYmRhRXJyb3JTbnNTZW5kZXIubm9kZS5maW5kQ2hpbGQoXG4gICAgICAnbGFtYmRhU25zRXJyb3InLFxuICAgICkgYXMgbGFtYmRhLkZ1bmN0aW9uO1xuXG4gICAgZm9yIChjb25zdCBsYW1iZGFQZXJtaXNzaW9uIG9mIHNuc0Vycm9yRnVuYy5wZXJtaXNzaW9uc05vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChsYW1iZGFQZXJtaXNzaW9uIGluc3RhbmNlb2YgbGFtYmRhLkNmblBlcm1pc3Npb24pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhbWJkYVBlcm1pc3Npb24uc291cmNlQXJuICYmXG4gICAgICAgICAgY29uZGl0aW9uc0RpY3RbbGFtYmRhUGVybWlzc2lvbi5zb3VyY2VBcm5dXG4gICAgICAgICkge1xuICAgICAgICAgIGxhbWJkYVBlcm1pc3Npb24uY2ZuT3B0aW9ucy5jb25kaXRpb24gPVxuICAgICAgICAgICAgY29uZGl0aW9uc0RpY3RbbGFtYmRhUGVybWlzc2lvbi5zb3VyY2VBcm5dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGFtYmRhUG9saWN5ID0gc25zRXJyb3JGdW5jLm5vZGVcbiAgICAgIC5maW5kQWxsKClcbiAgICAgIC5maW5kKChjKSA9PiBjIGluc3RhbmNlb2YgaWFtLkNmblBvbGljeSkgYXMgaWFtLkNmblBvbGljeTtcblxuICAgIGNvbnN0IG5ld1BvbGljeVN0YXRlbWVudHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiAobGFtYmRhUG9saWN5LnBvbGljeURvY3VtZW50Py5zdGF0ZW1lbnRzID8/XG4gICAgICBbXSkgYXMgaWFtLlBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgICBsZXQgYWRkQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICBsZXQgY29uZGl0aW9uOiBjZGsuQ2ZuQ29uZGl0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHN0YXRlbWVudC5yZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbnNEaWN0W3Jlc291cmNlXSkge1xuICAgICAgICAgIGFkZENvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uc0RpY3RbcmVzb3VyY2VdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRDb25kaXRpb24gJiYgY29uZGl0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlbWVudCA9IHtcbiAgICAgICAgICAnRm46OklmJzogW1xuICAgICAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxJZCxcbiAgICAgICAgICAgIHN0YXRlbWVudC50b0pTT04oKSxcbiAgICAgICAgICAgICxcbiAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpOb1ZhbHVlJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgbmV3UG9saWN5U3RhdGVtZW50cy5wdXNoKG5ld1N0YXRlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdQb2xpY3lTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50LnRvSlNPTigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYW1iZGFQb2xpY3kucG9saWN5RG9jdW1lbnQgPSB7XG4gICAgICBTdGF0ZW1lbnQ6IG5ld1BvbGljeVN0YXRlbWVudHMsXG4gICAgfTtcblxuICAgIHNldE5vZGVOYW1lcyh0aGlzLm5vZGUuY2hpbGRyZW4pO1xuICB9XG59XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcblxubmV3IENsb3VkRm9ybWF0aW9uRXhwb3J0U3RhY2soYXBwLCAnbGFtYmRhLWVycm9yLXNucy1zZW5kZXItY2YnLCB7XG4gIHN5bnRoZXNpemVyOiBuZXcgRGVmYXVsdFN0YWNrU3ludGhlc2l6ZXIoe1xuICAgIGdlbmVyYXRlQm9vdHN0cmFwVmVyc2lvblJ1bGU6IGZhbHNlLFxuICB9KSxcbn0pO1xuXG5hcHAuc3ludGgoKTtcblxuZnVuY3Rpb24gc2V0Tm9kZU5hbWVzKGNvbnN0cnVjdHM6IElDb25zdHJ1Y3RbXSwgcGFyZW50TmFtZT86IHN0cmluZykge1xuICBsZXQgaSA9IDA7XG4gIGZvciAoY29uc3QgY29uc3RydWN0IG9mIGNvbnN0cnVjdHMpIHtcbiAgICBsZXQgbmV3UGFyZW50TmFtZSA9IHBhcmVudE5hbWU7XG5cbiAgICBpZiAoY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkIGluc3RhbmNlb2YgY2RrLkNmbkVsZW1lbnQpIHtcbiAgICAgIG5ld1BhcmVudE5hbWUgPSBwYXJlbnROYW1lXG4gICAgICAgID8gYCR7cGFyZW50TmFtZX0ke2NvbnN0cnVjdC5ub2RlLmlkfWBcbiAgICAgICAgOiBjb25zdHJ1Y3Qubm9kZS5pZDtcbiAgICAgIGNvbnN0cnVjdC5ub2RlLmRlZmF1bHRDaGlsZC5vdmVycmlkZUxvZ2ljYWxJZChuZXdQYXJlbnROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY29uc3RydWN0IGluc3RhbmNlb2YgbGFtYmRhLkNmblBlcm1pc3Npb24pIHtcbiAgICAgIGNvbnN0cnVjdC5vdmVycmlkZUxvZ2ljYWxJZChgJHtuZXdQYXJlbnROYW1lfVBlcm1pc3Npb24ke2l9YCk7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgc2V0Tm9kZU5hbWVzKGNvbnN0cnVjdC5ub2RlLmNoaWxkcmVuLCBuZXdQYXJlbnROYW1lKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGb3JtYXRpb25FeHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xvdWRGb3JtYXRpb25FeHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQThEO0FBQzlELG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDJDQUEyQztBQUUzQyxtQ0FBK0M7QUFFL0MsTUFBYSx5QkFBMEIsU0FBUSxtQkFBSztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQW9CLEVBQUU7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFnQixFQUFFLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQXFDLEVBQUUsQ0FBQztRQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQkFBWSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFO2dCQUNqRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUseURBQXlEO2FBQ3ZFLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNyQyxJQUFJLEVBQ0osV0FBVyxDQUFDLEVBQUUsRUFDZCxnQkFBZ0IsQ0FBQyxhQUFhLENBQy9CLENBQUM7WUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQXFCLENBQUMsQ0FBQztZQUV0QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEVBQUUsRUFBRTtnQkFDcEUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsWUFBWSxD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UUFFRCxZQUFZLENBQUMsY0FBYyxHQUFHO1lBQzVCLFNBQVMsRUFBRSxtQkFBbUI7U0FDL0IsQ0FBQztRQUVGLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQS9HRCw4REErR0M7QUFFRCxTQUFTLFlBQVksQ0FBQyxVQUF3QixFQUFFLFVBQW1CO0lBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1FBQ2xDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUUvQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDekQsYUFBYSxHQUFHLFVBQVU7Z0JBQ3hCLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBSSxTQUFTLFlBQVksTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUM3QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxhQUFhLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBRUQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3REO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBTdGFja1Byb3BzLCBDZm5QYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBMYW1iZGFFcnJvclNuc1NlbmRlciB9IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgY2xhc3MgQ2xvdWRGb3JtYXRpb25FeHBvcnRTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3Qgbm9PZlBhcmFtZXRlcnMgPSA1O1xuICAgIGNvbnN0IHNuc1RvcGljczogc25zLlRvcGljW10gPSBbXTtcbiAgICBjb25zdCBjb25kaXRpb25zRGljdDogUmVjb3JkPHN0cmluZywgY2RrLkNmbkNvbmRpdGlvbj4gPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5vT2ZQYXJhbWV0ZXJzOyBpKyspIHtcbiAgICAgIGNvbnN0IHNuc1RvcGljQXJuUGFyYW0gPSBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMsIGBzbnNUb3BpY0FybiR7aX1gLCB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NOUyBUb3BpYyBBUk4gcmVjZWl2ZSBhbGFybXMgYW5kIHNlbmQgTGFtYmRhIGVycm9ycyB0by4nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNuc1RvcGljID0gc25zLlRvcGljLmZyb21Ub3BpY0FybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYHNuc1RvcGljJHtpfWAsXG4gICAgICAgIHNuc1RvcGljQXJuUGFyYW0udmFsdWVBc1N0cmluZyxcbiAgICAgICk7XG4gICAgICBzbnNUb3BpY3MucHVzaChzbnNUb3BpYyBhcyBzbnMuVG9waWMpO1xuXG4gICAgICBjb25zdCBjb25kaXRpb24gPSBuZXcgY2RrLkNmbkNvbmRpdGlvbih0aGlzLCBgY29uZGl0aW9uU25zVG9waWMke2l9YCwge1xuICAgICAgICBleHByZXNzaW9uOiBjZGsuRm4uY29uZGl0aW9uTm90KFxuICAgICAgICAgIGNkay5Gbi5jb25kaXRpb25FcXVhbHMoJycsIHNuc1RvcGljLnRvcGljQXJuKSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25kaXRpb25zRGljdFtzbnNUb3BpY0FyblBhcmFtLnZhbHVlQXNTdHJpbmddID0gY29uZGl0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG1heE51bWJlck9mTG9nc1BhcmFtID0gbmV3IENmblBhcmFtZXRlcih0aGlzLCBgbWF4TnVtYmVyT2ZMb2dzYCwge1xuICAgICAgdHlwZTogJ051bWJlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ01heCBudW1iZXIgb2YgbG9ncyB0byBzZW5kIHRvIFNOUyBUb3BpYy4nLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGFtYmRhRXJyb3JTbnNTZW5kZXIgPSBuZXcgTGFtYmRhRXJyb3JTbnNTZW5kZXIoXG4gICAgICB0aGlzLFxuICAgICAgJ2xhbWJkYUVycm9yU25zU2VuZGVyJyxcbiAgICAgIHtcbiAgICAgICAgc25zVG9waWNzOiBzbnNUb3BpY3MsXG4gICAgICAgIG1heE51bWJlck9mTG9nczogbWF4TnVtYmVyT2ZMb2dzUGFyYW0udmFsdWVBc051bWJlcixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBsYW1iZGFFcnJvclNuc1NlbmRlci5ub2RlXG4gICAgICAuZmluZEFsbCgpXG4gICAgICAuZmlsdGVyKChzKSA9PiBzIGluc3RhbmNlb2Ygc25zLkNmblN1YnNjcmlwdGlvbikgYXMgc25zLkNmblN1YnNjcmlwdGlvbltdO1xuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKGNvbmRpdGlvbnNEaWN0W3N1YnNjcmlwdGlvbi50b3BpY0Fybl0pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmNmbk9wdGlvbnMuY29uZGl0aW9uID1cbiAgICAgICAgICBjb25kaXRpb25zRGljdFtzdWJzY3JpcHRpb24udG9waWNBcm5dO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNuc0Vycm9yRnVuYyA9IGxhbWJkYUVycm9yU25zU2VuZGVyLm5vZGUuZmluZENoaWxkKFxuICAgICAgJ2xhbWJkYVNuc0Vycm9yJyxcbiAgICApIGFzIGxhbWJkYS5GdW5jdGlvbjtcblxuICAgIGZvciAoY29uc3QgbGFtYmRhUGVybWlzc2lvbiBvZiBzbnNFcnJvckZ1bmMucGVybWlzc2lvbnNOb2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAobGFtYmRhUGVybWlzc2lvbiBpbnN0YW5jZW9mIGxhbWJkYS5DZm5QZXJtaXNzaW9uKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBsYW1iZGFQZXJtaXNzaW9uLnNvdXJjZUFybiAmJlxuICAgICAgICAgIGNvbmRpdGlvbnNEaWN0W2xhbWJkYVBlcm1pc3Npb24uc291cmNlQXJuXVxuICAgICAgICApIHtcbiAgICAgICAgICBsYW1iZGFQZXJtaXNzaW9uLmNmbk9wdGlvbnMuY29uZGl0aW9uID1cbiAgICAgICAgICAgIGNvbmRpdGlvbnNEaWN0W2xhbWJkYVBlcm1pc3Npb24uc291cmNlQXJuXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxhbWJkYVBvbGljeSA9IHNuc0Vycm9yRnVuYy5ub2RlXG4gICAgICAuZmluZEFsbCgpXG4gICAgICAuZmluZCgoYykgPT4gYyBpbnN0YW5jZW9mIGlhbS5DZm5Qb2xpY3kpIGFzIGlhbS5DZm5Qb2xpY3k7XG5cbiAgICBjb25zdCBuZXdQb2xpY3lTdGF0ZW1lbnRzID0gW107XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgKGxhbWJkYVBvbGljeS5wb2xpY3lEb2N1bWVudD8uc3RhdGVtZW50cyA/P1xuICAgICAgW10pIGFzIGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXSkge1xuICAgICAgbGV0IGFkZENvbmRpdGlvbiA9IGZhbHNlO1xuICAgICAgbGV0IGNvbmRpdGlvbjogY2RrLkNmbkNvbmRpdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBzdGF0ZW1lbnQucmVzb3VyY2VzKSB7XG4gICAgICAgIGlmIChjb25kaXRpb25zRGljdFtyZXNvdXJjZV0pIHtcbiAgICAgICAgICBhZGRDb25kaXRpb24gPSB0cnVlO1xuICAgICAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnNEaWN0W3Jlc291cmNlXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRkQ29uZGl0aW9uICYmIGNvbmRpdGlvbikge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZW1lbnQgPSB7XG4gICAgICAgICAgJ0ZuOjpJZic6IFtcbiAgICAgICAgICAgIGNvbmRpdGlvbi5sb2dpY2FsSWQsXG4gICAgICAgICAgICBzdGF0ZW1lbnQudG9KU09OKCksXG4gICAgICAgICAgICAsXG4gICAgICAgICAgICB7IFJlZjogJ0FXUzo6Tm9WYWx1ZScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5ld1BvbGljeVN0YXRlbWVudHMucHVzaChuZXdTdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UG9saWN5U3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudC50b0pTT04oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFtYmRhUG9saWN5LnBvbGljeURvY3VtZW50ID0ge1xuICAgICAgU3RhdGVtZW50OiBuZXdQb2xpY3lTdGF0ZW1lbnRzLFxuICAgIH07XG5cbiAgICBzZXROb2RlTmFtZXModGhpcy5ub2RlLmNoaWxkcmVuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXROb2RlTmFtZXMoY29uc3RydWN0czogSUNvbnN0cnVjdFtdLCBwYXJlbnROYW1lPzogc3RyaW5nKSB7XG4gIGxldCBpID0gMDtcbiAgZm9yIChjb25zdCBjb25zdHJ1Y3Qgb2YgY29uc3RydWN0cykge1xuICAgIGxldCBuZXdQYXJlbnROYW1lID0gcGFyZW50TmFtZTtcblxuICAgIGlmIChjb25zdHJ1Y3Qubm9kZS5kZWZhdWx0Q2hpbGQgaW5zdGFuY2VvZiBjZGsuQ2ZuRWxlbWVudCkge1xuICAgICAgbmV3UGFyZW50TmFtZSA9IHBhcmVudE5hbWVcbiAgICAgICAgPyBgJHtwYXJlbnROYW1lfSR7Y29uc3RydWN0Lm5vZGUuaWR9YFxuICAgICAgICA6IGNvbnN0cnVjdC5ub2RlLmlkO1xuICAgICAgY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkLm92ZXJyaWRlTG9naWNhbElkKG5ld1BhcmVudE5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjb25zdHJ1Y3QgaW5zdGFuY2VvZiBsYW1iZGEuQ2ZuUGVybWlzc2lvbikge1xuICAgICAgY29uc3RydWN0Lm92ZXJyaWRlTG9naWNhbElkKGAke25ld1BhcmVudE5hbWV9UGVybWlzc2lvbiR7aX1gKTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICBzZXROb2RlTmFtZXMoY29uc3RydWN0Lm5vZGUuY2hpbGRyZW4sIG5ld1BhcmVudE5hbWUpO1xuICB9XG59XG4iXX0=

@@ -59,3 +59,3 @@ "use strict";

_a = JSII_RTTI_SYMBOL_1;
LambdaErrorSnsSender[_a] = { fqn: "lambda-error-sns-sender.LambdaErrorSnsSender", version: "0.0.52" };
LambdaErrorSnsSender[_a] = { fqn: "lambda-error-sns-sender.LambdaErrorSnsSender", version: "0.0.53" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsMkNBQTJDO0FBRTNDLGtFQUFrRTtBQUNsRSwyQ0FBdUM7QUFVdkMsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMzQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDL0QsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQ0FBaUMsQ0FBQyxDQUN4RDtZQUNELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsV0FBVyxFQUFFO2dCQUNYLGtCQUFrQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSzthQUNoRTtZQUNELE9BQU8sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQyxDQUFDO1FBRUgsaUNBQWlDO1FBQ2pDLFlBQVksQ0FBQyxlQUFlLENBQzFCLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNqQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxzREFBc0Q7U0FDekUsQ0FBQyxDQUNILENBQUM7UUFDRixLQUFLLE1BQU0sUUFBUSxJQUFJLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdkMsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLFVBQVUsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDbkMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztvQkFDbEMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUN0QixDQUFDLENBQ0g7Z0JBQ0QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUNsQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO29CQUNsQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQzFCLENBQUMsQ0FDSDtnQkFDRCxhQUFhLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQ3RDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7b0JBQ2xDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDekIsQ0FBQyxDQUNIO2dCQUNELFNBQVMsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDbEMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztvQkFDbEMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO2lCQUNuQixDQUFDLENBQ0g7YUFDRixDQUFDO1lBRUYsUUFBUSxDQUFDLGVBQWUsQ0FDdEIsSUFBSSxZQUFZLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFO2dCQUNoRCwyQkFBMkIsRUFBRTtvQkFDM0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDO2lCQUNsRTthQUNGLENBQUMsQ0FDSCxDQUFDO1lBRUYsUUFBUSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7O0FBN0RILG9EQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0IHsgRmlsdGVyT3JQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCAqIGFzIHN1YnNjcmlwdGlvbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zLXN1YnNjcmlwdGlvbnMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRXJyb3JTbnNTZW5kZXJQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgc25zVG9waWNzOiBzbnMuVG9waWNbXTtcbiAgcmVhZG9ubHkgbWF4TnVtYmVyT2ZMb2dzPzogbnVtYmVyO1xuICByZWFkb25seSBmaWx0ZXI/OiB7XG4gICAgW2F0dHJpYnV0ZTogc3RyaW5nXTogRmlsdGVyT3JQb2xpY3k7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFFcnJvclNuc1NlbmRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYW1iZGFFcnJvclNuc1NlbmRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMuc25zVG9waWNzIHx8IHByb3BzPy5zbnNUb3BpY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNOUyBUb3BpY3MgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbnNFcnJvckZ1bmMgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdsYW1iZGFTbnNFcnJvcicsIHtcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi9mdW5jdGlvbnMvbGFtYmRhU25zRXJyb3InKSxcbiAgICAgICksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE1BWF9OVU1CRVJfT0ZfTE9HUzogcHJvcHM/Lm1heE51bWJlck9mTG9ncz8udG9TdHJpbmcoKSA/PyAnMTAwJyxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxKSxcbiAgICB9KTtcblxuICAgIC8vZ3JhbmQgYWNjZXNzIHRvIGNsb3Vkd2F0Y2ggbG9nc1xuICAgIHNuc0Vycm9yRnVuYy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpGaWx0ZXJMb2dFdmVudHMnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSwgLy8gSSBkbyBub3Qga25vdyB3aGljaCByZXNvdXJjZXMgSSB3aWxsIG5lZWQgdG8gYWNjZXNzXG4gICAgICB9KSxcbiAgICApO1xuICAgIGZvciAoY29uc3Qgc25zVG9waWMgb2YgcHJvcHM/LnNuc1RvcGljcykge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHtcbiAgICAgICAgTWV0cmljTmFtZTogc25zLkZpbHRlck9yUG9saWN5LmZpbHRlcihcbiAgICAgICAgICBzbnMuU3Vic2NyaXB0aW9uRmlsdGVyLnN0cmluZ0ZpbHRlcih7XG4gICAgICAgICAgICBhbGxvd2xpc3Q6IFsnRXJyb3JzJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICAgIE5hbWVzcGFjZTogc25zLkZpbHRlck9yUG9saWN5LmZpbHRlcihcbiAgICAgICAgICBzbnMuU3Vic2NyaXB0aW9uRmlsdGVyLnN0cmluZ0ZpbHRlcih7XG4gICAgICAgICAgICBhbGxvd2xpc3Q6IFsnQVdTL0xhbWJkYSddLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgICBTdGF0aXN0aWNUeXBlOiBzbnMuRmlsdGVyT3JQb2xpY3kuZmlsdGVyKFxuICAgICAgICAgIHNucy5TdWJzY3JpcHRpb25GaWx0ZXIuc3RyaW5nRmlsdGVyKHtcbiAgICAgICAgICAgIGFsbG93bGlzdDogWydTdGF0aXN0aWMnXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdGlzdGljOiBzbnMuRmlsdGVyT3JQb2xpY3kuZmlsdGVyKFxuICAgICAgICAgIHNucy5TdWJzY3JpcHRpb25GaWx0ZXIuc3RyaW5nRmlsdGVyKHtcbiAgICAgICAgICAgIGFsbG93bGlzdDogWydTVU0nXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG5cbiAgICAgIHNuc1RvcGljLmFkZFN1YnNjcmlwdGlvbihcbiAgICAgICAgbmV3IHN1YnNjcmlwdGlvbi5MYW1iZGFTdWJzY3JpcHRpb24oc25zRXJyb3JGdW5jLCB7XG4gICAgICAgICAgZmlsdGVyUG9saWN5V2l0aE1lc3NhZ2VCb2R5OiB7XG4gICAgICAgICAgICBUcmlnZ2VyOiBzbnMuRmlsdGVyT3JQb2xpY3kucG9saWN5KHByb3BzLmZpbHRlciA/PyBkZWZhdWx0RmlsdGVyKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHNuc1RvcGljLmdyYW50UHVibGlzaChzbnNFcnJvckZ1bmMpO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -44,7 +44,7 @@ {

"@types/node": "^16",
"@typescript-eslint/eslint-plugin": "^5",
"@typescript-eslint/parser": "^5",
"@typescript-eslint/eslint-plugin": "^6",
"@typescript-eslint/parser": "^6",
"aws-cdk-lib": "2.70.0",
"constructs": "10.0.5",
"esbuild": "^0.19.2",
"esbuild": "^0.19.4",
"esbuild-runner": "^2.2.2",

@@ -54,16 +54,16 @@ "eslint": "^8",

"eslint-import-resolver-node": "^0.3.9",
"eslint-import-resolver-typescript": "^3.6.0",
"eslint-plugin-import": "^2.28.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-prettier": "^5.0.0",
"jsii": "^5.1.9",
"jsii-diff": "^1.87.0",
"jsii-docgen": "^9.1.2",
"jsii-pacmak": "^1.87.0",
"jsii-diff": "^1.89.0",
"jsii-docgen": "^9.2.2",
"jsii-pacmak": "^1.89.0",
"jsii-rosetta": "^5.1.9",
"npm-check-updates": "^16",
"prettier": "^3.0.1",
"projen": "^0.72.11",
"prettier": "^3.0.3",
"projen": "^0.73.38",
"standard-version": "^9",
"ts-node": "^10.9.1",
"typescript": "^5.1.6"
"typescript": "^5.2.2"
},

@@ -89,3 +89,3 @@ "peerDependencies": {

"license": "Apache-2.0",
"version": "0.0.52",
"version": "0.0.53",
"types": "lib/index.d.ts",

@@ -92,0 +92,0 @@ "stability": "stable",

@@ -5,5 +5,15 @@ # Lambda Error SNS Sender

How does it work:
- Lambda is subscribed to the SNS topic where you receive your alarms. There is a message body subscription filter that limits errors based on the Lambda error metric. If you defied your metic in some other way, not the default one, you will have to change that filter.
- Lambda analyzes the message, finds a log of the failed Lambda, and queries the log for the period that the metic was configured, plus some additional safety time, so we do not miss that error message. It extracts just a number of errors that can fit in one SNS message.
-Lambda sends errors to the same SNS you use for alerts. So apart from the common Alarm message, you will receive an additional one with error messages.
How does it work?
1. **Lambda is subscribed to the SNS topic where you receive your alarms.** There is a message body subscription filter that limits errors based on the Lambda error metric. You must change the filter if you defied your metric in some other way, not the default one.
1. **Lambda analyzes the message**, finds a log of the failed Lambda, and queries the log group for the period that the metric was configured, plus some additional safety time, so we do not miss that error message. It extracts just a number of errors that can fit in one SNS message.
1. **Lambda sends errors to the same SNS** that you use for alerts. So, apart from the Alarm message for changing the error state, you will receive an additional one with detailed error messages.
![lambda-error-sns-sender](lambda-error-sns-sender.png)
- **[CDK construct](https://constructs.dev/packages/lambda-error-sns-sender)**
If you are building your system with CDK (or [SST](https://sst.dev/)). Available for TypeScript, Java, C#, Python, and Go.
- **[CloudFormation](https://lambda-error-sns-sender.s3.eu-west-1.amazonaws.com/lambda-error-sns-sender.yaml)**
For existing solutions, so you do not have to modify them. You deploy and point to the existing SNS used for CloudWatch alarms.
**If you are interested how to use it and how was build see the [blog post](https://www.serverlesslife.com/live/Improving_CloudWatch_Alarms_for_Lambda_Errors.html).**

@@ -140,3 +140,2 @@ import * as fs from 'fs';

Body: body,
//ACL: 'public-read',
};

@@ -143,0 +142,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet