@scloud/cdk-patterns
Version:
Serverless CDK patterns for common infrastructure needs
81 lines • 10 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.ZipFunction = void 0;
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 GithubActions_1 = require("./GithubActions");
/**
* A Lambda function packaged as a zip file.
*
* This construct automatically adds itself to the list of resources Github Actions needs to access.
*
* Pythion and Node runtinmes can be configured by calling ZipFunction.python(...) and ZipFunction.node(...)
* These are supported by default as these seem to have the lowest cold start times.
* If you would like a different runtime this can be set using the props parameter.
*
* Key settings are:
* - runtime: defaults to Runtime.NODEJS_18_X
* - handler: 'src/lambda.handler' - you'll need to make sure your zip package includes a file 'src/lambda.[js|py]' and contains a function named 'handler'
* - logRetention: default is logs.RetentionDays.TWO_YEARS
*
* @param scope Parent CDK construct (typically 'this')
* @param id A name for this function
*/
class ZipFunction extends aws_lambda_1.Function {
constructor(scope, id, props) {
super(scope, id, {
environment: props === null || props === void 0 ? void 0 : props.environment,
memorySize: (props === null || props === void 0 ? void 0 : props.memorySize) || 256,
timeout: (props === null || props === void 0 ? void 0 : props.timeout) || aws_cdk_lib_1.Duration.seconds(30),
description: id, // Provides something readable in the AWS console view
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
handler: (props === null || props === void 0 ? void 0 : props.handler) || 'src/lambda.handler',
code: aws_lambda_1.Code.fromInline('Placeholder code'), // Asset(path.join(__dirname, './lambda/python')),
logRetention: logs.RetentionDays.TWO_YEARS,
...props === null || props === void 0 ? void 0 : props.functionProps,
});
(0, GithubActions_1.githubActions)(scope).addGhaLambda(id, this);
}
static node(scope, id, props) {
return new ZipFunction(scope, id, { ...props, functionProps: { runtime: aws_lambda_1.Runtime.NODEJS_LATEST, ...props === null || props === void 0 ? void 0 : props.functionProps } });
}
static python(scope, id, props) {
return new ZipFunction(scope, id, { ...props, functionProps: { runtime: aws_lambda_1.Runtime.PYTHON_3_12, ...props === null || props === void 0 ? void 0 : props.functionProps } });
}
}
exports.ZipFunction = ZipFunction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmlwRnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvWmlwRnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQTZDO0FBRTdDLHVEQUVnQztBQUNoQyw2Q0FBdUM7QUFDdkMsbURBQWdEO0FBaUJoRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQWEsV0FBWSxTQUFRLHFCQUFRO0lBQ3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVc7WUFDL0IsVUFBVSxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFVBQVUsS0FBSSxHQUFHO1lBQ3BDLE9BQU8sRUFBRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxPQUFPLEtBQUksc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsRUFBRSxFQUFFLEVBQUUsc0RBQXNEO1lBQ3ZFLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sS0FBSSxvQkFBb0I7WUFDL0MsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsa0RBQWtEO1lBQzdGLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVM7WUFDMUMsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsYUFBYTtTQUN4QixDQUFDLENBQUM7UUFDSCxJQUFBLDZCQUFhLEVBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2xFLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUgsQ0FBQztDQUNGO0FBdkJELGtDQXVCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBDb2RlLCBGdW5jdGlvbiwgRnVuY3Rpb25Qcm9wcywgUnVudGltZSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IGdpdGh1YkFjdGlvbnMgfSBmcm9tICcuL0dpdGh1YkFjdGlvbnMnO1xuXG4vKipcbiAqIEBwYXJhbSBlbnZpcm9ubWVudCBPcHRpb25hbDogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gKiBAcGFyYW0gbWVtb3J5U2l6ZSBEZWZhdWx0IDI1NjogdGhlIGFtb3VudCBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgdG8gdGhlIExhbWJkYSBmdW5jdGlvblxuICogQHBhcmFtIHRpbWVvdXQgRGVmYXVsdCAxMCBzZWNvbmRzOiB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIExhbWJkYSBmdW5jdGlvbiBoYXMgdG8gcnVuIGJlZm9yZSBpdCB0aW1lcyBvdXRcbiAqIEBwYXJhbSBoYW5kbGVyIERlZmF1bHQgJ3NyYy9sYW1iZGEuaGFuZGxlcic6IHRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgaGFuZGxlciBmdW5jdGlvblxuICogQHBhcmFtIGZ1bmN0aW9uUHJvcHMgT3B0aW9uYWw6IElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IGRldGFpbGVkIHByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24sIHlvdSBjYW4gZG8gc28gaGVyZSBhbmQgdGhleSB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBlLmcuIHsgcnVudGltZTogUnVudGltZS5QWVRIT05fM18xMCB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRnVuY3Rpb25Qcm9wcyB7XG4gIGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIG1lbW9yeVNpemU/OiBudW1iZXIsXG4gIHRpbWVvdXQ/OiBEdXJhdGlvbixcbiAgaGFuZGxlcj86IHN0cmluZyxcbiAgZnVuY3Rpb25Qcm9wcz86IFBhcnRpYWw8RnVuY3Rpb25Qcm9wcz47XG59XG5cbi8qKlxuICogQSBMYW1iZGEgZnVuY3Rpb24gcGFja2FnZWQgYXMgYSB6aXAgZmlsZS5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBhdXRvbWF0aWNhbGx5IGFkZHMgaXRzZWxmIHRvIHRoZSBsaXN0IG9mIHJlc291cmNlcyBHaXRodWIgQWN0aW9ucyBuZWVkcyB0byBhY2Nlc3MuXG4gKlxuICogUHl0aGlvbiBhbmQgTm9kZSBydW50aW5tZXMgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgY2FsbGluZyBaaXBGdW5jdGlvbi5weXRob24oLi4uKSBhbmQgWmlwRnVuY3Rpb24ubm9kZSguLi4pXG4gKiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgYXMgdGhlc2Ugc2VlbSB0byBoYXZlIHRoZSBsb3dlc3QgY29sZCBzdGFydCB0aW1lcy5cbiAqIElmIHlvdSB3b3VsZCBsaWtlIGEgZGlmZmVyZW50IHJ1bnRpbWUgdGhpcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBwcm9wcyBwYXJhbWV0ZXIuXG4gKlxuICogS2V5IHNldHRpbmdzIGFyZTpcbiAqICAtIHJ1bnRpbWU6IGRlZmF1bHRzIHRvIFJ1bnRpbWUuTk9ERUpTXzE4X1hcbiAqICAtIGhhbmRsZXI6ICdzcmMvbGFtYmRhLmhhbmRsZXInIC0geW91J2xsIG5lZWQgdG8gbWFrZSBzdXJlIHlvdXIgemlwIHBhY2thZ2UgaW5jbHVkZXMgYSBmaWxlICdzcmMvbGFtYmRhLltqc3xweV0nIGFuZCBjb250YWlucyBhIGZ1bmN0aW9uIG5hbWVkICdoYW5kbGVyJ1xuICogIC0gbG9nUmV0ZW50aW9uOiBkZWZhdWx0IGlzIGxvZ3MuUmV0ZW50aW9uRGF5cy5UV09fWUVBUlNcbiAqXG4gKiBAcGFyYW0gc2NvcGUgUGFyZW50IENESyBjb25zdHJ1Y3QgKHR5cGljYWxseSAndGhpcycpXG4gKiBAcGFyYW0gaWQgQSBuYW1lIGZvciB0aGlzIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBaaXBGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBaaXBGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBlbnZpcm9ubWVudDogcHJvcHM/LmVudmlyb25tZW50LFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHM/Lm1lbW9yeVNpemUgfHwgMjU2LFxuICAgICAgdGltZW91dDogcHJvcHM/LnRpbWVvdXQgfHwgRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBkZXNjcmlwdGlvbjogaWQsIC8vIFByb3ZpZGVzIHNvbWV0aGluZyByZWFkYWJsZSBpbiB0aGUgQVdTIGNvbnNvbGUgdmlld1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgIGhhbmRsZXI6IHByb3BzPy5oYW5kbGVyIHx8ICdzcmMvbGFtYmRhLmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdQbGFjZWhvbGRlciBjb2RlJyksIC8vIEFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuL2xhbWJkYS9weXRob24nKSksXG4gICAgICBsb2dSZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5UV09fWUVBUlMsXG4gICAgICAuLi5wcm9wcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICB9KTtcbiAgICBnaXRodWJBY3Rpb25zKHNjb3BlKS5hZGRHaGFMYW1iZGEoaWQsIHRoaXMpO1xuICB9XG5cbiAgc3RhdGljIG5vZGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBaaXBGdW5jdGlvblByb3BzKTogWmlwRnVuY3Rpb24ge1xuICAgIHJldHVybiBuZXcgWmlwRnVuY3Rpb24oc2NvcGUsIGlkLCB7IC4uLnByb3BzLCBmdW5jdGlvblByb3BzOiB7IHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTX0xBVEVTVCwgLi4ucHJvcHM/LmZ1bmN0aW9uUHJvcHMgfSB9KTtcbiAgfVxuXG4gIHN0YXRpYyBweXRob24oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBaaXBGdW5jdGlvblByb3BzKTogWmlwRnVuY3Rpb24ge1xuICAgIHJldHVybiBuZXcgWmlwRnVuY3Rpb24oc2NvcGUsIGlkLCB7IC4uLnByb3BzLCBmdW5jdGlvblByb3BzOiB7IHJ1bnRpbWU6IFJ1bnRpbWUuUFlUSE9OXzNfMTIsIC4uLnByb3BzPy5mdW5jdGlvblByb3BzIH0gfSk7XG4gIH1cbn1cbiJdfQ==