UNPKG

awscdk-mediatailor-cloudfront-construct

Version:

CDK Construct to associate MediaTailor config with CloudFront distribution

73 lines 11.8 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.MediaTailorWithCloudFront = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const crypto = require("crypto"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway"); const custom_resources_1 = require("aws-cdk-lib/custom-resources"); const constructs_1 = require("constructs"); const CloudFront_1 = require("./CloudFront"); const MediaTailor_1 = require("./MediaTailor"); class MediaTailorWithCloudFront extends constructs_1.Construct { constructor(scope, id, { videoContentSourceUrl, adDecisionServerUrl, slateAdUrl, configurationAliases, adDecisionFunction, adDecisionFunctionApiPath = '', skipCloudFront = false, adInsertionMode = 'STITCHED_ONLY', prerollAdUrl, }) { super(scope, id); if (adDecisionFunction) { const api = new aws_apigateway_1.LambdaRestApi(this, 'ApGateway', { handler: adDecisionFunction, }); adDecisionServerUrl = aws_cdk_lib_1.Fn.join('', [api.url, adDecisionFunctionApiPath]); } if (!adDecisionServerUrl) { throw new Error('Either adDecisionServerUrl or adDecisionFunction is required'); } // Create MediaTailor PlaybackConfig this.emt = new MediaTailor_1.MediaTailor(this, 'MediaTailor', { videoContentSourceUrl, adDecisionServerUrl, slateAdUrl, configurationAliases, prerollAdUrl, }); if (skipCloudFront) { return; } // Create CloudFront Distribution this.cf = new CloudFront_1.CloudFront(this, 'CloudFront', { videoContentSourceUrl, mediaTailorEndpointUrl: this.emt.config.attrHlsConfigurationManifestEndpointPrefix, }); // Create AWS Custom Resource to setup MediaTailor's CDN configuration with CloudFront new custom_resources_1.AwsCustomResource(this, 'AwsCustomResource', { onCreate: { service: 'MediaTailor', action: 'PutPlaybackConfiguration', region: aws_cdk_lib_1.Aws.REGION, parameters: { Name: this.emt.config.name, VideoContentSourceUrl: this.emt.config.videoContentSourceUrl, AdDecisionServerUrl: this.emt.config.adDecisionServerUrl, LivePreRollConfiguration: { AdDecisionServerUrl: prerollAdUrl, }, SlateAdUrl: this.emt.config.slateAdUrl, CdnConfiguration: { AdSegmentUrlPrefix: `https://${this.cf.distribution.distributionDomainName}`, ContentSegmentUrlPrefix: `https://${this.cf.distribution.distributionDomainName}/out/v1`, }, InsertionMode: adInsertionMode, }, physicalResourceId: custom_resources_1.PhysicalResourceId.of(crypto.randomUUID()), }, //Will ignore any resource and use the assumedRoleArn as resource and 'sts:AssumeRole' for service:action policy: custom_resources_1.AwsCustomResourcePolicy.fromSdkCalls({ resources: custom_resources_1.AwsCustomResourcePolicy.ANY_RESOURCE, }), }); } } exports.MediaTailorWithCloudFront = MediaTailorWithCloudFront; _a = JSII_RTTI_SYMBOL_1; MediaTailorWithCloudFront[_a] = { fqn: "awscdk-mediatailor-cloudfront-construct.MediaTailorWithCloudFront", version: "0.0.43" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVkaWFUYWlsb3JXaXRoQ2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NZWRpYVRhaWxvcldpdGhDbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBQ2pDLDZDQUFzQztBQUN0QywrREFBMkQ7QUFFM0QsbUVBQThHO0FBQzlHLDJDQUF1QztBQUN2Qyw2Q0FBMEM7QUFDMUMsK0NBQTRDO0FBYzVDLE1BQWEseUJBQTBCLFNBQVEsc0JBQVM7SUFJdEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxFQUN4QyxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHlCQUF5QixHQUFHLEVBQUUsRUFDOUIsY0FBYyxHQUFHLEtBQUssRUFDdEIsZUFBZSxHQUFHLGVBQWUsRUFDakMsWUFBWSxHQUNtQjtRQUUvQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLDhCQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDL0MsT0FBTyxFQUFFLGtCQUFrQjthQUM1QixDQUFDLENBQUM7WUFDSCxtQkFBbUIsR0FBRyxnQkFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUM5QyxxQkFBcUI7WUFDckIsbUJBQW1CO1lBQ25CLFVBQVU7WUFDVixvQkFBb0I7WUFDcEIsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUVILElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLHVCQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUMzQyxxQkFBcUI7WUFDckIsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsMENBQTBDO1NBQ25GLENBQUMsQ0FBQztRQUVILHNGQUFzRjtRQUN0RixJQUFJLG9DQUFpQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMvQyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSwwQkFBMEI7Z0JBQ2xDLE1BQU0sRUFBRSxpQkFBRyxDQUFDLE1BQU07Z0JBQ2xCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSTtvQkFDMUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMscUJBQXFCO29CQUM1RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7b0JBQ3hELHdCQUF3QixFQUFFO3dCQUN4QixtQkFBbUIsRUFBRSxZQUFZO3FCQUNsQztvQkFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVTtvQkFDdEMsZ0JBQWdCLEVBQUU7d0JBQ2hCLGtCQUFrQixFQUFFLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUU7d0JBQzVFLHVCQUF1QixFQUFFLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLFNBQVM7cUJBQ3pGO29CQUNELGFBQWEsRUFBRSxlQUFlO2lCQUMvQjtnQkFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQy9EO1lBQ0QseUdBQXlHO1lBQ3pHLE1BQU0sRUFBRSwwQ0FBdUIsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLFNBQVMsRUFBRSwwQ0FBdUIsQ0FBQyxZQUFZO2FBQ2hELENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNFSCw4REE0RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEF3cywgRm4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBMYW1iZGFSZXN0QXBpIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSwgQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3ksIFBoeXNpY2FsUmVzb3VyY2VJZCB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDbG91ZEZyb250IH0gZnJvbSAnLi9DbG91ZEZyb250JztcbmltcG9ydCB7IE1lZGlhVGFpbG9yIH0gZnJvbSAnLi9NZWRpYVRhaWxvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFUYWlsb3JXaXRoQ2xvdWRGcm9udFByb3BzIHtcbiAgcmVhZG9ubHkgdmlkZW9Db250ZW50U291cmNlVXJsOiBzdHJpbmc7IC8vIFRoZSBVUkwgb2YgdGhlIE1lZGlhUGFja2FnZSBlbmRwb2ludCB1c2VkIGJ5IE1lZGlhVGFpbG9yIGFzIHRoZSBjb250ZW50IG9yaWdpbi5cbiAgcmVhZG9ubHkgYWREZWNpc2lvblNlcnZlclVybD86IHN0cmluZzsgLy8gVGhlIFVSTCBvZiB0aGUgYWQgc2VydmVyIHVzZWQgYnkgTWVkaWFUYWlsb3IgYXMgdGhlIEFEUy5cbiAgcmVhZG9ubHkgc2xhdGVBZFVybD86IHN0cmluZzsgLy8gVGhlIFVSTCBvZiB0aGUgdmlkZW8gZmlsZSB1c2VkIGJ5IE1lZGlhVGFpbG9yIGFzIHRoZSBzbGF0ZS5cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbkFsaWFzZXM/OiBvYmplY3Q7IC8vIFRoZSBjb25maWd1cmF0aW9uIGFsaWFzZXMgdXNlZCBieSBNZWRpYVRhaWxvci5cbiAgcmVhZG9ubHkgYWREZWNpc2lvbkZ1bmN0aW9uPzogSUZ1bmN0aW9uOyAvLyBUaGUgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgaW50ZXJuYWxseSBieSBNZWRpYVRhaWxvciBhcyB0aGUgQURTLlxuICByZWFkb25seSBhZERlY2lzaW9uRnVuY3Rpb25BcGlQYXRoPzogc3RyaW5nOyAvLyBUaGUgQVBJIHBhdGggKGluY2x1ZGluZyBxdWVyeSBzdHJpbmdzKSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgcmVhZG9ubHkgc2tpcENsb3VkRnJvbnQ/OiBib29sZWFuOyAvLyBTa2lwIENsb3VkRnJvbnQgc2V0dXAuXG4gIHJlYWRvbmx5IGFkSW5zZXJ0aW9uTW9kZT86ICdTVElUQ0hFRF9PTkxZJyB8ICdQTEFZRVJfU0VMRUNUJzsgLy8gV2hldGhlciBwbGF5ZXJzIGNhbiB1c2Ugc3RpdGNoZWQgb3IgZ3VpZGVkIGFkIGluc2VydGlvblxuICByZWFkb25seSBwcmVyb2xsQWRVcmw/OiBzdHJpbmc7IC8vIFRoZSBVUkwgb2YgdGhlIHZpZGVvIGZpbGUgdXNlZCBieSBNZWRpYVRhaWxvciBhcyB0aGUgcHJlcm9sbC5cbn1cblxuZXhwb3J0IGNsYXNzIE1lZGlhVGFpbG9yV2l0aENsb3VkRnJvbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZW10OiBNZWRpYVRhaWxvcjtcbiAgcHVibGljIHJlYWRvbmx5IGNmOiBDbG91ZEZyb250IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHtcbiAgICB2aWRlb0NvbnRlbnRTb3VyY2VVcmwsXG4gICAgYWREZWNpc2lvblNlcnZlclVybCxcbiAgICBzbGF0ZUFkVXJsLFxuICAgIGNvbmZpZ3VyYXRpb25BbGlhc2VzLFxuICAgIGFkRGVjaXNpb25GdW5jdGlvbixcbiAgICBhZERlY2lzaW9uRnVuY3Rpb25BcGlQYXRoID0gJycsXG4gICAgc2tpcENsb3VkRnJvbnQgPSBmYWxzZSxcbiAgICBhZEluc2VydGlvbk1vZGUgPSAnU1RJVENIRURfT05MWScsXG4gICAgcHJlcm9sbEFkVXJsLFxuICB9OiBNZWRpYVRhaWxvcldpdGhDbG91ZEZyb250UHJvcHMpIHtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoYWREZWNpc2lvbkZ1bmN0aW9uKSB7XG4gICAgICBjb25zdCBhcGkgPSBuZXcgTGFtYmRhUmVzdEFwaSh0aGlzLCAnQXBHYXRld2F5Jywge1xuICAgICAgICBoYW5kbGVyOiBhZERlY2lzaW9uRnVuY3Rpb24sXG4gICAgICB9KTtcbiAgICAgIGFkRGVjaXNpb25TZXJ2ZXJVcmwgPSBGbi5qb2luKCcnLCBbYXBpLnVybCwgYWREZWNpc2lvbkZ1bmN0aW9uQXBpUGF0aF0pO1xuICAgIH1cblxuICAgIGlmICghYWREZWNpc2lvblNlcnZlclVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgYWREZWNpc2lvblNlcnZlclVybCBvciBhZERlY2lzaW9uRnVuY3Rpb24gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgTWVkaWFUYWlsb3IgUGxheWJhY2tDb25maWdcbiAgICB0aGlzLmVtdCA9IG5ldyBNZWRpYVRhaWxvcih0aGlzLCAnTWVkaWFUYWlsb3InLCB7XG4gICAgICB2aWRlb0NvbnRlbnRTb3VyY2VVcmwsXG4gICAgICBhZERlY2lzaW9uU2VydmVyVXJsLFxuICAgICAgc2xhdGVBZFVybCxcbiAgICAgIGNvbmZpZ3VyYXRpb25BbGlhc2VzLFxuICAgICAgcHJlcm9sbEFkVXJsLFxuICAgIH0pO1xuXG4gICAgaWYgKHNraXBDbG91ZEZyb250KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIENsb3VkRnJvbnQgRGlzdHJpYnV0aW9uXG4gICAgdGhpcy5jZiA9IG5ldyBDbG91ZEZyb250KHRoaXMsICdDbG91ZEZyb250Jywge1xuICAgICAgdmlkZW9Db250ZW50U291cmNlVXJsLFxuICAgICAgbWVkaWFUYWlsb3JFbmRwb2ludFVybDogdGhpcy5lbXQuY29uZmlnLmF0dHJIbHNDb25maWd1cmF0aW9uTWFuaWZlc3RFbmRwb2ludFByZWZpeCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBBV1MgQ3VzdG9tIFJlc291cmNlIHRvIHNldHVwIE1lZGlhVGFpbG9yJ3MgQ0ROIGNvbmZpZ3VyYXRpb24gd2l0aCBDbG91ZEZyb250XG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsICdBd3NDdXN0b21SZXNvdXJjZScsIHtcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6ICdNZWRpYVRhaWxvcicsXG4gICAgICAgIGFjdGlvbjogJ1B1dFBsYXliYWNrQ29uZmlndXJhdGlvbicsXG4gICAgICAgIHJlZ2lvbjogQXdzLlJFR0lPTixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHRoaXMuZW10LmNvbmZpZy5uYW1lLFxuICAgICAgICAgIFZpZGVvQ29udGVudFNvdXJjZVVybDogdGhpcy5lbXQuY29uZmlnLnZpZGVvQ29udGVudFNvdXJjZVVybCxcbiAgICAgICAgICBBZERlY2lzaW9uU2VydmVyVXJsOiB0aGlzLmVtdC5jb25maWcuYWREZWNpc2lvblNlcnZlclVybCxcbiAgICAgICAgICBMaXZlUHJlUm9sbENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIEFkRGVjaXNpb25TZXJ2ZXJVcmw6IHByZXJvbGxBZFVybCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFNsYXRlQWRVcmw6IHRoaXMuZW10LmNvbmZpZy5zbGF0ZUFkVXJsLFxuICAgICAgICAgIENkbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIEFkU2VnbWVudFVybFByZWZpeDogYGh0dHBzOi8vJHt0aGlzLmNmLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfWAsXG4gICAgICAgICAgICBDb250ZW50U2VnbWVudFVybFByZWZpeDogYGh0dHBzOi8vJHt0aGlzLmNmLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfS9vdXQvdjFgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgSW5zZXJ0aW9uTW9kZTogYWRJbnNlcnRpb25Nb2RlLFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihjcnlwdG8ucmFuZG9tVVVJRCgpKSxcbiAgICAgIH0sXG4gICAgICAvL1dpbGwgaWdub3JlIGFueSByZXNvdXJjZSBhbmQgdXNlIHRoZSBhc3N1bWVkUm9sZUFybiBhcyByZXNvdXJjZSBhbmQgJ3N0czpBc3N1bWVSb2xlJyBmb3Igc2VydmljZTphY3Rpb25cbiAgICAgIHBvbGljeTogQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgcmVzb3VyY2VzOiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0UsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19