@scloud/cdk-patterns
Version:
Serverless CDK patterns for common infrastructure needs
43 lines • 8.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DynamoDbStreamFunction = void 0;
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
const constructs_1 = require("constructs");
const ZipFunction_1 = require("./ZipFunction");
const ContainerFunction_1 = require("./ContainerFunction");
const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
/**
* A Lambda function triggered by scheduled Cloudwatch events.
*
* The default schedule is Schedule.cron({ minute: '11', hour: '1' })
* Which sets '11 1 * * ? *' (i.e. 1:11am every day)
*
* You can also pass an optional description for readability in the Cloudwatch view in the AWS console.
*/
class DynamoDbStreamFunction extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, `${id}DynamoDbStreamFunction`);
this.lambda = props.lambda;
this.table = props.table;
this.table.grantStreamRead(this.lambda);
this.lambda.addEventSource(new aws_lambda_event_sources_1.DynamoEventSource(this.table, {
startingPosition: aws_lambda_1.StartingPosition.LATEST,
reportBatchItemFailures: true,
filters: props.filters,
}));
}
static node(scope, id, table, functionProps, filters, description = undefined) {
const lambda = ZipFunction_1.ZipFunction.node(scope, id, functionProps);
return new DynamoDbStreamFunction(scope, id, { lambda, table, filters, description });
}
static python(scope, id, table, functionProps, filters, description = undefined) {
const lambda = ZipFunction_1.ZipFunction.python(scope, id, functionProps);
return new DynamoDbStreamFunction(scope, id, { lambda, table, filters, description });
}
static container(scope, id, table, functionProps, filters, description = undefined) {
const lambda = new ContainerFunction_1.ContainerFunction(scope, id, functionProps);
return new DynamoDbStreamFunction(scope, id, { lambda, table, filters, description });
}
}
exports.DynamoDbStreamFunction = DynamoDbStreamFunction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1vRGJTdHJlYW1GdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9EeW5hbW9EYlN0cmVhbUZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUFvRTtBQUNwRSwyQ0FBdUM7QUFDdkMsK0NBQThEO0FBQzlELDJEQUFnRjtBQUVoRixtRkFBeUU7QUFlekU7Ozs7Ozs7R0FPRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFLbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLDRDQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDM0QsZ0JBQWdCLEVBQUUsNkJBQWdCLENBQUMsTUFBTTtZQUN6Qyx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUNULEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFZLEVBQ1osYUFBZ0MsRUFDaEMsT0FBdUMsRUFDdkMsY0FBa0MsU0FBUztRQUUzQyxNQUFNLE1BQU0sR0FBRyx5QkFBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBWSxFQUNaLGFBQWdDLEVBQ2hDLE9BQXVDLEVBQ3ZDLGNBQWtDLFNBQVM7UUFFM0MsTUFBTSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQ2QsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQVksRUFDWixhQUFzQyxFQUN0QyxPQUF1QyxFQUN2QyxjQUFrQyxTQUFTO1FBRTNDLE1BQU0sTUFBTSxHQUFHLElBQUkscUNBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztDQUNGO0FBMURELHdEQTBEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZ1bmN0aW9uLCBTdGFydGluZ1Bvc2l0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFppcEZ1bmN0aW9uLCBaaXBGdW5jdGlvblByb3BzIH0gZnJvbSAnLi9aaXBGdW5jdGlvbic7XG5pbXBvcnQgeyBDb250YWluZXJGdW5jdGlvbiwgQ29udGFpbmVyRnVuY3Rpb25Qcm9wcyB9IGZyb20gJy4vQ29udGFpbmVyRnVuY3Rpb24nO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgRHluYW1vRXZlbnRTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXMnO1xuXG4vLyBCYXNlZCBvbjogaHR0cHM6Ly9lZHdpbnJhZHRrZS5jb20vZXZlbnR0YXJnZXRzXG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EYlN0cmVhbUZ1bmN0aW9uUHJvcHMge1xuICB0YWJsZTogVGFibGU7XG4gIGxhbWJkYTogRnVuY3Rpb24sXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAvKiogRmlsdGVycyBhcmUgZWFzaWVyIHRvIGNyZWF0ZSBjb3JyZWN0bHkgdXNpbmcgRmlsdGVyQ3JpdGVyaWEgYW5kIEZpbHRlclJ1bGUuIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcwMzY2MzE5LzcyMzUwNiAqL1xuICBmaWx0ZXJzPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duOyB9W107XG59XG5cbi8qKlxuICogQSBMYW1iZGEgZnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHNjaGVkdWxlZCBDbG91ZHdhdGNoIGV2ZW50cy5cbiAqXG4gKiBUaGUgZGVmYXVsdCBzY2hlZHVsZSBpcyBTY2hlZHVsZS5jcm9uKHsgbWludXRlOiAnMTEnLCBob3VyOiAnMScgfSlcbiAqIFdoaWNoIHNldHMgJzExIDEgKiAqID8gKicgKGkuZS4gMToxMWFtIGV2ZXJ5IGRheSlcbiAqXG4gKiBZb3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgcmVhZGFiaWxpdHkgaW4gdGhlIENsb3Vkd2F0Y2ggdmlldyBpbiB0aGUgQVdTIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEeW5hbW9EYlN0cmVhbUZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbGFtYmRhOiBGdW5jdGlvbjtcblxuICB0YWJsZTogVGFibGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEeW5hbW9EYlN0cmVhbUZ1bmN0aW9uUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBgJHtpZH1EeW5hbW9EYlN0cmVhbUZ1bmN0aW9uYCk7XG5cbiAgICB0aGlzLmxhbWJkYSA9IHByb3BzLmxhbWJkYTtcbiAgICB0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG5cbiAgICB0aGlzLnRhYmxlLmdyYW50U3RyZWFtUmVhZCh0aGlzLmxhbWJkYSk7XG4gICAgdGhpcy5sYW1iZGEuYWRkRXZlbnRTb3VyY2UobmV3IER5bmFtb0V2ZW50U291cmNlKHRoaXMudGFibGUsIHtcbiAgICAgIHN0YXJ0aW5nUG9zaXRpb246IFN0YXJ0aW5nUG9zaXRpb24uTEFURVNULFxuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM6IHRydWUsXG4gICAgICBmaWx0ZXJzOiBwcm9wcy5maWx0ZXJzLFxuICAgIH0pKTtcbiAgfVxuXG4gIHN0YXRpYyBub2RlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB0YWJsZTogVGFibGUsXG4gICAgZnVuY3Rpb25Qcm9wcz86IFppcEZ1bmN0aW9uUHJvcHMsXG4gICAgZmlsdGVycz86IHsgW2tleTogc3RyaW5nXTogdW5rbm93bjsgfVtdLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICk6IER5bmFtb0RiU3RyZWFtRnVuY3Rpb24ge1xuICAgIGNvbnN0IGxhbWJkYSA9IFppcEZ1bmN0aW9uLm5vZGUoc2NvcGUsIGlkLCBmdW5jdGlvblByb3BzKTtcbiAgICByZXR1cm4gbmV3IER5bmFtb0RiU3RyZWFtRnVuY3Rpb24oc2NvcGUsIGlkLCB7IGxhbWJkYSwgdGFibGUsIGZpbHRlcnMsIGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgc3RhdGljIHB5dGhvbihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdGFibGU6IFRhYmxlLFxuICAgIGZ1bmN0aW9uUHJvcHM/OiBaaXBGdW5jdGlvblByb3BzLFxuICAgIGZpbHRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd247IH1bXSxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICApOiBEeW5hbW9EYlN0cmVhbUZ1bmN0aW9uIHtcbiAgICBjb25zdCBsYW1iZGEgPSBaaXBGdW5jdGlvbi5weXRob24oc2NvcGUsIGlkLCBmdW5jdGlvblByb3BzKTtcbiAgICByZXR1cm4gbmV3IER5bmFtb0RiU3RyZWFtRnVuY3Rpb24oc2NvcGUsIGlkLCB7IGxhbWJkYSwgdGFibGUsIGZpbHRlcnMsIGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgc3RhdGljIGNvbnRhaW5lcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdGFibGU6IFRhYmxlLFxuICAgIGZ1bmN0aW9uUHJvcHM/OiBDb250YWluZXJGdW5jdGlvblByb3BzLFxuICAgIGZpbHRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd247IH1bXSxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICApOiBEeW5hbW9EYlN0cmVhbUZ1bmN0aW9uIHtcbiAgICBjb25zdCBsYW1iZGEgPSBuZXcgQ29udGFpbmVyRnVuY3Rpb24oc2NvcGUsIGlkLCBmdW5jdGlvblByb3BzKTtcbiAgICByZXR1cm4gbmV3IER5bmFtb0RiU3RyZWFtRnVuY3Rpb24oc2NvcGUsIGlkLCB7IGxhbWJkYSwgdGFibGUsIGZpbHRlcnMsIGRlc2NyaXB0aW9uIH0pO1xuICB9XG59XG4iXX0=