UNPKG

aws-cdk-image-resize

Version:

AWS CDK construct to easily setup the required arquitecture to serve performant responsive images.

87 lines 12.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImageResize = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const cloudfront = require("aws-cdk-lib/aws-cloudfront"); const origins = require("aws-cdk-lib/aws-cloudfront-origins"); const lambda = require("aws-cdk-lib/aws-lambda"); const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs"); const s3 = require("aws-cdk-lib/aws-s3"); const constructs_1 = require("constructs"); __exportStar(require("./types"), exports); class ImageResize extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); const { s3BucketProps, originResponseLambdaProps, viewerRequestLambdaProps, cloudfrontDistributionProps } = props || {}; this.imagesBucket = new s3.Bucket(this, 'Bucket', s3BucketProps); this.imageOriginResponseLambda = new aws_lambda_nodejs_1.NodejsFunction(this, 'OriginResponseFunction', { bundling: { minify: true, nodeModules: ['sharp'], }, entry: `${__dirname}/../lambda/image-origin-response-function/index.js`, functionName: 'image-origin-response-function', handler: 'handler', runtime: lambda.Runtime.NODEJS_12_X, timeout: aws_cdk_lib_1.Duration.seconds(15), ...originResponseLambdaProps, }); this.imagesBucket.grantRead(this.imageOriginResponseLambda); this.imagesBucket.grantPut(this.imageOriginResponseLambda); this.imageViewerRequestLambda = new lambda.Function(this, 'ViewerRequestFunction', { code: lambda.Code.fromAsset(`${__dirname}/../lambda/image-viewer-request-function`), functionName: 'image-viewer-request-function', handler: 'index.handler', runtime: lambda.Runtime.NODEJS_12_X, ...viewerRequestLambdaProps, }); const cachePolicy = new cloudfront.CachePolicy(this, 'CachePolicy', { cachePolicyName: 'images-cache-policy', defaultTtl: aws_cdk_lib_1.Duration.days(365), enableAcceptEncodingBrotli: true, enableAcceptEncodingGzip: true, maxTtl: aws_cdk_lib_1.Duration.days(365 * 2), minTtl: aws_cdk_lib_1.Duration.days(30 * 3), queryStringBehavior: cloudfront.CacheQueryStringBehavior.allowList('height', 'width'), }); const originAccessIdentity = new cloudfront.OriginAccessIdentity(this, 'OAI'); this.imagesBucket.grantRead(originAccessIdentity); // Cloudfront distribution for the S3 bucket. this.distribution = new cloudfront.Distribution(this, 'Distribution', { ...cloudfrontDistributionProps, defaultBehavior: { origin: new origins.S3Origin(this.imagesBucket, { originAccessIdentity }), cachePolicy, edgeLambdas: [ { eventType: cloudfront.LambdaEdgeEventType.ORIGIN_RESPONSE, functionVersion: this.imageOriginResponseLambda.currentVersion, }, { eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST, functionVersion: this.imageViewerRequestLambda.currentVersion, }, ], viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, compress: true, ...cloudfrontDistributionProps?.defaultBehavior, }, }); } } exports.ImageResize = ImageResize; _a = JSII_RTTI_SYMBOL_1; ImageResize[_a] = { fqn: "aws-cdk-image-resize.ImageResize", version: "0.0.21" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXVDO0FBQ3ZDLHlEQUF5RDtBQUN6RCw4REFBOEQ7QUFDOUQsaURBQWlEO0FBQ2pELHFFQUFvRjtBQUNwRix5Q0FBeUM7QUFDekMsMkNBQXVDO0FBRXZDLDBDQUF3QjtBQVN4QixNQUFhLFdBQVksU0FBUSxzQkFBUztJQU14QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLGFBQWEsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxHQUN2RyxLQUFLLElBQUksRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxrQ0FBYyxDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRTtZQUNsRixRQUFRLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3ZCO1lBQ0QsS0FBSyxFQUFFLEdBQUcsU0FBUyxvREFBb0Q7WUFDdkUsWUFBWSxFQUFFLGdDQUFnQztZQUM5QyxPQUFPLEVBQUUsU0FBUztZQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyx5QkFBeUI7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDakYsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUywwQ0FBMEMsQ0FBQztZQUNuRixZQUFZLEVBQUUsK0JBQStCO1lBQzdDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsR0FBRyx3QkFBd0I7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDbEUsZUFBZSxFQUFFLHFCQUFxQjtZQUN0QyxVQUFVLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzlCLDBCQUEwQixFQUFFLElBQUk7WUFDaEMsd0JBQXdCLEVBQUUsSUFBSTtZQUM5QixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3QixtQkFBbUIsRUFBRSxVQUFVLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7U0FDdEYsQ0FBQyxDQUFDO1FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsRCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNwRSxHQUFHLDJCQUEyQjtZQUM5QixlQUFlLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztnQkFDekUsV0FBVztnQkFDWCxXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlO3dCQUN6RCxlQUFlLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWM7cUJBQy9EO29CQUNEO3dCQUNFLFNBQVMsRUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYzt3QkFDeEQsZUFBZSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjO3FCQUM5RDtpQkFDRjtnQkFDRCxvQkFBb0IsRUFBRSxVQUFVLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCO2dCQUN2RSxRQUFRLEVBQUUsSUFBSTtnQkFDZCxHQUFHLDJCQUEyQixFQUFFLGVBQWU7YUFDaEQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXhFSCxrQ0F5RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uLCBOb2RlanNGdW5jdGlvblByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGlzdHJpYnV0aW9uUHJvcHMsIEZ1bmN0aW9uUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZVJlc2l6ZVByb3BzIHtcbiAgY2xvdWRmcm9udERpc3RyaWJ1dGlvblByb3BzPzogRGlzdHJpYnV0aW9uUHJvcHM7XG4gIG9yaWdpblJlc3BvbnNlTGFtYmRhUHJvcHM/OiBOb2RlanNGdW5jdGlvblByb3BzO1xuICBzM0J1Y2tldFByb3BzPzogczMuQnVja2V0UHJvcHM7XG4gIHZpZXdlclJlcXVlc3RMYW1iZGFQcm9wcz86IEZ1bmN0aW9uUHJvcHM7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVJlc2l6ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGRpc3RyaWJ1dGlvbjogY2xvdWRmcm9udC5EaXN0cmlidXRpb247XG4gIGltYWdlT3JpZ2luUmVzcG9uc2VMYW1iZGE6IE5vZGVqc0Z1bmN0aW9uO1xuICBpbWFnZXNCdWNrZXQ6IHMzLkJ1Y2tldDtcbiAgaW1hZ2VWaWV3ZXJSZXF1ZXN0TGFtYmRhOiBsYW1iZGEuRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJSW1hZ2VSZXNpemVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHMzQnVja2V0UHJvcHMsIG9yaWdpblJlc3BvbnNlTGFtYmRhUHJvcHMsIHZpZXdlclJlcXVlc3RMYW1iZGFQcm9wcywgY2xvdWRmcm9udERpc3RyaWJ1dGlvblByb3BzIH0gPVxuICAgICAgcHJvcHMgfHwge307XG5cbiAgICB0aGlzLmltYWdlc0J1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0J1Y2tldCcsIHMzQnVja2V0UHJvcHMpO1xuXG4gICAgdGhpcy5pbWFnZU9yaWdpblJlc3BvbnNlTGFtYmRhID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsICdPcmlnaW5SZXNwb25zZUZ1bmN0aW9uJywge1xuICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBub2RlTW9kdWxlczogWydzaGFycCddLFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiBgJHtfX2Rpcm5hbWV9Ly4uL2xhbWJkYS9pbWFnZS1vcmlnaW4tcmVzcG9uc2UtZnVuY3Rpb24vaW5kZXguanNgLFxuICAgICAgZnVuY3Rpb25OYW1lOiAnaW1hZ2Utb3JpZ2luLXJlc3BvbnNlLWZ1bmN0aW9uJyxcbiAgICAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xMl9YLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxNSksXG4gICAgICAuLi5vcmlnaW5SZXNwb25zZUxhbWJkYVByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbWFnZXNCdWNrZXQuZ3JhbnRSZWFkKHRoaXMuaW1hZ2VPcmlnaW5SZXNwb25zZUxhbWJkYSk7XG4gICAgdGhpcy5pbWFnZXNCdWNrZXQuZ3JhbnRQdXQodGhpcy5pbWFnZU9yaWdpblJlc3BvbnNlTGFtYmRhKTtcblxuICAgIHRoaXMuaW1hZ2VWaWV3ZXJSZXF1ZXN0TGFtYmRhID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnVmlld2VyUmVxdWVzdEZ1bmN0aW9uJywge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vLi4vbGFtYmRhL2ltYWdlLXZpZXdlci1yZXF1ZXN0LWZ1bmN0aW9uYCksXG4gICAgICBmdW5jdGlvbk5hbWU6ICdpbWFnZS12aWV3ZXItcmVxdWVzdC1mdW5jdGlvbicsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTJfWCxcbiAgICAgIC4uLnZpZXdlclJlcXVlc3RMYW1iZGFQcm9wcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhY2hlUG9saWN5ID0gbmV3IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3kodGhpcywgJ0NhY2hlUG9saWN5Jywge1xuICAgICAgY2FjaGVQb2xpY3lOYW1lOiAnaW1hZ2VzLWNhY2hlLXBvbGljeScsXG4gICAgICBkZWZhdWx0VHRsOiBEdXJhdGlvbi5kYXlzKDM2NSksIC8vIDEgeWVhclxuICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IHRydWUsXG4gICAgICBtYXhUdGw6IER1cmF0aW9uLmRheXMoMzY1ICogMiksIC8vIDIgeWVhcnNcbiAgICAgIG1pblR0bDogRHVyYXRpb24uZGF5cygzMCAqIDMpLCAvLyAzIG1vbnRoc1xuICAgICAgcXVlcnlTdHJpbmdCZWhhdmlvcjogY2xvdWRmcm9udC5DYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsb3dMaXN0KCdoZWlnaHQnLCAnd2lkdGgnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG9yaWdpbkFjY2Vzc0lkZW50aXR5ID0gbmV3IGNsb3VkZnJvbnQuT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgJ09BSScpO1xuICAgIHRoaXMuaW1hZ2VzQnVja2V0LmdyYW50UmVhZChvcmlnaW5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAvLyBDbG91ZGZyb250IGRpc3RyaWJ1dGlvbiBmb3IgdGhlIFMzIGJ1Y2tldC5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbih0aGlzLCAnRGlzdHJpYnV0aW9uJywge1xuICAgICAgLi4uY2xvdWRmcm9udERpc3RyaWJ1dGlvblByb3BzLFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogbmV3IG9yaWdpbnMuUzNPcmlnaW4odGhpcy5pbWFnZXNCdWNrZXQsIHsgb3JpZ2luQWNjZXNzSWRlbnRpdHkgfSksXG4gICAgICAgIGNhY2hlUG9saWN5LFxuICAgICAgICBlZGdlTGFtYmRhczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVNQT05TRSxcbiAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogdGhpcy5pbWFnZU9yaWdpblJlc3BvbnNlTGFtYmRhLmN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgICBmdW5jdGlvblZlcnNpb246IHRoaXMuaW1hZ2VWaWV3ZXJSZXF1ZXN0TGFtYmRhLmN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgLi4uY2xvdWRmcm9udERpc3RyaWJ1dGlvblByb3BzPy5kZWZhdWx0QmVoYXZpb3IsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=