UNPKG

open-next-cdk

Version:

Deploy a NextJS app using OpenNext packaging to serverless AWS using CDK

56 lines 7.92 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImageOptimizationLambda = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); /* eslint-disable prettier/prettier */ const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_iam_1 = require("aws-cdk-lib/aws-iam"); const aws_lambda_1 = require("aws-cdk-lib/aws-lambda"); const constants_1 = require("./constants"); /** * This lambda handles image optimization. */ class ImageOptimizationLambda extends aws_lambda_1.Function { constructor(scope, id, props) { const { lambdaOptions, bucket, isPlaceholder } = props; const code = isPlaceholder ? aws_lambda_1.Code.fromInline("module.exports.handler = async () => { return { statusCode: 200, body: 'SST placeholder site' } }") : aws_lambda_1.Code.fromAsset(props.nextBuild.nextImageFnDir); super(scope, id, { code, handler: 'index.handler', runtime: constants_1.LAMBDA_RUNTIME, architecture: aws_lambda_1.Architecture.ARM_64, // prevents "Resolution error: Cannot use resource in a cross-environment // fashion, the resource's physical name must be explicit set or use // PhysicalName.GENERATE_IF_NEEDED." functionName: aws_cdk_lib_1.Stack.of(scope).region !== 'us-east-1' ? aws_cdk_lib_1.PhysicalName.GENERATE_IF_NEEDED : undefined, ...lambdaOptions, // defaults memorySize: lambdaOptions?.memorySize || 1024, timeout: lambdaOptions?.timeout ?? aws_cdk_lib_1.Duration.seconds(10), environment: { BUCKET_NAME: bucket.bucketName, }, }); this.bucket = bucket; this.addPolicy(); } /** * Adds policy statement to give GetObject permission Image Optimization lambda. */ addPolicy() { const policyStatement = new aws_iam_1.PolicyStatement({ actions: ['s3:GetObject'], resources: [this.bucket.arnForObjects('*')], }); this.role?.attachInlinePolicy(new aws_iam_1.Policy(this, 'get-image-policy', { statements: [policyStatement], })); } } exports.ImageOptimizationLambda = ImageOptimizationLambda; _a = JSII_RTTI_SYMBOL_1; ImageOptimizationLambda[_a] = { fqn: "open-next-cdk.ImageOptimizationLambda", version: "0.0.10" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZ2VPcHRpbWl6YXRpb25MYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSW1hZ2VPcHRpbWl6YXRpb25MYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzQ0FBc0M7QUFDdEMsNkNBQTREO0FBQzVELGlEQUE4RDtBQUM5RCx1REFBdUY7QUFHdkYsMkNBQTZDO0FBNEI3Qzs7R0FFRztBQUNILE1BQWEsdUJBQXdCLFNBQVEscUJBQVE7SUFHbkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFdkQsTUFBTSxJQUFJLEdBQUcsYUFBYTtZQUN4QixDQUFDLENBQUMsaUJBQUksQ0FBQyxVQUFVLENBQ2YsbUdBQW1HLENBQ3BHO1lBQ0QsQ0FBQyxDQUFDLGlCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixJQUFJO1lBQ0osT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLDBCQUFjO1lBQ3ZCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMseUVBQXlFO1lBQ3pFLG9FQUFvRTtZQUNwRSxvQ0FBb0M7WUFDcEMsWUFBWSxFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEcsR0FBRyxhQUFhO1lBQ2hCLFdBQVc7WUFDWCxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsSUFBSSxJQUFJO1lBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxJQUFJLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxXQUFXLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVM7UUFDZixNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFlLENBQUM7WUFDMUMsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQzNCLElBQUksZ0JBQU0sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDbkMsVUFBVSxFQUFFLENBQUMsZUFBZSxDQUFDO1NBQzlCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUFoREgsMERBaURDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJldHRpZXIvcHJldHRpZXIgKi9cbmltcG9ydCB7IER1cmF0aW9uLCBQaHlzaWNhbE5hbWUsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgQ29kZSwgRnVuY3Rpb24sIEZ1bmN0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExBTUJEQV9SVU5USU1FIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTmV4dGpzQmFzZVByb3BzIH0gZnJvbSAnLi9OZXh0anNCYXNlJztcbmltcG9ydCB0eXBlIHsgTmV4dGpzQnVpbGQgfSBmcm9tICcuL05leHRqc0J1aWxkJztcblxuZXhwb3J0IHR5cGUgUmVtb3RlUGF0dGVybiA9IHtcbiAgcHJvdG9jb2w6IHN0cmluZztcbiAgaG9zdG5hbWU6IHN0cmluZztcbiAgcG9ydD86IHN0cmluZztcbiAgcGF0aG5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlT3B0aW1pemF0aW9uUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCBob2xkaW5nIGFwcGxpY2F0aW9uIGltYWdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYU9wdGlvbnM/OiBGdW5jdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBgTmV4dGpzQnVpbGRgIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgYnVpbHQgTmV4dGpzIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV4dEJ1aWxkOiBOZXh0anNCdWlsZDtcbn1cblxuLyoqXG4gKiBUaGlzIGxhbWJkYSBoYW5kbGVzIGltYWdlIG9wdGltaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlT3B0aW1pemF0aW9uTGFtYmRhIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEltYWdlT3B0aW1pemF0aW9uUHJvcHMpIHtcbiAgICBjb25zdCB7IGxhbWJkYU9wdGlvbnMsIGJ1Y2tldCwgaXNQbGFjZWhvbGRlciB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBjb2RlID0gaXNQbGFjZWhvbGRlclxuICAgICAgPyBDb2RlLmZyb21JbmxpbmUoXG4gICAgICAgIFwibW9kdWxlLmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+IHsgcmV0dXJuIHsgc3RhdHVzQ29kZTogMjAwLCBib2R5OiAnU1NUIHBsYWNlaG9sZGVyIHNpdGUnIH0gfVwiXG4gICAgICApXG4gICAgICA6IENvZGUuZnJvbUFzc2V0KHByb3BzLm5leHRCdWlsZC5uZXh0SW1hZ2VGbkRpcik7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIGNvZGUsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBMQU1CREFfUlVOVElNRSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIC8vIHByZXZlbnRzIFwiUmVzb2x1dGlvbiBlcnJvcjogQ2Fubm90IHVzZSByZXNvdXJjZSBpbiBhIGNyb3NzLWVudmlyb25tZW50XG4gICAgICAvLyBmYXNoaW9uLCB0aGUgcmVzb3VyY2UncyBwaHlzaWNhbCBuYW1lIG11c3QgYmUgZXhwbGljaXQgc2V0IG9yIHVzZVxuICAgICAgLy8gUGh5c2ljYWxOYW1lLkdFTkVSQVRFX0lGX05FRURFRC5cIlxuICAgICAgZnVuY3Rpb25OYW1lOiBTdGFjay5vZihzY29wZSkucmVnaW9uICE9PSAndXMtZWFzdC0xJyA/IFBoeXNpY2FsTmFtZS5HRU5FUkFURV9JRl9ORUVERUQgOiB1bmRlZmluZWQsXG4gICAgICAuLi5sYW1iZGFPcHRpb25zLFxuICAgICAgLy8gZGVmYXVsdHNcbiAgICAgIG1lbW9yeVNpemU6IGxhbWJkYU9wdGlvbnM/Lm1lbW9yeVNpemUgfHwgMTAyNCxcbiAgICAgIHRpbWVvdXQ6IGxhbWJkYU9wdGlvbnM/LnRpbWVvdXQgPz8gRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5hZGRQb2xpY3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHBvbGljeSBzdGF0ZW1lbnQgdG8gZ2l2ZSBHZXRPYmplY3QgcGVybWlzc2lvbiBJbWFnZSBPcHRpbWl6YXRpb24gbGFtYmRhLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRQb2xpY3koKTogdm9pZCB7XG4gICAgY29uc3QgcG9saWN5U3RhdGVtZW50ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCddLFxuICAgICAgcmVzb3VyY2VzOiBbdGhpcy5idWNrZXQuYXJuRm9yT2JqZWN0cygnKicpXSxcbiAgICB9KTtcblxuICAgIHRoaXMucm9sZT8uYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCAnZ2V0LWltYWdlLXBvbGljeScsIHtcbiAgICAgICAgc3RhdGVtZW50czogW3BvbGljeVN0YXRlbWVudF0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==