1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.CacheBehavior = void 0;
|
4 | const iam = require("@aws-cdk/aws-iam");
|
5 | const cache_policy_1 = require("../cache-policy");
|
6 | const distribution_1 = require("../distribution");
|
7 | /**
|
8 | * Allows configuring a variety of CloudFront functionality for a given URL path pattern.
|
9 | *
|
10 | * Note: This really should simply by called 'Behavior', but this name is already taken by the legacy
|
11 | * CloudFrontWebDistribution implementation.
|
12 | */
|
13 | class CacheBehavior {
|
14 | constructor(originId, props) {
|
15 | this.props = props;
|
16 | this.originId = originId;
|
17 | this.validateEdgeLambdas(props.edgeLambdas);
|
18 | this.grantEdgeLambdaFunctionExecutionRole(props.edgeLambdas);
|
19 | }
|
20 | /**
|
21 | * Creates and returns the CloudFormation representation of this behavior.
|
22 | * This renders as a "CacheBehaviorProperty" regardless of if this is a default
|
23 | * cache behavior or not, as the two are identical except that the pathPattern
|
24 | * is omitted for the default cache behavior.
|
25 | *
|
26 | * @internal
|
27 | */
|
28 | _renderBehavior() {
|
29 | var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
30 | return {
|
31 | pathPattern: this.props.pathPattern,
|
32 | targetOriginId: this.originId,
|
33 | allowedMethods: (_a = this.props.allowedMethods) === null || _a === void 0 ? void 0 : _a.methods,
|
34 | cachedMethods: (_b = this.props.cachedMethods) === null || _b === void 0 ? void 0 : _b.methods,
|
35 | cachePolicyId: ((_c = this.props.cachePolicy) !== null && _c !== void 0 ? _c : cache_policy_1.CachePolicy.CACHING_OPTIMIZED).cachePolicyId,
|
36 | compress: (_d = this.props.compress) !== null && _d !== void 0 ? _d : true,
|
37 | originRequestPolicyId: (_e = this.props.originRequestPolicy) === null || _e === void 0 ? void 0 : _e.originRequestPolicyId,
|
38 | responseHeadersPolicyId: (_f = this.props.responseHeadersPolicy) === null || _f === void 0 ? void 0 : _f.responseHeadersPolicyId,
|
39 | smoothStreaming: this.props.smoothStreaming,
|
40 | viewerProtocolPolicy: (_g = this.props.viewerProtocolPolicy) !== null && _g !== void 0 ? _g : distribution_1.ViewerProtocolPolicy.ALLOW_ALL,
|
41 | functionAssociations: (_h = this.props.functionAssociations) === null || _h === void 0 ? void 0 : _h.map(association => ({
|
42 | functionArn: association.function.functionArn,
|
43 | eventType: association.eventType.toString(),
|
44 | })),
|
45 | lambdaFunctionAssociations: (_j = this.props.edgeLambdas) === null || _j === void 0 ? void 0 : _j.map(edgeLambda => ({
|
46 | lambdaFunctionArn: edgeLambda.functionVersion.edgeArn,
|
47 | eventType: edgeLambda.eventType.toString(),
|
48 | includeBody: edgeLambda.includeBody,
|
49 | })),
|
50 | trustedKeyGroups: (_k = this.props.trustedKeyGroups) === null || _k === void 0 ? void 0 : _k.map(keyGroup => keyGroup.keyGroupId),
|
51 | };
|
52 | }
|
53 | validateEdgeLambdas(edgeLambdas) {
|
54 | const includeBodyEventTypes = [distribution_1.LambdaEdgeEventType.ORIGIN_REQUEST, distribution_1.LambdaEdgeEventType.VIEWER_REQUEST];
|
55 | if (edgeLambdas && edgeLambdas.some(lambda => lambda.includeBody && !includeBodyEventTypes.includes(lambda.eventType))) {
|
56 | throw new Error('\'includeBody\' can only be true for ORIGIN_REQUEST or VIEWER_REQUEST event types.');
|
57 | }
|
58 | }
|
59 | grantEdgeLambdaFunctionExecutionRole(edgeLambdas) {
|
60 | if (!edgeLambdas || edgeLambdas.length === 0) {
|
61 | return;
|
62 | }
|
63 | edgeLambdas.forEach((edgeLambda) => {
|
64 | const role = edgeLambda.functionVersion.role;
|
65 | if (role && role instanceof iam.Role && role.assumeRolePolicy) {
|
66 | role.assumeRolePolicy.addStatements(new iam.PolicyStatement({
|
67 | actions: ['sts:AssumeRole'],
|
68 | principals: [new iam.ServicePrincipal('edgelambda.amazonaws.com')],
|
69 | }));
|
70 | }
|
71 | });
|
72 | }
|
73 | }
|
74 | exports.CacheBehavior = CacheBehavior;
|
75 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtYmVoYXZpb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjYWNoZS1iZWhhdmlvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3Q0FBd0M7QUFDeEMsa0RBQThDO0FBRTlDLGtEQUE0RztBQWM1Rzs7Ozs7R0FLRztBQUNILE1BQWEsYUFBYTtJQUd4QixZQUFZLFFBQWdCLEVBQW1CLEtBQXlCO1FBQXpCLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQ3RFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM5RDtJQUVEOzs7Ozs7O09BT0c7SUFDSSxlQUFlOztRQUNwQixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNuQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDN0IsY0FBYyxRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYywwQ0FBRSxPQUFPO1lBQ2xELGFBQWEsUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsMENBQUUsT0FBTztZQUNoRCxhQUFhLEVBQUUsT0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsbUNBQUksMEJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGFBQWE7WUFDdEYsUUFBUSxRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxtQ0FBSSxJQUFJO1lBQ3JDLHFCQUFxQixRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLDBDQUFFLHFCQUFxQjtZQUM1RSx1QkFBdUIsUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQiwwQ0FBRSx1QkFBdUI7WUFDbEYsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUMzQyxvQkFBb0IsUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixtQ0FBSSxtQ0FBb0IsQ0FBQyxTQUFTO1lBQ3ZGLG9CQUFvQixRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLDBDQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pFLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVc7Z0JBQzdDLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFDSCwwQkFBMEIsUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsMENBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPO2dCQUNyRCxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFDLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7WUFDSCxnQkFBZ0IsUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQ3BGLENBQUM7S0FDSDtJQUVPLG1CQUFtQixDQUFDLFdBQTBCO1FBQ3BELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxrQ0FBbUIsQ0FBQyxjQUFjLEVBQUUsa0NBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkcsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFDdEgsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1NBQ3ZHO0tBQ0Y7SUFFTyxvQ0FBb0MsQ0FBQyxXQUEwQjtRQUNyRSxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3pELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUM3QyxJQUFJLElBQUksSUFBSSxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUMxRCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztpQkFDbkUsQ0FBQyxDQUFDLENBQUM7YUFDTDtRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7Q0FDRjtBQTlERCxzQ0E4REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpYW0gZnJvbSAnQGF3cy1jZGsvYXdzLWlhbSc7XG5pbXBvcnQgeyBDYWNoZVBvbGljeSB9IGZyb20gJy4uL2NhY2hlLXBvbGljeSc7XG5pbXBvcnQgeyBDZm5EaXN0cmlidXRpb24gfSBmcm9tICcuLi9jbG91ZGZyb250LmdlbmVyYXRlZCc7XG5pbXBvcnQgeyBBZGRCZWhhdmlvck9wdGlvbnMsIEVkZ2VMYW1iZGEsIExhbWJkYUVkZ2VFdmVudFR5cGUsIFZpZXdlclByb3RvY29sUG9saWN5IH0gZnJvbSAnLi4vZGlzdHJpYnV0aW9uJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBzcGVjaWZ5aW5nIGN1c3RvbSBiZWhhdmlvcnMgZm9yIG9yaWdpbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVCZWhhdmlvclByb3BzIGV4dGVuZHMgQWRkQmVoYXZpb3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXR0ZXJuIChlLmcuLCBgaW1hZ2VzLyouanBnYCkgdGhhdCBzcGVjaWZpZXMgd2hpY2ggcmVxdWVzdHMgdG8gYXBwbHkgdGhlIGJlaGF2aW9yIHRvLlxuICAgKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGBEaXN0cmlidXRpb25gIHRoYXQgaGFzIGEgcGF0aCBwYXR0ZXJuXG4gICAqIG9mICcqJywgd2hpY2ggYWN0cyBhcyB0aGUgY2F0Y2gtYWxsIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoUGF0dGVybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFsbG93cyBjb25maWd1cmluZyBhIHZhcmlldHkgb2YgQ2xvdWRGcm9udCBmdW5jdGlvbmFsaXR5IGZvciBhIGdpdmVuIFVSTCBwYXRoIHBhdHRlcm4uXG4gKlxuICogTm90ZTogVGhpcyByZWFsbHkgc2hvdWxkIHNpbXBseSBieSBjYWxsZWQgJ0JlaGF2aW9yJywgYnV0IHRoaXMgbmFtZSBpcyBhbHJlYWR5IHRha2VuIGJ5IHRoZSBsZWdhY3lcbiAqIENsb3VkRnJvbnRXZWJEaXN0cmlidXRpb24gaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWNoZUJlaGF2aW9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW5JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9yaWdpbklkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENhY2hlQmVoYXZpb3JQcm9wcykge1xuICAgIHRoaXMub3JpZ2luSWQgPSBvcmlnaW5JZDtcblxuICAgIHRoaXMudmFsaWRhdGVFZGdlTGFtYmRhcyhwcm9wcy5lZGdlTGFtYmRhcyk7XG4gICAgdGhpcy5ncmFudEVkZ2VMYW1iZGFGdW5jdGlvbkV4ZWN1dGlvblJvbGUocHJvcHMuZWRnZUxhbWJkYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYmVoYXZpb3IuXG4gICAqIFRoaXMgcmVuZGVycyBhcyBhIFwiQ2FjaGVCZWhhdmlvclByb3BlcnR5XCIgcmVnYXJkbGVzcyBvZiBpZiB0aGlzIGlzIGEgZGVmYXVsdFxuICAgKiBjYWNoZSBiZWhhdmlvciBvciBub3QsIGFzIHRoZSB0d28gYXJlIGlkZW50aWNhbCBleGNlcHQgdGhhdCB0aGUgcGF0aFBhdHRlcm5cbiAgICogaXMgb21pdHRlZCBmb3IgdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9yZW5kZXJCZWhhdmlvcigpOiBDZm5EaXN0cmlidXRpb24uQ2FjaGVCZWhhdmlvclByb3BlcnR5IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aFBhdHRlcm46IHRoaXMucHJvcHMucGF0aFBhdHRlcm4sXG4gICAgICB0YXJnZXRPcmlnaW5JZDogdGhpcy5vcmlnaW5JZCxcbiAgICAgIGFsbG93ZWRNZXRob2RzOiB0aGlzLnByb3BzLmFsbG93ZWRNZXRob2RzPy5tZXRob2RzLFxuICAgICAgY2FjaGVkTWV0aG9kczogdGhpcy5wcm9wcy5jYWNoZWRNZXRob2RzPy5tZXRob2RzLFxuICAgICAgY2FjaGVQb2xpY3lJZDogKHRoaXMucHJvcHMuY2FjaGVQb2xpY3kgPz8gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQpLmNhY2hlUG9saWN5SWQsXG4gICAgICBjb21wcmVzczogdGhpcy5wcm9wcy5jb21wcmVzcyA/PyB0cnVlLFxuICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeUlkOiB0aGlzLnByb3BzLm9yaWdpblJlcXVlc3RQb2xpY3k/Lm9yaWdpblJlcXVlc3RQb2xpY3lJZCxcbiAgICAgIHJlc3BvbnNlSGVhZGVyc1BvbGljeUlkOiB0aGlzLnByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeT8ucmVzcG9uc2VIZWFkZXJzUG9saWN5SWQsXG4gICAgICBzbW9vdGhTdHJlYW1pbmc6IHRoaXMucHJvcHMuc21vb3RoU3RyZWFtaW5nLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IHRoaXMucHJvcHMudmlld2VyUHJvdG9jb2xQb2xpY3kgPz8gVmlld2VyUHJvdG9jb2xQb2xpY3kuQUxMT1dfQUxMLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMucHJvcHMuZnVuY3Rpb25Bc3NvY2lhdGlvbnM/Lm1hcChhc3NvY2lhdGlvbiA9PiAoe1xuICAgICAgICBmdW5jdGlvbkFybjogYXNzb2NpYXRpb24uZnVuY3Rpb24uZnVuY3Rpb25Bcm4sXG4gICAgICAgIGV2ZW50VHlwZTogYXNzb2NpYXRpb24uZXZlbnRUeXBlLnRvU3RyaW5nKCksXG4gICAgICB9KSksXG4gICAgICBsYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5wcm9wcy5lZGdlTGFtYmRhcz8ubWFwKGVkZ2VMYW1iZGEgPT4gKHtcbiAgICAgICAgbGFtYmRhRnVuY3Rpb25Bcm46IGVkZ2VMYW1iZGEuZnVuY3Rpb25WZXJzaW9uLmVkZ2VBcm4sXG4gICAgICAgIGV2ZW50VHlwZTogZWRnZUxhbWJkYS5ldmVudFR5cGUudG9TdHJpbmcoKSxcbiAgICAgICAgaW5jbHVkZUJvZHk6IGVkZ2VMYW1iZGEuaW5jbHVkZUJvZHksXG4gICAgICB9KSksXG4gICAgICB0cnVzdGVkS2V5R3JvdXBzOiB0aGlzLnByb3BzLnRydXN0ZWRLZXlHcm91cHM/Lm1hcChrZXlHcm91cCA9PiBrZXlHcm91cC5rZXlHcm91cElkKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVkZ2VMYW1iZGFzKGVkZ2VMYW1iZGFzPzogRWRnZUxhbWJkYVtdKSB7XG4gICAgY29uc3QgaW5jbHVkZUJvZHlFdmVudFR5cGVzID0gW0xhbWJkYUVkZ2VFdmVudFR5cGUuT1JJR0lOX1JFUVVFU1QsIExhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1RdO1xuICAgIGlmIChlZGdlTGFtYmRhcyAmJiBlZGdlTGFtYmRhcy5zb21lKGxhbWJkYSA9PiBsYW1iZGEuaW5jbHVkZUJvZHkgJiYgIWluY2x1ZGVCb2R5RXZlbnRUeXBlcy5pbmNsdWRlcyhsYW1iZGEuZXZlbnRUeXBlKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXFwnaW5jbHVkZUJvZHlcXCcgY2FuIG9ubHkgYmUgdHJ1ZSBmb3IgT1JJR0lOX1JFUVVFU1Qgb3IgVklFV0VSX1JFUVVFU1QgZXZlbnQgdHlwZXMuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncmFudEVkZ2VMYW1iZGFGdW5jdGlvbkV4ZWN1dGlvblJvbGUoZWRnZUxhbWJkYXM/OiBFZGdlTGFtYmRhW10pIHtcbiAgICBpZiAoIWVkZ2VMYW1iZGFzIHx8IGVkZ2VMYW1iZGFzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBlZGdlTGFtYmRhcy5mb3JFYWNoKChlZGdlTGFtYmRhKSA9PiB7XG4gICAgICBjb25zdCByb2xlID0gZWRnZUxhbWJkYS5mdW5jdGlvblZlcnNpb24ucm9sZTtcbiAgICAgIGlmIChyb2xlICYmIHJvbGUgaW5zdGFuY2VvZiBpYW0uUm9sZSAmJiByb2xlLmFzc3VtZVJvbGVQb2xpY3kpIHtcbiAgICAgICAgcm9sZS5hc3N1bWVSb2xlUG9saWN5LmFkZFN0YXRlbWVudHMobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnc3RzOkFzc3VtZVJvbGUnXSxcbiAgICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlZGdlbGFtYmRhLmFtYXpvbmF3cy5jb20nKV0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19 |
\ | No newline at end of file |