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