UNPKG

cdk-nextjs

Version:

Deploy Next.js apps on AWS with CDK

55 lines 8.88 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.NextjsFunctions = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const posix_1 = require("path/posix"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_lambda_1 = require("aws-cdk-lib/aws-lambda"); const constructs_1 = require("constructs"); const constants_1 = require("../constants"); const get_architecture_1 = require("../utils/get-architecture"); /** * Run Next.js in functions on AWS with AWS Lambda. */ class NextjsFunctions extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.props = props; this.function = this.createFunction(); if (props.nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS) { this.functionUrl = this.function.addFunctionUrl({ authType: aws_lambda_1.FunctionUrlAuthType.AWS_IAM, invokeMode: aws_lambda_1.InvokeMode.RESPONSE_STREAM, ...this.props.overrides?.functionUrlProps, }); } } createFunction() { const fn = new aws_lambda_1.DockerImageFunction(this, "Functions", { architecture: (0, get_architecture_1.getLambdaArchitecture)(), code: this.props.dockerImageCode, filesystem: aws_lambda_1.FileSystem.fromEfsAccessPoint(this.props.accessPoint, constants_1.MOUNT_PATH), memorySize: 2048, timeout: aws_cdk_lib_1.Duration.seconds(30), vpc: this.props.vpc, ...this.props.overrides?.dockerImageFunctionProps, environment: { AWS_LWA_ENABLE_COMPRESSION: "true", AWS_LWA_INVOKE_MODE: this.props.nextjsType === constants_1.NextjsType.GLOBAL_FUNCTIONS ? "response_stream" : "buffered", // API GW doesn't support response streaming yet so must buffer AWS_LWA_READINESS_CHECK_PATH: this.props.healthCheckPath, AWS_LWA_READINESS_CHECK_PORT: "3000", READINESS_CHECK_PATH: `http://127.0.0.1:3000${this.props.healthCheckPath}`, [constants_1.CDK_NEXTJS_SERVER_DIST_DIR_ENV_VAR_NAME]: (0, posix_1.join)(constants_1.MOUNT_PATH, this.props.buildId, constants_1.SERVER_DIST_PATH), ...this.props.overrides?.dockerImageFunctionProps?.environment, }, }); return fn; } } exports.NextjsFunctions = NextjsFunctions; _a = JSII_RTTI_SYMBOL_1; NextjsFunctions[_a] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.4.14" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZXh0anMtY29tcHV0ZS9uZXh0anMtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0NBQWtDO0FBQ2xDLDZDQUF1QztBQUN2Qyx1REFPZ0M7QUFDaEMsMkNBQXVDO0FBRXZDLDRDQUtzQjtBQUd0QixnRUFBa0U7QUFjbEU7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFNNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxzQkFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDOUMsUUFBUSxFQUFFLGdDQUFtQixDQUFDLE9BQU87Z0JBQ3JDLFVBQVUsRUFBRSx1QkFBVSxDQUFDLGVBQWU7Z0JBQ3RDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLGdDQUFtQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDcEQsWUFBWSxFQUFFLElBQUEsd0NBQXFCLEdBQUU7WUFDckMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUNoQyxVQUFVLEVBQUUsdUJBQVUsQ0FBQyxrQkFBa0IsQ0FDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ3RCLHNCQUFVLENBQ1g7WUFDRCxVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDbkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0I7WUFDakQsV0FBVyxFQUFFO2dCQUNYLDBCQUEwQixFQUFFLE1BQU07Z0JBQ2xDLG1CQUFtQixFQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxzQkFBVSxDQUFDLGdCQUFnQjtvQkFDbkQsQ0FBQyxDQUFDLGlCQUFpQjtvQkFDbkIsQ0FBQyxDQUFDLFVBQVUsRUFBRSwrREFBK0Q7Z0JBQ2pGLDRCQUE0QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtnQkFDeEQsNEJBQTRCLEVBQUUsTUFBTTtnQkFDcEMsb0JBQW9CLEVBQUUsd0JBQXdCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO2dCQUMxRSxDQUFDLG1EQUF1QyxDQUFDLEVBQUUsSUFBQSxZQUFJLEVBQzdDLHNCQUFVLEVBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQ2xCLDRCQUFnQixDQUNqQjtnQkFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLFdBQVc7YUFDL0Q7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBakRILDBDQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aC9wb3NpeFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIERvY2tlckltYWdlQ29kZSxcbiAgRG9ja2VySW1hZ2VGdW5jdGlvbixcbiAgRmlsZVN5c3RlbSxcbiAgRnVuY3Rpb25VcmwsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIEludm9rZU1vZGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB9IGZyb20gXCIuL25leHRqcy1jb21wdXRlLWJhc2UtcHJvcHNcIjtcbmltcG9ydCB7XG4gIENES19ORVhUSlNfU0VSVkVSX0RJU1RfRElSX0VOVl9WQVJfTkFNRSxcbiAgTU9VTlRfUEFUSCxcbiAgTmV4dGpzVHlwZSxcbiAgU0VSVkVSX0RJU1RfUEFUSCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsRnVuY3Rpb25VcmxQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbEZ1bmN0aW9uVXJsUHJvcHNcIjtcbmltcG9ydCB7IGdldExhbWJkYUFyY2hpdGVjdHVyZSB9IGZyb20gXCIuLi91dGlscy9nZXQtYXJjaGl0ZWN0dXJlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzPzogT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uVXJsUHJvcHM/OiBPcHRpb25hbEZ1bmN0aW9uVXJsUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNDb21wdXRlQmFzZVByb3BzIHtcbiAgcmVhZG9ubHkgZG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGU7XG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcztcbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xufVxuXG4vKipcbiAqIFJ1biBOZXh0LmpzIGluIGZ1bmN0aW9ucyBvbiBBV1Mgd2l0aCBBV1MgTGFtYmRhLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzRnVuY3Rpb25zIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgZnVuY3Rpb246IERvY2tlckltYWdlRnVuY3Rpb247XG4gIGZ1bmN0aW9uVXJsPzogRnVuY3Rpb25Vcmw7XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzRnVuY3Rpb25zUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0Z1bmN0aW9uc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5mdW5jdGlvbiA9IHRoaXMuY3JlYXRlRnVuY3Rpb24oKTtcbiAgICBpZiAocHJvcHMubmV4dGpzVHlwZSA9PT0gTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzLmZ1bmN0aW9uVXJsID0gdGhpcy5mdW5jdGlvbi5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGludm9rZU1vZGU6IEludm9rZU1vZGUuUkVTUE9OU0VfU1RSRUFNLFxuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZnVuY3Rpb25VcmxQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZm4gPSBuZXcgRG9ja2VySW1hZ2VGdW5jdGlvbih0aGlzLCBcIkZ1bmN0aW9uc1wiLCB7XG4gICAgICBhcmNoaXRlY3R1cmU6IGdldExhbWJkYUFyY2hpdGVjdHVyZSgpLFxuICAgICAgY29kZTogdGhpcy5wcm9wcy5kb2NrZXJJbWFnZUNvZGUsXG4gICAgICBmaWxlc3lzdGVtOiBGaWxlU3lzdGVtLmZyb21FZnNBY2Nlc3NQb2ludChcbiAgICAgICAgdGhpcy5wcm9wcy5hY2Nlc3NQb2ludCxcbiAgICAgICAgTU9VTlRfUEFUSCxcbiAgICAgICksXG4gICAgICBtZW1vcnlTaXplOiAyMDQ4LFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICB2cGM6IHRoaXMucHJvcHMudnBjLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEFXU19MV0FfRU5BQkxFX0NPTVBSRVNTSU9OOiBcInRydWVcIixcbiAgICAgICAgQVdTX0xXQV9JTlZPS0VfTU9ERTpcbiAgICAgICAgICB0aGlzLnByb3BzLm5leHRqc1R5cGUgPT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OU1xuICAgICAgICAgICAgPyBcInJlc3BvbnNlX3N0cmVhbVwiXG4gICAgICAgICAgICA6IFwiYnVmZmVyZWRcIiwgLy8gQVBJIEdXIGRvZXNuJ3Qgc3VwcG9ydCByZXNwb25zZSBzdHJlYW1pbmcgeWV0IHNvIG11c3QgYnVmZmVyXG4gICAgICAgIEFXU19MV0FfUkVBRElORVNTX0NIRUNLX1BBVEg6IHRoaXMucHJvcHMuaGVhbHRoQ2hlY2tQYXRoLFxuICAgICAgICBBV1NfTFdBX1JFQURJTkVTU19DSEVDS19QT1JUOiBcIjMwMDBcIixcbiAgICAgICAgUkVBRElORVNTX0NIRUNLX1BBVEg6IGBodHRwOi8vMTI3LjAuMC4xOjMwMDAke3RoaXMucHJvcHMuaGVhbHRoQ2hlY2tQYXRofWAsXG4gICAgICAgIFtDREtfTkVYVEpTX1NFUlZFUl9ESVNUX0RJUl9FTlZfVkFSX05BTUVdOiBqb2luKFxuICAgICAgICAgIE1PVU5UX1BBVEgsXG4gICAgICAgICAgdGhpcy5wcm9wcy5idWlsZElkLFxuICAgICAgICAgIFNFUlZFUl9ESVNUX1BBVEgsXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5kb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM/LmVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gZm47XG4gIH1cbn1cbiJdfQ==