UNPKG

@scloud/cdk-patterns

Version:

Serverless CDK patterns for common infrastructure needs

80 lines 10.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.ContainerFunction = void 0; const path = __importStar(require("path")); const logs = __importStar(require("aws-cdk-lib/aws-logs")); const aws_lambda_1 = require("aws-cdk-lib/aws-lambda"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const EcrRepository_1 = require("./EcrRepository"); const GithubActions_1 = require("./GithubActions"); /** * A Lambda function packaged as a container. * * This construct automatically adds itself and the ECR repository (if created) to the list of resources Github Actions needs to access for CI/CD updates. * * Default log retention is 2 years. * * NB when a ContainerFunction is first built you'll need to set initialPass to true. * This is because the ECR repository needs to be created before a container image can be pushed to it. * However this construct will fail to build if there is no image in the ECR repository, so it needs to be built in two passes: * initially to create the repository and then to reference an image once one has been pushed to the repository. */ class ContainerFunction extends aws_lambda_1.DockerImageFunction { constructor(scope, id, props) { // Repository for function container image // NB this will be created on the initial pass // It then needs to be populated with an image // After that the image can be referenced by this construct const repository = (props === null || props === void 0 ? void 0 : props.repository) || new EcrRepository_1.EcrRepository(scope, `${id}Repository`); // Container const code = (props === null || props === void 0 ? void 0 : props.initialPass) ? aws_lambda_1.DockerImageCode.fromImageAsset(path.join(__dirname, './container')) : aws_lambda_1.DockerImageCode.fromEcr(repository, { tagOrDigest: (props === null || props === void 0 ? void 0 : props.tagOrDigest) || 'latest', }); super(scope, id, { environment: props === null || props === void 0 ? void 0 : props.environment, memorySize: (props === null || props === void 0 ? void 0 : props.memorySize) || 1024, timeout: (props === null || props === void 0 ? void 0 : props.timeout) || aws_cdk_lib_1.Duration.seconds(30), code, logRetention: logs.RetentionDays.TWO_YEARS, description: id, ...props === null || props === void 0 ? void 0 : props.dockerImageFunctionProps, }); this.repository = repository; (0, GithubActions_1.githubActions)(scope).addGhaLambda(id, this); } } exports.ContainerFunction = ContainerFunction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyRnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29udGFpbmVyRnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLDJEQUE2QztBQUU3Qyx1REFFZ0M7QUFFaEMsNkNBQXVDO0FBQ3ZDLG1EQUFnRDtBQUNoRCxtREFBZ0Q7QUFvQmhEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxnQ0FBbUI7SUFHeEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBOEI7UUFFOUIsMENBQTBDO1FBQzFDLDhDQUE4QztRQUM5Qyw4Q0FBOEM7UUFDOUMsMkRBQTJEO1FBQzNELE1BQU0sVUFBVSxHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFVBQVUsS0FBSSxJQUFJLDZCQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVwRixZQUFZO1FBQ1osTUFBTSxJQUFJLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQyw0QkFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDMUksV0FBVyxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsS0FBSSxRQUFRO1NBQzVDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxXQUFXO1lBQy9CLFVBQVUsRUFBRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxVQUFVLEtBQUksSUFBSTtZQUNyQyxPQUFPLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxLQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJO1lBQ0osWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztZQUMxQyxXQUFXLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLHdCQUF3QjtTQUNuQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFBLDZCQUFhLEVBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUFoQ0QsOENBZ0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBEb2NrZXJJbWFnZUNvZGUsIERvY2tlckltYWdlRnVuY3Rpb24sIERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFY3JSZXBvc2l0b3J5IH0gZnJvbSAnLi9FY3JSZXBvc2l0b3J5JztcbmltcG9ydCB7IGdpdGh1YkFjdGlvbnMgfSBmcm9tICcuL0dpdGh1YkFjdGlvbnMnO1xuXG4vKipcbiAqIEBwYXJhbSBlbnZpcm9ubWVudCBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAqIEBwYXJhbSB0YWdPckRpZ2VzdCBEZWZhdWx0ICdsYXRlc3QnOiBUaGUgY29udGFpbmVyIGltYWdlIHRhZyBvciBkaWdlc3RcbiAqIEBwYXJhbSByZXBvc2l0b3J5IFRoZSBFQ1IgcmVwb3NpdG9yeSB0byB1c2UuIElmIG5vdCBzcGVjaWZpZWQgYSBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIGluaXRpYWxQYXNzIERlZmF1bHQgZmFsc2U6IElmIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBiZWluZyBidWlsdCBmcm9tIHNjcmF0Y2g6IHRydWUsIGZvciBpbmNyZW1lbnRhbCBkZXBsb3ltZW50czogZmFsc2UuIFRoaXMgaXMgYmVjYXVzZSB5b3UnbGwgbmVlZCBhbiBpbWFnZSBwdXNoZWQgdG8gdGhlIEVDUiByZXBvc2l0b3J5IGJlZm9yZSB5b3UgY2FuIHJlZmVyZW5jZSBpdFxuICogQHBhcmFtIG1lbW9yeVNpemUgRGVhZnVsdCAxMDI0OiB0aGUgYW1vdW50IG9mIG1lbW9yeSB0byBhbGxvY2F0ZSB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IGRldGFpbGVkIHByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24sIHlvdSBjYW4gZG8gc28gaGVyZSBhbmQgdGhleSB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckZ1bmN0aW9uUHJvcHMge1xuICBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9LFxuICBtZW1vcnlTaXplPzogbnVtYmVyLFxuICB0aW1lb3V0PzogRHVyYXRpb24sXG4gIHRhZ09yRGlnZXN0Pzogc3RyaW5nLFxuICByZXBvc2l0b3J5PzogSVJlcG9zaXRvcnksXG4gIGluaXRpYWxQYXNzPzogYm9vbGVhbixcbiAgZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzPzogUGFydGlhbDxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM+LFxufVxuXG4vKipcbiAqIEEgTGFtYmRhIGZ1bmN0aW9uIHBhY2thZ2VkIGFzIGEgY29udGFpbmVyLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyBpdHNlbGYgYW5kIHRoZSBFQ1IgcmVwb3NpdG9yeSAoaWYgY3JlYXRlZCkgdG8gdGhlIGxpc3Qgb2YgcmVzb3VyY2VzIEdpdGh1YiBBY3Rpb25zIG5lZWRzIHRvIGFjY2VzcyBmb3IgQ0kvQ0QgdXBkYXRlcy5cbiAqXG4gKiBEZWZhdWx0IGxvZyByZXRlbnRpb24gaXMgMiB5ZWFycy5cbiAqXG4gKiBOQiB3aGVuIGEgQ29udGFpbmVyRnVuY3Rpb24gaXMgZmlyc3QgYnVpbHQgeW91J2xsIG5lZWQgdG8gc2V0IGluaXRpYWxQYXNzIHRvIHRydWUuXG4gKiBUaGlzIGlzIGJlY2F1c2UgdGhlIEVDUiByZXBvc2l0b3J5IG5lZWRzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIGEgY29udGFpbmVyIGltYWdlIGNhbiBiZSBwdXNoZWQgdG8gaXQuXG4gKiBIb3dldmVyIHRoaXMgY29uc3RydWN0IHdpbGwgZmFpbCB0byBidWlsZCBpZiB0aGVyZSBpcyBubyBpbWFnZSBpbiB0aGUgRUNSIHJlcG9zaXRvcnksIHNvIGl0IG5lZWRzIHRvIGJlIGJ1aWx0IGluIHR3byBwYXNzZXM6XG4gKiBpbml0aWFsbHkgdG8gY3JlYXRlIHRoZSByZXBvc2l0b3J5IGFuZCB0aGVuIHRvIHJlZmVyZW5jZSBhbiBpbWFnZSBvbmNlIG9uZSBoYXMgYmVlbiBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250YWluZXJGdW5jdGlvbiBleHRlbmRzIERvY2tlckltYWdlRnVuY3Rpb24ge1xuICByZXBvc2l0b3J5OiBJUmVwb3NpdG9yeTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBDb250YWluZXJGdW5jdGlvblByb3BzLFxuICApIHtcbiAgICAvLyBSZXBvc2l0b3J5IGZvciBmdW5jdGlvbiBjb250YWluZXIgaW1hZ2VcbiAgICAvLyBOQiB0aGlzIHdpbGwgYmUgY3JlYXRlZCBvbiB0aGUgaW5pdGlhbCBwYXNzXG4gICAgLy8gSXQgdGhlbiBuZWVkcyB0byBiZSBwb3B1bGF0ZWQgd2l0aCBhbiBpbWFnZVxuICAgIC8vIEFmdGVyIHRoYXQgdGhlIGltYWdlIGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoaXMgY29uc3RydWN0XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IHByb3BzPy5yZXBvc2l0b3J5IHx8IG5ldyBFY3JSZXBvc2l0b3J5KHNjb3BlLCBgJHtpZH1SZXBvc2l0b3J5YCk7XG5cbiAgICAvLyBDb250YWluZXJcbiAgICBjb25zdCBjb2RlID0gcHJvcHM/LmluaXRpYWxQYXNzID8gRG9ja2VySW1hZ2VDb2RlLmZyb21JbWFnZUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuL2NvbnRhaW5lcicpKSA6IERvY2tlckltYWdlQ29kZS5mcm9tRWNyKHJlcG9zaXRvcnksIHtcbiAgICAgIHRhZ09yRGlnZXN0OiBwcm9wcz8udGFnT3JEaWdlc3QgfHwgJ2xhdGVzdCcsXG4gICAgfSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcz8uZW52aXJvbm1lbnQsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcz8ubWVtb3J5U2l6ZSB8fCAxMDI0LFxuICAgICAgdGltZW91dDogcHJvcHM/LnRpbWVvdXQgfHwgRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBjb2RlLFxuICAgICAgbG9nUmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgICAgZGVzY3JpcHRpb246IGlkLFxuICAgICAgLi4ucHJvcHM/LmRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICB9KTtcblxuICAgIHRoaXMucmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7XG4gICAgZ2l0aHViQWN0aW9ucyhzY29wZSkuYWRkR2hhTGFtYmRhKGlkLCB0aGlzKTtcbiAgfVxufVxuIl19