UNPKG

@scloud/cdk-patterns

Version:

Serverless CDK patterns for common infrastructure needs

45 lines 8.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QueueFunction = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_sqs_1 = require("aws-cdk-lib/aws-sqs"); const constructs_1 = require("constructs"); const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources"); const ZipFunction_1 = require("./ZipFunction"); const ContainerFunction_1 = require("./ContainerFunction"); /** * A Lambda function triggered by SQS queue events. * * Defaults for the queue are: * - visibilityTimeout: timeout from the lambdaProps or 60 seconds if not defined * - encryption: QueueEncryption.KMS_MANAGED * - removalPolicy: RemovalPolicy.DESTROY */ class QueueFunction extends constructs_1.Construct { constructor(scope, id, props) { super(scope, `${id}QueueFunction`); // Incoming message queue this.queue = new aws_sqs_1.Queue(scope, `${id}Queue`, { visibilityTimeout: props.lambda.timeout, // NB Message timeout needs to match between the queue and the lambda encryption: aws_sqs_1.QueueEncryption.KMS_MANAGED, removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY, ...props.queueProps, }); props.lambda.addEventSource(new aws_lambda_event_sources_1.SqsEventSource(this.queue, { reportBatchItemFailures: true })); this.lambda = props.lambda; } static node(scope, id, functionProps, queueProps) { const lambda = ZipFunction_1.ZipFunction.node(scope, id, { ...functionProps, timeout: (functionProps === null || functionProps === void 0 ? void 0 : functionProps.timeout) || aws_cdk_lib_1.Duration.seconds(60) }); return new QueueFunction(scope, id, { lambda, queueProps }); } static python(scope, id, functionProps, queueProps) { const lambda = ZipFunction_1.ZipFunction.python(scope, id, { ...functionProps, timeout: (functionProps === null || functionProps === void 0 ? void 0 : functionProps.timeout) || aws_cdk_lib_1.Duration.seconds(60) }); return new QueueFunction(scope, id, { lambda, queueProps }); } static container(scope, id, functionProps, queueProps) { const lambda = new ContainerFunction_1.ContainerFunction(scope, id, { ...functionProps, timeout: (functionProps === null || functionProps === void 0 ? void 0 : functionProps.timeout) || aws_cdk_lib_1.Duration.seconds(60) }); return new QueueFunction(scope, id, { lambda, queueProps }); } } exports.QueueFunction = QueueFunction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVldWVGdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9RdWV1ZUZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFzRDtBQUV0RCxpREFBeUU7QUFDekUsMkNBQXVDO0FBQ3ZDLG1GQUFzRTtBQUN0RSwrQ0FBOEQ7QUFDOUQsMkRBQWdGO0FBV2hGOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLGFBQWMsU0FBUSxzQkFBUztJQUsxQyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUF5QjtRQUV6QixLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUVuQyx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGVBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUMxQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxxRUFBcUU7WUFDOUcsVUFBVSxFQUFFLHlCQUFlLENBQUMsV0FBVztZQUN2QyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1lBQ3BDLEdBQUcsS0FBSyxDQUFDLFVBQVU7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSx5Q0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUNULEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixhQUFnQyxFQUNoQyxVQUFnQztRQUVoQyxNQUFNLE1BQU0sR0FBRyx5QkFBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLE9BQU8sS0FBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUgsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLGFBQWdDLEVBQ2hDLFVBQWdDO1FBRWhDLE1BQU0sTUFBTSxHQUFHLHlCQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsT0FBTyxLQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1SCxPQUFPLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FDZCxLQUFnQixFQUNoQixFQUFVLEVBQ1YsYUFBc0MsRUFDdEMsVUFBZ0M7UUFFaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLE9BQU8sS0FBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0gsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNGO0FBdERELHNDQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZUVuY3J5cHRpb24sIFF1ZXVlUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU3FzRXZlbnRTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXMnO1xuaW1wb3J0IHsgWmlwRnVuY3Rpb24sIFppcEZ1bmN0aW9uUHJvcHMgfSBmcm9tICcuL1ppcEZ1bmN0aW9uJztcbmltcG9ydCB7IENvbnRhaW5lckZ1bmN0aW9uLCBDb250YWluZXJGdW5jdGlvblByb3BzIH0gZnJvbSAnLi9Db250YWluZXJGdW5jdGlvbic7XG5cbi8qKlxuICogQHBhcmFtIGxhbWJkYSBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGJlIHRyaWdnZXJlZCBieSB0aGUgU1FTIHF1ZXVlLiBUaGlzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB5b3UgaWYgeW91IHVzZSBvbmUgb2YgdGhlIHN0YXRpYyBtZXRob2RzIChub2RlLCBweXRob24sIGNvbnRhaW5lcilcbiAqIEBwYXJhbSBxdWV1ZVByb3BzIE9wdGlvbmFsOiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IGFueSBkZXRhaWxlZCBwcm9wZXJ0aWVzIGZvciB0aGUgU1FTIFF1ZXVlLCB5b3UgY2FuIGRvIHNvIGhlcmUgYW5kIHRoZXkgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZUZ1bmN0aW9uUHJvcHMge1xuICBsYW1iZGE6IEZ1bmN0aW9uLFxuICBxdWV1ZVByb3BzPzogUGFydGlhbDxRdWV1ZVByb3BzPixcbn1cblxuLyoqXG4gKiBBIExhbWJkYSBmdW5jdGlvbiB0cmlnZ2VyZWQgYnkgU1FTIHF1ZXVlIGV2ZW50cy5cbiAqXG4gKiBEZWZhdWx0cyBmb3IgdGhlIHF1ZXVlIGFyZTpcbiAqICAtIHZpc2liaWxpdHlUaW1lb3V0OiB0aW1lb3V0IGZyb20gdGhlIGxhbWJkYVByb3BzIG9yIDYwIHNlY29uZHMgaWYgbm90IGRlZmluZWRcbiAqICAtIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRFxuICogIC0gcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWV1ZUZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcXVldWU6IFF1ZXVlO1xuXG4gIGxhbWJkYTogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBRdWV1ZUZ1bmN0aW9uUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBgJHtpZH1RdWV1ZUZ1bmN0aW9uYCk7XG5cbiAgICAvLyBJbmNvbWluZyBtZXNzYWdlIHF1ZXVlXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBRdWV1ZShzY29wZSwgYCR7aWR9UXVldWVgLCB7XG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcHJvcHMubGFtYmRhLnRpbWVvdXQsIC8vIE5CIE1lc3NhZ2UgdGltZW91dCBuZWVkcyB0byBtYXRjaCBiZXR3ZWVuIHRoZSBxdWV1ZSBhbmQgdGhlIGxhbWJkYVxuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgLi4ucHJvcHMucXVldWVQcm9wcyxcbiAgICB9KTtcblxuICAgIHByb3BzLmxhbWJkYS5hZGRFdmVudFNvdXJjZShuZXcgU3FzRXZlbnRTb3VyY2UodGhpcy5xdWV1ZSwgeyByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlczogdHJ1ZSB9KSk7XG5cbiAgICB0aGlzLmxhbWJkYSA9IHByb3BzLmxhbWJkYTtcbiAgfVxuXG4gIHN0YXRpYyBub2RlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvblByb3BzPzogWmlwRnVuY3Rpb25Qcm9wcyxcbiAgICBxdWV1ZVByb3BzPzogUGFydGlhbDxRdWV1ZVByb3BzPixcbiAgKTogUXVldWVGdW5jdGlvbiB7XG4gICAgY29uc3QgbGFtYmRhID0gWmlwRnVuY3Rpb24ubm9kZShzY29wZSwgaWQsIHsgLi4uZnVuY3Rpb25Qcm9wcywgdGltZW91dDogZnVuY3Rpb25Qcm9wcz8udGltZW91dCB8fCBEdXJhdGlvbi5zZWNvbmRzKDYwKSB9KTtcbiAgICByZXR1cm4gbmV3IFF1ZXVlRnVuY3Rpb24oc2NvcGUsIGlkLCB7IGxhbWJkYSwgcXVldWVQcm9wcyB9KTtcbiAgfVxuXG4gIHN0YXRpYyBweXRob24oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGZ1bmN0aW9uUHJvcHM/OiBaaXBGdW5jdGlvblByb3BzLFxuICAgIHF1ZXVlUHJvcHM/OiBQYXJ0aWFsPFF1ZXVlUHJvcHM+LFxuICApOiBRdWV1ZUZ1bmN0aW9uIHtcbiAgICBjb25zdCBsYW1iZGEgPSBaaXBGdW5jdGlvbi5weXRob24oc2NvcGUsIGlkLCB7IC4uLmZ1bmN0aW9uUHJvcHMsIHRpbWVvdXQ6IGZ1bmN0aW9uUHJvcHM/LnRpbWVvdXQgfHwgRHVyYXRpb24uc2Vjb25kcyg2MCkgfSk7XG4gICAgcmV0dXJuIG5ldyBRdWV1ZUZ1bmN0aW9uKHNjb3BlLCBpZCwgeyBsYW1iZGEsIHF1ZXVlUHJvcHMgfSk7XG4gIH1cblxuICBzdGF0aWMgY29udGFpbmVyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvblByb3BzPzogQ29udGFpbmVyRnVuY3Rpb25Qcm9wcyxcbiAgICBxdWV1ZVByb3BzPzogUGFydGlhbDxRdWV1ZVByb3BzPixcbiAgKTogUXVldWVGdW5jdGlvbiB7XG4gICAgY29uc3QgbGFtYmRhID0gbmV3IENvbnRhaW5lckZ1bmN0aW9uKHNjb3BlLCBpZCwgeyAuLi5mdW5jdGlvblByb3BzLCB0aW1lb3V0OiBmdW5jdGlvblByb3BzPy50aW1lb3V0IHx8IER1cmF0aW9uLnNlY29uZHMoNjApIH0pO1xuICAgIHJldHVybiBuZXcgUXVldWVGdW5jdGlvbihzY29wZSwgaWQsIHsgbGFtYmRhLCBxdWV1ZVByb3BzIH0pO1xuICB9XG59XG4iXX0=