UNPKG

@scloud/cdk-patterns

Version:

Serverless CDK patterns for common infrastructure needs

50 lines 9.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BucketFunction = void 0; const constructs_1 = require("constructs"); const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources"); const aws_s3_1 = require("aws-cdk-lib/aws-s3"); const PrivateBucket_1 = require("./PrivateBucket"); const ZipFunction_1 = require("./ZipFunction"); const ContainerFunction_1 = require("./ContainerFunction"); /** * A Lambda function triggered by s3 bucket events. * * Defaults for the bucket are as per PrivateBucket: * - encryption: BucketEncryption.S3_MANAGED * = blockPublicAccess: BlockPublicAccess.BLOCK_ALL * - removalPolicy: RemovalPolicy.DESTROY * * NB By default, Cloudformation will attempt to destroy the bucket when the stack is destroyed, * however we don't set auto-delete objects to true, so this will fail if the bucket is not empty, * which prevents losing content, * * The reason for this is that when experimenting with building stacks you can end up with a * bunch of orphaned resources. This setting effectively protects buckets that have content in them * But allows for deleting an empty bucket. * * If you want to delete the bucket and all contents, pass { autoDeleteObjects: true } in bucketProps. */ class BucketFunction extends constructs_1.Construct { constructor(scope, id, props) { super(scope, `${id}BucketFunction`); // Triggering bucket this.bucket = new PrivateBucket_1.PrivateBucket(scope, `${id}Bucket`, props.bucketProps); this.lambda = props.lambda; this.lambda.addEventSource(new aws_lambda_event_sources_1.S3EventSource(this.bucket, { events: props.events || [aws_s3_1.EventType.OBJECT_CREATED] })); } static node(scope, id, functionProps, events, bucketProps) { const lambda = ZipFunction_1.ZipFunction.node(scope, id, functionProps); return new BucketFunction(scope, id, { lambda, bucketProps, events }); } static python(scope, id, functionProps, events, bucketProps) { const lambda = ZipFunction_1.ZipFunction.python(scope, id, functionProps); return new BucketFunction(scope, id, { lambda, bucketProps, events }); } static container(scope, id, functionProps, events, bucketProps) { const lambda = new ContainerFunction_1.ContainerFunction(scope, id, functionProps); return new BucketFunction(scope, id, { lambda, bucketProps, events }); } } exports.BucketFunction = BucketFunction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVja2V0RnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQnVja2V0RnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQXVDO0FBQ3ZDLG1GQUFxRTtBQUNyRSwrQ0FBb0U7QUFDcEUsbURBQWdEO0FBQ2hELCtDQUE4RDtBQUM5RCwyREFBZ0Y7QUFhaEY7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFLM0MsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBMEI7UUFFMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDZCQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLHdDQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FDVCxLQUFnQixFQUNoQixFQUFVLEVBQ1YsYUFBZ0MsRUFDaEMsTUFBb0IsRUFDcEIsV0FBa0M7UUFFbEMsTUFBTSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLGFBQWdDLEVBQ2hDLE1BQW9CLEVBQ3BCLFdBQWtDO1FBRWxDLE1BQU0sTUFBTSxHQUFHLHlCQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUNkLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixhQUFzQyxFQUN0QyxNQUFvQixFQUNwQixXQUFrQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLHFDQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0QsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRjtBQWpERCx3Q0FpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBTM0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0UHJvcHMsIEV2ZW50VHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBQcml2YXRlQnVja2V0IH0gZnJvbSAnLi9Qcml2YXRlQnVja2V0JztcbmltcG9ydCB7IFppcEZ1bmN0aW9uLCBaaXBGdW5jdGlvblByb3BzIH0gZnJvbSAnLi9aaXBGdW5jdGlvbic7XG5pbXBvcnQgeyBDb250YWluZXJGdW5jdGlvbiwgQ29udGFpbmVyRnVuY3Rpb25Qcm9wcyB9IGZyb20gJy4vQ29udGFpbmVyRnVuY3Rpb24nO1xuXG4vKipcbiAqIEBwYXJhbSBsYW1iZGEgVGhlIExhbWJkYSBmdW5jdGlvbiB0byBiZSB0cmlnZ2VyZWQgYnkgdGhlIGJ1Y2tldC4gVGhpcyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91IGlmIHlvdSB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgbWV0aG9kcyAobm9kZSwgcHl0aG9uLCBjb250YWluZXIpXG4gKiBAcGFyYW0gZXZlbnRzIERlZmF1bHQgW0V2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF06IFRoZSBidWNrZXQgZXZlbnRzIHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAqIEBwYXJhbSBidWNrZXRQcm9wcyBPcHRpb25hbDogSWYgeW91IG5lZWQgdG8gc3BlY2lmeSBhbnkgZGV0YWlsZWQgcHJvcGVydGllcyBmb3IgdGhlIFNRUyBRdWV1ZSwgeW91IGNhbiBkbyBzbyBoZXJlIGFuZCB0aGV5IHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0RnVuY3Rpb25Qcm9wcyB7XG4gIGxhbWJkYTogRnVuY3Rpb24sXG4gIGV2ZW50cz86IEV2ZW50VHlwZVtdLFxuICBidWNrZXRQcm9wcz86IFBhcnRpYWw8QnVja2V0UHJvcHM+LFxufVxuXG4vKipcbiAqIEEgTGFtYmRhIGZ1bmN0aW9uIHRyaWdnZXJlZCBieSBzMyBidWNrZXQgZXZlbnRzLlxuICpcbiAqIERlZmF1bHRzIGZvciB0aGUgYnVja2V0IGFyZSBhcyBwZXIgUHJpdmF0ZUJ1Y2tldDpcbiAqICAtIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRFxuICogID0gYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTFxuICogIC0gcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gKlxuICogTkIgQnkgZGVmYXVsdCwgQ2xvdWRmb3JtYXRpb24gd2lsbCBhdHRlbXB0IHRvIGRlc3Ryb3kgdGhlIGJ1Y2tldCB3aGVuIHRoZSBzdGFjayBpcyBkZXN0cm95ZWQsXG4gKiBob3dldmVyIHdlIGRvbid0IHNldCBhdXRvLWRlbGV0ZSBvYmplY3RzIHRvIHRydWUsIHNvIHRoaXMgd2lsbCBmYWlsIGlmIHRoZSBidWNrZXQgaXMgbm90IGVtcHR5LFxuICogd2hpY2ggcHJldmVudHMgbG9zaW5nIGNvbnRlbnQsXG4gKlxuICogVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHdoZW4gZXhwZXJpbWVudGluZyB3aXRoIGJ1aWxkaW5nIHN0YWNrcyB5b3UgY2FuIGVuZCB1cCB3aXRoIGFcbiAqIGJ1bmNoIG9mIG9ycGhhbmVkIHJlc291cmNlcy4gVGhpcyBzZXR0aW5nIGVmZmVjdGl2ZWx5IHByb3RlY3RzIGJ1Y2tldHMgdGhhdCBoYXZlIGNvbnRlbnQgaW4gdGhlbVxuICogQnV0IGFsbG93cyBmb3IgZGVsZXRpbmcgYW4gZW1wdHkgYnVja2V0LlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgYnVja2V0IGFuZCBhbGwgY29udGVudHMsIHBhc3MgeyBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSB9IGluIGJ1Y2tldFByb3BzLlxuICovXG5leHBvcnQgY2xhc3MgQnVja2V0RnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBidWNrZXQ6IEJ1Y2tldDtcblxuICBsYW1iZGE6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQnVja2V0RnVuY3Rpb25Qcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGAke2lkfUJ1Y2tldEZ1bmN0aW9uYCk7XG4gICAgLy8gVHJpZ2dlcmluZyBidWNrZXRcbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBQcml2YXRlQnVja2V0KHNjb3BlLCBgJHtpZH1CdWNrZXRgLCBwcm9wcy5idWNrZXRQcm9wcyk7XG4gICAgdGhpcy5sYW1iZGEgPSBwcm9wcy5sYW1iZGE7XG4gICAgdGhpcy5sYW1iZGEuYWRkRXZlbnRTb3VyY2UobmV3IFMzRXZlbnRTb3VyY2UodGhpcy5idWNrZXQsIHsgZXZlbnRzOiBwcm9wcy5ldmVudHMgfHwgW0V2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF0gfSkpO1xuICB9XG5cbiAgc3RhdGljIG5vZGUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGZ1bmN0aW9uUHJvcHM/OiBaaXBGdW5jdGlvblByb3BzLFxuICAgIGV2ZW50cz86IEV2ZW50VHlwZVtdLFxuICAgIGJ1Y2tldFByb3BzPzogUGFydGlhbDxCdWNrZXRQcm9wcz4sXG4gICk6IEJ1Y2tldEZ1bmN0aW9uIHtcbiAgICBjb25zdCBsYW1iZGEgPSBaaXBGdW5jdGlvbi5ub2RlKHNjb3BlLCBpZCwgZnVuY3Rpb25Qcm9wcyk7XG4gICAgcmV0dXJuIG5ldyBCdWNrZXRGdW5jdGlvbihzY29wZSwgaWQsIHsgbGFtYmRhLCBidWNrZXRQcm9wcywgZXZlbnRzIH0pO1xuICB9XG5cbiAgc3RhdGljIHB5dGhvbihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25Qcm9wcz86IFppcEZ1bmN0aW9uUHJvcHMsXG4gICAgZXZlbnRzPzogRXZlbnRUeXBlW10sXG4gICAgYnVja2V0UHJvcHM/OiBQYXJ0aWFsPEJ1Y2tldFByb3BzPixcbiAgKTogQnVja2V0RnVuY3Rpb24ge1xuICAgIGNvbnN0IGxhbWJkYSA9IFppcEZ1bmN0aW9uLnB5dGhvbihzY29wZSwgaWQsIGZ1bmN0aW9uUHJvcHMpO1xuICAgIHJldHVybiBuZXcgQnVja2V0RnVuY3Rpb24oc2NvcGUsIGlkLCB7IGxhbWJkYSwgYnVja2V0UHJvcHMsIGV2ZW50cyB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjb250YWluZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGZ1bmN0aW9uUHJvcHM/OiBDb250YWluZXJGdW5jdGlvblByb3BzLFxuICAgIGV2ZW50cz86IEV2ZW50VHlwZVtdLFxuICAgIGJ1Y2tldFByb3BzPzogUGFydGlhbDxCdWNrZXRQcm9wcz4sXG4gICk6IEJ1Y2tldEZ1bmN0aW9uIHtcbiAgICBjb25zdCBsYW1iZGEgPSBuZXcgQ29udGFpbmVyRnVuY3Rpb24oc2NvcGUsIGlkLCBmdW5jdGlvblByb3BzKTtcbiAgICByZXR1cm4gbmV3IEJ1Y2tldEZ1bmN0aW9uKHNjb3BlLCBpZCwgeyBsYW1iZGEsIGJ1Y2tldFByb3BzLCBldmVudHMgfSk7XG4gIH1cbn1cbiJdfQ==