@scloud/cdk-patterns
Version:
Serverless CDK patterns for common infrastructure needs
45 lines • 8.91 kB
JavaScript
;
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=