awscdk-mediatailor-cloudfront-construct
Version:
CDK Construct to associate MediaTailor config with CloudFront distribution
78 lines • 12.8 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudFront = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
const constructs_1 = require("constructs");
class CloudFront extends constructs_1.Construct {
constructor(scope, id, { videoContentSourceUrl, mediaTailorEndpointUrl, adSegmentSourceUrl, }) {
super(scope, id);
// Create content origin
const videoContentOrigin = new aws_cloudfront_origins_1.HttpOrigin(aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split('/', videoContentSourceUrl)), {
originSslProtocols: [aws_cloudfront_1.OriginSslPolicy.SSL_V3],
protocolPolicy: aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY,
});
// Create MediaTailor origin
const mediaTailorOrigin = new aws_cloudfront_origins_1.HttpOrigin(aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split('/', mediaTailorEndpointUrl)), {
originSslProtocols: [aws_cloudfront_1.OriginSslPolicy.SSL_V3],
protocolPolicy: aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY,
});
// Create Transcoded Ad origin
const transocdedAdOrigin = new aws_cloudfront_origins_1.HttpOrigin(adSegmentSourceUrl
? aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split('/', videoContentSourceUrl))
: `segments.mediatailor.${aws_cdk_lib_1.Aws.REGION}.amazonaws.com`, {
originSslProtocols: [aws_cloudfront_1.OriginSslPolicy.SSL_V3],
protocolPolicy: aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY,
});
// Create CloudFront distribution
const distribution = new aws_cloudfront_1.Distribution(this, 'Distribution', {
comment: `${aws_cdk_lib_1.Aws.STACK_NAME} - CloudFront distribution for MediaTailor`,
defaultRootObject: '',
minimumProtocolVersion: aws_cloudfront_1.SecurityPolicyProtocol.TLS_V1_2016,
defaultBehavior: {
origin: videoContentOrigin,
cachePolicy: aws_cloudfront_1.CachePolicy.ELEMENTAL_MEDIA_PACKAGE,
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
},
additionalBehaviors: {
'/v1/m*': {
origin: mediaTailorOrigin,
cachePolicy: aws_cloudfront_1.CachePolicy.ELEMENTAL_MEDIA_PACKAGE,
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.ELEMENTAL_MEDIA_TAILOR,
},
'/v1/dash/*': {
origin: mediaTailorOrigin,
cachePolicy: aws_cloudfront_1.CachePolicy.ELEMENTAL_MEDIA_PACKAGE,
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.ELEMENTAL_MEDIA_TAILOR,
},
'/tm/*': {
origin: transocdedAdOrigin,
cachePolicy: aws_cloudfront_1.CachePolicy.ELEMENTAL_MEDIA_PACKAGE,
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.CORS_S3_ORIGIN,
},
'/v1/segment/*': {
origin: mediaTailorOrigin,
cachePolicy: aws_cloudfront_1.CachePolicy.ELEMENTAL_MEDIA_PACKAGE,
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.ELEMENTAL_MEDIA_TAILOR,
},
},
});
this.distribution = distribution;
}
}
exports.CloudFront = CloudFront;
_a = JSII_RTTI_SYMBOL_1;
CloudFront[_a] = { fqn: "awscdk-mediatailor-cloudfront-construct.CloudFront", version: "0.0.43" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXNDO0FBQ3RDLCtEQVNvQztBQUNwQywrRUFBZ0U7QUFDaEUsMkNBQXVDO0FBUXZDLE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBR3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsRUFDeEMscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixrQkFBa0IsR0FDRjtRQUVoQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLHdCQUF3QjtRQUN4QixNQUFNLGtCQUFrQixHQUFHLElBQUksbUNBQVUsQ0FDdkMsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEVBQ2xEO1lBQ0Usa0JBQWtCLEVBQUUsQ0FBQyxnQ0FBZSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxjQUFjLEVBQUUscUNBQW9CLENBQUMsVUFBVTtTQUNoRCxDQUNGLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLG1DQUFVLENBQ3RDLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxFQUNuRDtZQUNFLGtCQUFrQixFQUFFLENBQUMsZ0NBQWUsQ0FBQyxNQUFNLENBQUM7WUFDNUMsY0FBYyxFQUFFLHFDQUFvQixDQUFDLFVBQVU7U0FDaEQsQ0FDRixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxtQ0FBVSxDQUN2QyxrQkFBa0I7WUFDaEIsQ0FBQyxDQUFDLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsd0JBQXdCLGlCQUFHLENBQUMsTUFBTSxnQkFBZ0IsRUFDdEQ7WUFDRSxrQkFBa0IsRUFBRSxDQUFDLGdDQUFlLENBQUMsTUFBTSxDQUFDO1lBQzVDLGNBQWMsRUFBRSxxQ0FBb0IsQ0FBQyxVQUFVO1NBQ2hELENBQ0YsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUMxRCxPQUFPLEVBQUUsR0FBRyxpQkFBRyxDQUFDLFVBQVUsNENBQTRDO1lBQ3RFLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsc0JBQXNCLEVBQUUsdUNBQXNCLENBQUMsV0FBVztZQUMxRCxlQUFlLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsV0FBVyxFQUFFLDRCQUFXLENBQUMsdUJBQXVCO2dCQUNoRCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxTQUFTO2dCQUN4QyxvQkFBb0IsRUFBRSxxQ0FBb0IsQ0FBQyxpQkFBaUI7YUFDN0Q7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsUUFBUSxFQUFFO29CQUNSLE1BQU0sRUFBRSxpQkFBaUI7b0JBQ3pCLFdBQVcsRUFBRSw0QkFBVyxDQUFDLHVCQUF1QjtvQkFDaEQsY0FBYyxFQUFFLCtCQUFjLENBQUMsU0FBUztvQkFDeEMsb0JBQW9CLEVBQUUscUNBQW9CLENBQUMsaUJBQWlCO29CQUM1RCxtQkFBbUIsRUFBRSxvQ0FBbUIsQ0FBQyxzQkFBc0I7aUJBQ2hFO2dCQUNELFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixXQUFXLEVBQUUsNEJBQVcsQ0FBQyx1QkFBdUI7b0JBQ2hELGNBQWMsRUFBRSwrQkFBYyxDQUFDLFNBQVM7b0JBQ3hDLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtvQkFDNUQsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsc0JBQXNCO2lCQUNoRTtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLGtCQUFrQjtvQkFDMUIsV0FBVyxFQUFFLDRCQUFXLENBQUMsdUJBQXVCO29CQUNoRCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxTQUFTO29CQUN4QyxvQkFBb0IsRUFBRSxxQ0FBb0IsQ0FBQyxpQkFBaUI7b0JBQzVELG1CQUFtQixFQUFFLG9DQUFtQixDQUFDLGNBQWM7aUJBQ3hEO2dCQUNELGVBQWUsRUFBRTtvQkFDZixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixXQUFXLEVBQUUsNEJBQVcsQ0FBQyx1QkFBdUI7b0JBQ2hELGNBQWMsRUFBRSwrQkFBYyxDQUFDLFNBQVM7b0JBQ3hDLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtvQkFDNUQsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsc0JBQXNCO2lCQUNoRTthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQzs7QUFwRkgsZ0NBcUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXdzLCBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIE9yaWdpblNzbFBvbGljeSxcbiAgT3JpZ2luUHJvdG9jb2xQb2xpY3ksXG4gIERpc3RyaWJ1dGlvbixcbiAgU2VjdXJpdHlQb2xpY3lQcm90b2NvbCxcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG4gIENhY2hlUG9saWN5LFxuICBBbGxvd2VkTWV0aG9kcyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgSHR0cE9yaWdpbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udFByb3BzIHtcbiAgcmVhZG9ubHkgdmlkZW9Db250ZW50U291cmNlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lZGlhVGFpbG9yRW5kcG9pbnRVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRTZWdtZW50U291cmNlVXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB7XG4gICAgdmlkZW9Db250ZW50U291cmNlVXJsLFxuICAgIG1lZGlhVGFpbG9yRW5kcG9pbnRVcmwsXG4gICAgYWRTZWdtZW50U291cmNlVXJsLFxuICB9OiBDbG91ZEZyb250UHJvcHMpIHtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBDcmVhdGUgY29udGVudCBvcmlnaW5cbiAgICBjb25zdCB2aWRlb0NvbnRlbnRPcmlnaW4gPSBuZXcgSHR0cE9yaWdpbihcbiAgICAgIEZuLnNlbGVjdCgyLCBGbi5zcGxpdCgnLycsIHZpZGVvQ29udGVudFNvdXJjZVVybCkpLFxuICAgICAge1xuICAgICAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IFtPcmlnaW5Tc2xQb2xpY3kuU1NMX1YzXSxcbiAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgTWVkaWFUYWlsb3Igb3JpZ2luXG4gICAgY29uc3QgbWVkaWFUYWlsb3JPcmlnaW4gPSBuZXcgSHR0cE9yaWdpbihcbiAgICAgIEZuLnNlbGVjdCgyLCBGbi5zcGxpdCgnLycsIG1lZGlhVGFpbG9yRW5kcG9pbnRVcmwpKSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luU3NsUHJvdG9jb2xzOiBbT3JpZ2luU3NsUG9saWN5LlNTTF9WM10sXG4gICAgICAgIHByb3RvY29sUG9saWN5OiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIFRyYW5zY29kZWQgQWQgb3JpZ2luXG4gICAgY29uc3QgdHJhbnNvY2RlZEFkT3JpZ2luID0gbmV3IEh0dHBPcmlnaW4oXG4gICAgICBhZFNlZ21lbnRTb3VyY2VVcmxcbiAgICAgICAgPyBGbi5zZWxlY3QoMiwgRm4uc3BsaXQoJy8nLCB2aWRlb0NvbnRlbnRTb3VyY2VVcmwpKVxuICAgICAgICA6IGBzZWdtZW50cy5tZWRpYXRhaWxvci4ke0F3cy5SRUdJT059LmFtYXpvbmF3cy5jb21gLFxuICAgICAge1xuICAgICAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IFtPcmlnaW5Tc2xQb2xpY3kuU1NMX1YzXSxcbiAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICBjb25zdCBkaXN0cmlidXRpb24gPSBuZXcgRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gICAgICBjb21tZW50OiBgJHtBd3MuU1RBQ0tfTkFNRX0gLSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBmb3IgTWVkaWFUYWlsb3JgLFxuICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6ICcnLFxuICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMjAxNixcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjogeyAvLyBITFMvREFTSCBzZWdtZW50XG4gICAgICAgIG9yaWdpbjogdmlkZW9Db250ZW50T3JpZ2luLFxuICAgICAgICBjYWNoZVBvbGljeTogQ2FjaGVQb2xpY3kuRUxFTUVOVEFMX01FRElBX1BBQ0tBR0UsXG4gICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiB7XG4gICAgICAgICcvdjEvbSonOiB7IC8vIE1lZGlhVGFpbG9yIEhMUyBtYW5pZmVzdFxuICAgICAgICAgIG9yaWdpbjogbWVkaWFUYWlsb3JPcmlnaW4sXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IENhY2hlUG9saWN5LkVMRU1FTlRBTF9NRURJQV9QQUNLQUdFLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IE9yaWdpblJlcXVlc3RQb2xpY3kuRUxFTUVOVEFMX01FRElBX1RBSUxPUixcbiAgICAgICAgfSxcbiAgICAgICAgJy92MS9kYXNoLyonOiB7IC8vIE1lZGlhVGFpbG9yIERBU0ggbWFuaWZlc3RcbiAgICAgICAgICBvcmlnaW46IG1lZGlhVGFpbG9yT3JpZ2luLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5FTEVNRU5UQUxfTUVESUFfUEFDS0FHRSxcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkVMRU1FTlRBTF9NRURJQV9UQUlMT1IsXG4gICAgICAgIH0sXG4gICAgICAgICcvdG0vKic6IHsgLy8gTWVkaWFUYWlsb3IgdHJhbnNjb2RlZCBBZCBzZWdtZW50c1xuICAgICAgICAgIG9yaWdpbjogdHJhbnNvY2RlZEFkT3JpZ2luLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5FTEVNRU5UQUxfTUVESUFfUEFDS0FHRSxcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkNPUlNfUzNfT1JJR0lOLFxuICAgICAgICB9LFxuICAgICAgICAnL3YxL3NlZ21lbnQvKic6IHsgLy8gTWVkaWFUYWlsb3Igc2VydmVyLXNpZGUgdHJhY2tpbmdcbiAgICAgICAgICBvcmlnaW46IG1lZGlhVGFpbG9yT3JpZ2luLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5FTEVNRU5UQUxfTUVESUFfUEFDS0FHRSxcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkVMRU1FTlRBTF9NRURJQV9UQUlMT1IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBkaXN0cmlidXRpb247XG4gIH1cbn0iXX0=