@composurecdk/cloudfront 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/alarm-config.d.ts.map +1 -0
- package/dist/commonjs/alarm-config.js +3 -0
- package/dist/{alarm-config.js.map → commonjs/alarm-config.js.map} +1 -1
- package/dist/commonjs/alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/alarm-defaults.js +65 -0
- package/dist/commonjs/alarm-defaults.js.map +1 -0
- package/dist/commonjs/behavior-function-alarms.d.ts.map +1 -0
- package/dist/commonjs/behavior-function-alarms.js +145 -0
- package/dist/commonjs/behavior-function-alarms.js.map +1 -0
- package/dist/commonjs/cloudfront-alarm-builder.d.ts.map +1 -0
- package/dist/commonjs/cloudfront-alarm-builder.js +141 -0
- package/dist/commonjs/cloudfront-alarm-builder.js.map +1 -0
- package/dist/commonjs/defaults.d.ts.map +1 -0
- package/dist/commonjs/defaults.js +72 -0
- package/dist/commonjs/defaults.js.map +1 -0
- package/dist/commonjs/distribution-alarms.d.ts.map +1 -0
- package/dist/commonjs/distribution-alarms.js +64 -0
- package/dist/commonjs/distribution-alarms.js.map +1 -0
- package/dist/commonjs/distribution-builder.d.ts.map +1 -0
- package/dist/commonjs/distribution-builder.js +191 -0
- package/dist/commonjs/distribution-builder.js.map +1 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +14 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/resolve-behaviors.d.ts.map +1 -0
- package/dist/commonjs/resolve-behaviors.js +101 -0
- package/dist/commonjs/resolve-behaviors.js.map +1 -0
- package/dist/esm/alarm-config.d.ts +98 -0
- package/dist/esm/alarm-config.d.ts.map +1 -0
- package/dist/esm/alarm-config.js.map +1 -0
- package/dist/esm/alarm-defaults.d.ts +28 -0
- package/dist/esm/alarm-defaults.d.ts.map +1 -0
- package/dist/esm/alarm-defaults.js.map +1 -0
- package/dist/esm/behavior-function-alarms.d.ts +44 -0
- package/dist/esm/behavior-function-alarms.d.ts.map +1 -0
- package/dist/esm/behavior-function-alarms.js.map +1 -0
- package/dist/esm/cloudfront-alarm-builder.d.ts +136 -0
- package/dist/esm/cloudfront-alarm-builder.d.ts.map +1 -0
- package/dist/esm/cloudfront-alarm-builder.js.map +1 -0
- package/dist/esm/defaults.d.ts +17 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/distribution-alarms.d.ts +9 -0
- package/dist/esm/distribution-alarms.d.ts.map +1 -0
- package/dist/esm/distribution-alarms.js.map +1 -0
- package/dist/esm/distribution-builder.d.ts +345 -0
- package/dist/esm/distribution-builder.d.ts.map +1 -0
- package/dist/esm/distribution-builder.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/resolve-behaviors.d.ts +56 -0
- package/dist/esm/resolve-behaviors.d.ts.map +1 -0
- package/dist/esm/resolve-behaviors.js.map +1 -0
- package/package.json +36 -18
- package/dist/alarm-config.d.ts.map +0 -1
- package/dist/alarm-defaults.d.ts.map +0 -1
- package/dist/alarm-defaults.js.map +0 -1
- package/dist/behavior-function-alarms.d.ts.map +0 -1
- package/dist/behavior-function-alarms.js.map +0 -1
- package/dist/cloudfront-alarm-builder.d.ts.map +0 -1
- package/dist/cloudfront-alarm-builder.js.map +0 -1
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/distribution-alarms.d.ts.map +0 -1
- package/dist/distribution-alarms.js.map +0 -1
- package/dist/distribution-builder.d.ts.map +0 -1
- package/dist/distribution-builder.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resolve-behaviors.d.ts.map +0 -1
- package/dist/resolve-behaviors.js.map +0 -1
- /package/dist/{alarm-config.d.ts → commonjs/alarm-config.d.ts} +0 -0
- /package/dist/{alarm-defaults.d.ts → commonjs/alarm-defaults.d.ts} +0 -0
- /package/dist/{behavior-function-alarms.d.ts → commonjs/behavior-function-alarms.d.ts} +0 -0
- /package/dist/{cloudfront-alarm-builder.d.ts → commonjs/cloudfront-alarm-builder.d.ts} +0 -0
- /package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +0 -0
- /package/dist/{distribution-alarms.d.ts → commonjs/distribution-alarms.d.ts} +0 -0
- /package/dist/{distribution-builder.d.ts → commonjs/distribution-builder.d.ts} +0 -0
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{resolve-behaviors.d.ts → commonjs/resolve-behaviors.d.ts} +0 -0
- /package/dist/{alarm-config.js → esm/alarm-config.js} +0 -0
- /package/dist/{alarm-defaults.js → esm/alarm-defaults.js} +0 -0
- /package/dist/{behavior-function-alarms.js → esm/behavior-function-alarms.js} +0 -0
- /package/dist/{cloudfront-alarm-builder.js → esm/cloudfront-alarm-builder.js} +0 -0
- /package/dist/{defaults.js → esm/defaults.js} +0 -0
- /package/dist/{distribution-alarms.js → esm/distribution-alarms.js} +0 -0
- /package/dist/{distribution-builder.js → esm/distribution-builder.js} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{resolve-behaviors.js → esm/resolve-behaviors.js} +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDistributionBuilder = createDistributionBuilder;
|
|
4
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
5
|
+
const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const core_1 = require("@composurecdk/core");
|
|
8
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
9
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
10
|
+
const s3_1 = require("@composurecdk/s3");
|
|
11
|
+
const defaults_js_1 = require("./defaults.js");
|
|
12
|
+
const resolve_behaviors_js_1 = require("./resolve-behaviors.js");
|
|
13
|
+
const behavior_function_alarms_js_1 = require("./behavior-function-alarms.js");
|
|
14
|
+
const cloudfront_alarm_builder_js_1 = require("./cloudfront-alarm-builder.js");
|
|
15
|
+
class DistributionBuilder {
|
|
16
|
+
props = {};
|
|
17
|
+
#origin;
|
|
18
|
+
#additionalBehaviors = new Map();
|
|
19
|
+
#behaviorSlugs = new Map();
|
|
20
|
+
#customAlarms = [];
|
|
21
|
+
addAlarm(key, configure) {
|
|
22
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Sets the default origin for the distribution.
|
|
27
|
+
*
|
|
28
|
+
* Accepts a concrete {@link IOrigin} or a {@link Ref} that resolves to one
|
|
29
|
+
* at build time — enabling cross-component wiring with S3 buckets.
|
|
30
|
+
*
|
|
31
|
+
* @param origin - The origin or a Ref to one.
|
|
32
|
+
* @returns This builder for chaining.
|
|
33
|
+
*/
|
|
34
|
+
origin(origin) {
|
|
35
|
+
this.#origin = origin;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Adds an additional cache behavior for a path pattern. The behavior's
|
|
40
|
+
* origin is required (concrete or Resolvable). Any inline functions are
|
|
41
|
+
* created by the builder and receive per-behavior alarms scoped to the
|
|
42
|
+
* path pattern.
|
|
43
|
+
*
|
|
44
|
+
* @throws If a behavior for the same path pattern has already been added.
|
|
45
|
+
*/
|
|
46
|
+
behavior(pathPattern, config) {
|
|
47
|
+
if (this.#additionalBehaviors.has(pathPattern)) {
|
|
48
|
+
throw new Error(`DistributionBuilder: behavior for path pattern "${pathPattern}" is already defined.`);
|
|
49
|
+
}
|
|
50
|
+
// Alarm keys and Function construct ids are derived from a PascalCase slug
|
|
51
|
+
// of the path pattern. Patterns that differ only by stripped characters
|
|
52
|
+
// (e.g. `/*.html` vs `*.html`) would collide downstream at createAlarms() —
|
|
53
|
+
// surface the collision here with the patterns named.
|
|
54
|
+
const slug = (0, behavior_function_alarms_js_1.pathPatternSlug)(pathPattern);
|
|
55
|
+
const existingPattern = this.#behaviorSlugs.get(slug);
|
|
56
|
+
if (existingPattern !== undefined) {
|
|
57
|
+
throw new Error(`DistributionBuilder: path pattern "${pathPattern}" produces the same alarm/construct ` +
|
|
58
|
+
`slug ("${slug}") as "${existingPattern}". Pick distinct patterns.`);
|
|
59
|
+
}
|
|
60
|
+
this.#behaviorSlugs.set(slug, pathPattern);
|
|
61
|
+
this.#additionalBehaviors.set(pathPattern, config);
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/** @internal — see ADR-0005. */
|
|
65
|
+
[core_1.COPY_STATE](target) {
|
|
66
|
+
target.#origin = this.#origin;
|
|
67
|
+
for (const [k, v] of this.#additionalBehaviors)
|
|
68
|
+
target.#additionalBehaviors.set(k, v);
|
|
69
|
+
for (const [k, v] of this.#behaviorSlugs)
|
|
70
|
+
target.#behaviorSlugs.set(k, v);
|
|
71
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
72
|
+
}
|
|
73
|
+
build(scope, id, context) {
|
|
74
|
+
const resolvedOrigin = this.#origin ? (0, core_1.resolve)(this.#origin, context ?? {}) : undefined;
|
|
75
|
+
if (!resolvedOrigin) {
|
|
76
|
+
throw new Error(`DistributionBuilder "${id}" requires an origin. ` +
|
|
77
|
+
`Call .origin() with an IOrigin or a Ref to one.`);
|
|
78
|
+
}
|
|
79
|
+
const { accessLogs, certificate, defaultBehavior: userBehavior, recommendedAlarms: alarmConfig, ...distProps } = this.props;
|
|
80
|
+
const resolvedCertificate = certificate ? (0, core_1.resolve)(certificate, context ?? {}) : undefined;
|
|
81
|
+
const { accessLogs: defaultAccessLogs, defaultBehavior: defaultBehaviorDefaults, ...cdkDefaults } = defaults_js_1.DISTRIBUTION_DEFAULTS;
|
|
82
|
+
const cfg = accessLogs ?? defaultAccessLogs;
|
|
83
|
+
const { accessLogsBucket, accessLogProps } = resolveAccessLogs(scope, id, cfg);
|
|
84
|
+
const behaviors = (0, resolve_behaviors_js_1.resolveBehaviors)({
|
|
85
|
+
scope,
|
|
86
|
+
id,
|
|
87
|
+
context: context ?? {},
|
|
88
|
+
defaultOrigin: resolvedOrigin,
|
|
89
|
+
defaultBehavior: userBehavior,
|
|
90
|
+
defaultBehaviorDefaults: defaultBehaviorDefaults ?? {},
|
|
91
|
+
additionalBehaviors: this.#additionalBehaviors,
|
|
92
|
+
});
|
|
93
|
+
const mergedProps = {
|
|
94
|
+
...cdkDefaults,
|
|
95
|
+
...accessLogProps,
|
|
96
|
+
...distProps,
|
|
97
|
+
...(resolvedCertificate ? { certificate: resolvedCertificate } : {}),
|
|
98
|
+
defaultBehavior: behaviors.defaultBehavior,
|
|
99
|
+
...(Object.keys(behaviors.additionalBehaviors).length > 0
|
|
100
|
+
? { additionalBehaviors: behaviors.additionalBehaviors }
|
|
101
|
+
: {}),
|
|
102
|
+
};
|
|
103
|
+
const distribution = new aws_cloudfront_1.Distribution(scope, id, mergedProps);
|
|
104
|
+
// Ensure CloudFront is deleted before the access logs bucket during stack teardown.
|
|
105
|
+
// Without this, CloudFront may still be writing logs while the bucket is being emptied/deleted.
|
|
106
|
+
if (accessLogsBucket) {
|
|
107
|
+
distribution.node.addDependency(accessLogsBucket);
|
|
108
|
+
}
|
|
109
|
+
const alarms = (0, cloudfront_alarm_builder_js_1.buildCloudFrontAlarms)(scope, id, { distribution, functions: behaviors.functions }, { recommendedAlarms: alarmConfig, customAlarms: this.#customAlarms });
|
|
110
|
+
return {
|
|
111
|
+
distribution,
|
|
112
|
+
accessLogsBucket,
|
|
113
|
+
functions: behaviors.functions,
|
|
114
|
+
alarms,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Creates a new {@link IDistributionBuilder} for configuring a CloudFront distribution.
|
|
120
|
+
*
|
|
121
|
+
* This is the entry point for defining a CloudFront distribution component.
|
|
122
|
+
* The returned builder exposes every {@link DistributionBuilderProps} property
|
|
123
|
+
* as a fluent setter/getter, plus {@link IDistributionBuilder.origin | origin()}
|
|
124
|
+
* for setting the default origin with Ref support and
|
|
125
|
+
* {@link IDistributionBuilder.behavior | behavior()} for path-pattern behaviors.
|
|
126
|
+
* It implements {@link Lifecycle} for use with {@link compose}.
|
|
127
|
+
*
|
|
128
|
+
* @returns A fluent builder for a CloudFront distribution.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* const cdn = createDistributionBuilder()
|
|
133
|
+
* .origin(ref<BucketBuilderResult>("site", (r) =>
|
|
134
|
+
* S3BucketOrigin.withOriginAccessControl(r.bucket)))
|
|
135
|
+
* .defaultBehavior({
|
|
136
|
+
* functions: [{
|
|
137
|
+
* eventType: FunctionEventType.VIEWER_REQUEST,
|
|
138
|
+
* code: FunctionCode.fromFile({ filePath: "src/edge/rewrite.js" }),
|
|
139
|
+
* }],
|
|
140
|
+
* })
|
|
141
|
+
* .behavior("/api/*", {
|
|
142
|
+
* origin: apiOrigin,
|
|
143
|
+
* cachePolicy: CachePolicy.CACHING_DISABLED,
|
|
144
|
+
* });
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
function createDistributionBuilder() {
|
|
148
|
+
return (0, cloudformation_1.taggedBuilder)(DistributionBuilder);
|
|
149
|
+
}
|
|
150
|
+
function resolveAccessLogs(scope, id, cfg) {
|
|
151
|
+
if (cfg === false || cfg === undefined) {
|
|
152
|
+
return { accessLogProps: {} };
|
|
153
|
+
}
|
|
154
|
+
const extras = {
|
|
155
|
+
...(cfg.prefix !== undefined ? { logFilePrefix: cfg.prefix } : {}),
|
|
156
|
+
...(cfg.includeCookies !== undefined ? { logIncludesCookies: cfg.includeCookies } : {}),
|
|
157
|
+
};
|
|
158
|
+
if (cfg.destination !== undefined) {
|
|
159
|
+
if (cfg.configure !== undefined) {
|
|
160
|
+
throw new Error("accessLogs: 'configure' cannot be combined with 'destination' — " +
|
|
161
|
+
"the destination bucket is user-managed and not built by this builder.");
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
accessLogProps: {
|
|
165
|
+
enableLogging: true,
|
|
166
|
+
logBucket: cfg.destination,
|
|
167
|
+
...extras,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
let subBuilder = (0, s3_1.createBucketBuilder)()
|
|
172
|
+
.serverAccessLogs(false)
|
|
173
|
+
.versioned(false)
|
|
174
|
+
// CloudFront standard logging writes via ACLs, which requires BucketOwnerPreferred.
|
|
175
|
+
.objectOwnership(aws_s3_1.ObjectOwnership.BUCKET_OWNER_PREFERRED)
|
|
176
|
+
.removalPolicy(aws_cdk_lib_1.RemovalPolicy.RETAIN)
|
|
177
|
+
.lifecycleRules(s3_1.DEFAULT_ACCESS_LOG_BUCKET_LIFECYCLE_RULES);
|
|
178
|
+
if (cfg.configure) {
|
|
179
|
+
subBuilder = cfg.configure(subBuilder);
|
|
180
|
+
}
|
|
181
|
+
const accessLogsBucket = subBuilder.build(scope, `${id}AccessLogs`).bucket;
|
|
182
|
+
return {
|
|
183
|
+
accessLogsBucket,
|
|
184
|
+
accessLogProps: {
|
|
185
|
+
enableLogging: true,
|
|
186
|
+
logBucket: accessLogsBucket,
|
|
187
|
+
...extras,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=distribution-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribution-builder.js","sourceRoot":"","sources":["../../src/distribution-builder.ts"],"names":[],"mappings":";;AAwgBA,8DAEC;AA1gBD,+DAWoC;AAGpC,+CAAgF;AAChF,6CAA4C;AAE5C,6CAA0F;AAC1F,iEAAkF;AAClF,yDAAkE;AAClE,yCAI0B;AAE1B,+CAAsD;AACtD,iEAA0D;AAC1D,+EAAgE;AAChE,+EAAsE;AA4TtE,MAAM,mBAAmB;IACvB,KAAK,GAAsC,EAAE,CAAC;IAC9C,OAAO,CAAuB;IACrB,oBAAoB,GAAG,IAAI,GAAG,EAAoC,CAAC;IACnE,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,aAAa,GAA2C,EAAE,CAAC;IAEpE,QAAQ,CACN,GAAW,EACX,SAEyC;QAEzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,mCAAsB,CAAe,GAAG,CAAC,CAAC,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,MAA2B;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAmB,EAAE,MAAgC;QAC5D,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,mDAAmD,WAAW,uBAAuB,CACtF,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,wEAAwE;QACxE,4EAA4E;QAC5E,sDAAsD;QACtD,MAAM,IAAI,GAAG,IAAA,6CAAe,EAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,sCAAsC,WAAW,sCAAsC;gBACrF,UAAU,IAAI,UAAU,eAAe,4BAA4B,CACtE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAA2B;QACtC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB;YAAE,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc;YAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CACH,KAAiB,EACjB,EAAU,EACV,OAAgC;QAEhC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,wBAAwB,EAAE,wBAAwB;gBAChD,iDAAiD,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,EACJ,UAAU,EACV,WAAW,EACX,eAAe,EAAE,YAAY,EAC7B,iBAAiB,EAAE,WAAW,EAC9B,GAAG,SAAS,EACb,GAAG,IAAI,CAAC,KAAK,CAAC;QACf,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,MAAM,EACJ,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,uBAAuB,EACxC,GAAG,WAAW,EACf,GAAG,mCAAqB,CAAC;QAC1B,MAAM,GAAG,GAAG,UAAU,IAAI,iBAAiB,CAAC;QAE5C,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAA,uCAAgB,EAAC;YACjC,KAAK;YACL,EAAE;YACF,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,aAAa,EAAE,cAAc;YAC7B,eAAe,EAAE,YAAY;YAC7B,uBAAuB,EAAE,uBAAuB,IAAI,EAAE;YACtD,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;SAC/C,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG;YAClB,GAAG,WAAW;YACd,GAAG,cAAc;YACjB,GAAG,SAAS;YACZ,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,GAAG,CAAC;gBACvD,CAAC,CAAC,EAAE,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,EAAE;gBACxD,CAAC,CAAC,EAAE,CAAC;SACa,CAAC;QAEvB,MAAM,YAAY,GAAG,IAAI,6BAAY,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAE9D,oFAAoF;QACpF,gGAAgG;QAChG,IAAI,gBAAgB,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,mDAAqB,EAClC,KAAK,EACL,EAAE,EACF,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAChD,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,CACrE,CAAC;QAEF,OAAO;YACL,YAAY;YACZ,gBAAgB;YAChB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,yBAAyB;IACvC,OAAO,IAAA,8BAAa,EAAgD,mBAAmB,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAiB,EACjB,EAAU,EACV,GAAiC;IAOjC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC;IAEF,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,kEAAkE;gBAChE,uEAAuE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO;YACL,cAAc,EAAE;gBACd,aAAa,EAAE,IAAI;gBACnB,SAAS,EAAE,GAAG,CAAC,WAAW;gBAC1B,GAAG,MAAM;aACV;SACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,GAAG,IAAA,wBAAmB,GAAE;SACnC,gBAAgB,CAAC,KAAK,CAAC;SACvB,SAAS,CAAC,KAAK,CAAC;QACjB,oFAAoF;SACnF,eAAe,CAAC,wBAAe,CAAC,sBAAsB,CAAC;SACvD,aAAa,CAAC,2BAAa,CAAC,MAAM,CAAC;SACnC,cAAc,CAAC,8CAAyC,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC;IAE3E,OAAO;QACL,gBAAgB;QAChB,cAAc,EAAE;YACd,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,gBAAgB;YAC3B,GAAG,MAAM;SACV;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FUNCTION_ALARM_DEFAULTS = exports.DISTRIBUTION_ALARM_DEFAULTS = exports.INLINE_FUNCTION_DEFAULTS = exports.DISTRIBUTION_DEFAULTS = exports.createCloudFrontAlarmBuilder = exports.createDistributionBuilder = void 0;
|
|
4
|
+
var distribution_builder_js_1 = require("./distribution-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createDistributionBuilder", { enumerable: true, get: function () { return distribution_builder_js_1.createDistributionBuilder; } });
|
|
6
|
+
var cloudfront_alarm_builder_js_1 = require("./cloudfront-alarm-builder.js");
|
|
7
|
+
Object.defineProperty(exports, "createCloudFrontAlarmBuilder", { enumerable: true, get: function () { return cloudfront_alarm_builder_js_1.createCloudFrontAlarmBuilder; } });
|
|
8
|
+
var defaults_js_1 = require("./defaults.js");
|
|
9
|
+
Object.defineProperty(exports, "DISTRIBUTION_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.DISTRIBUTION_DEFAULTS; } });
|
|
10
|
+
Object.defineProperty(exports, "INLINE_FUNCTION_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.INLINE_FUNCTION_DEFAULTS; } });
|
|
11
|
+
var alarm_defaults_js_1 = require("./alarm-defaults.js");
|
|
12
|
+
Object.defineProperty(exports, "DISTRIBUTION_ALARM_DEFAULTS", { enumerable: true, get: function () { return alarm_defaults_js_1.DISTRIBUTION_ALARM_DEFAULTS; } });
|
|
13
|
+
Object.defineProperty(exports, "FUNCTION_ALARM_DEFAULTS", { enumerable: true, get: function () { return alarm_defaults_js_1.FUNCTION_ALARM_DEFAULTS; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qEASmC;AARjC,oIAAA,yBAAyB,OAAA;AAS3B,6EAKuC;AAJrC,2IAAA,4BAA4B,OAAA;AAK9B,6CAAgF;AAAvE,oHAAA,qBAAqB,OAAA;AAAE,uHAAA,wBAAwB,OAAA;AAExD,yDAA2F;AAAlF,gIAAA,2BAA2B,OAAA;AAAE,4HAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-behaviors.d.ts","sourceRoot":"","sources":["../../src/resolve-behaviors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAKpB,KAAK,OAAO,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,KAAK,EAAE,UAAU,CAAC;IAElB,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IAEX,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,aAAa,EAAE,OAAO,CAAC;IAEvB,gEAAgE;IAChE,eAAe,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAEnD,0EAA0E;IAC1E,uBAAuB,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAErD;;;OAGG;IACH,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,eAAe,EAAE,eAAe,CAAC;IAEjC,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAErD;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAiDD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CA0DrF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveBehaviors = resolveBehaviors;
|
|
4
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const behavior_function_alarms_js_1 = require("./behavior-function-alarms.js");
|
|
7
|
+
const defaults_js_1 = require("./defaults.js");
|
|
8
|
+
function scopeLabel(pathPattern) {
|
|
9
|
+
return pathPattern === null ? "default behavior" : `behavior "${pathPattern}"`;
|
|
10
|
+
}
|
|
11
|
+
function behaviorIdScope(pathPattern) {
|
|
12
|
+
return pathPattern === null ? "DefaultBehavior" : `Behavior${(0, behavior_function_alarms_js_1.pathPatternSlug)(pathPattern)}`;
|
|
13
|
+
}
|
|
14
|
+
function assertUniqueEventTypes(functions, pathPattern) {
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
for (const fn of functions) {
|
|
17
|
+
if (seen.has(fn.eventType)) {
|
|
18
|
+
throw new Error(`DistributionBuilder: ${scopeLabel(pathPattern)} has multiple functions for eventType "${fn.eventType}". ` +
|
|
19
|
+
`CloudFront allows at most one function per event type per behavior.`);
|
|
20
|
+
}
|
|
21
|
+
seen.add(fn.eventType);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function omit(obj, ...keys) {
|
|
25
|
+
const skip = new Set(keys);
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
28
|
+
if (!skip.has(k))
|
|
29
|
+
out[k] = v;
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
function assertKeyValueStoreRuntime(def, pathPattern) {
|
|
34
|
+
if (!def.keyValueStore)
|
|
35
|
+
return;
|
|
36
|
+
const effectiveRuntime = def.runtime ?? defaults_js_1.INLINE_FUNCTION_DEFAULTS.runtime;
|
|
37
|
+
if (effectiveRuntime !== aws_cloudfront_1.FunctionRuntime.JS_2_0) {
|
|
38
|
+
throw new Error(`DistributionBuilder: ${scopeLabel(pathPattern)} function (${def.eventType}) uses a ` +
|
|
39
|
+
`keyValueStore, which requires FunctionRuntime.JS_2_0.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Materializes the default and additional cache behaviors into CDK-ready
|
|
44
|
+
* `BehaviorOptions`, creating any inline CloudFront Functions along the way
|
|
45
|
+
* and producing their path-scoped alarm definitions.
|
|
46
|
+
*
|
|
47
|
+
* Enforces CloudFront invariants at configure time: at most one function per
|
|
48
|
+
* event type per behavior, and `keyValueStore` requires `FunctionRuntime.JS_2_0`.
|
|
49
|
+
*/
|
|
50
|
+
function resolveBehaviors(input) {
|
|
51
|
+
const { scope, id, context, defaultOrigin, defaultBehavior, defaultBehaviorDefaults } = input;
|
|
52
|
+
const functions = {};
|
|
53
|
+
const buildInlineFunctions = (pathPattern, definitions) => {
|
|
54
|
+
if (!definitions || definitions.length === 0)
|
|
55
|
+
return [];
|
|
56
|
+
assertUniqueEventTypes(definitions, pathPattern);
|
|
57
|
+
const scopeId = behaviorIdScope(pathPattern);
|
|
58
|
+
const associations = [];
|
|
59
|
+
for (const def of definitions) {
|
|
60
|
+
assertKeyValueStoreRuntime(def, pathPattern);
|
|
61
|
+
const { eventType } = def;
|
|
62
|
+
const fnId = `${id}${scopeId}${(0, behavior_function_alarms_js_1.eventTypePascal)(eventType)}Fn`;
|
|
63
|
+
const fn = new aws_cloudfront_1.Function(scope, fnId, {
|
|
64
|
+
...defaults_js_1.INLINE_FUNCTION_DEFAULTS,
|
|
65
|
+
...omit(def, "eventType", "recommendedAlarms"),
|
|
66
|
+
});
|
|
67
|
+
functions[(0, behavior_function_alarms_js_1.behaviorFunctionKeyPrefix)(pathPattern, eventType)] = {
|
|
68
|
+
function: fn,
|
|
69
|
+
pathPattern,
|
|
70
|
+
eventType,
|
|
71
|
+
recommendedAlarms: def.recommendedAlarms,
|
|
72
|
+
};
|
|
73
|
+
associations.push({ function: fn, eventType });
|
|
74
|
+
}
|
|
75
|
+
return associations;
|
|
76
|
+
};
|
|
77
|
+
const defaultAssociations = buildInlineFunctions(null, defaultBehavior?.functions);
|
|
78
|
+
const userDefaultBehavior = omit(defaultBehavior ?? {}, "functions");
|
|
79
|
+
const resolvedDefaultBehavior = {
|
|
80
|
+
...defaultBehaviorDefaults,
|
|
81
|
+
...userDefaultBehavior,
|
|
82
|
+
...(defaultAssociations.length > 0 ? { functionAssociations: defaultAssociations } : {}),
|
|
83
|
+
origin: defaultOrigin,
|
|
84
|
+
};
|
|
85
|
+
const resolvedAdditionalBehaviors = {};
|
|
86
|
+
for (const [pathPattern, config] of input.additionalBehaviors) {
|
|
87
|
+
const resolvedOrigin = (0, core_1.resolve)(config.origin, context);
|
|
88
|
+
const associations = buildInlineFunctions(pathPattern, config.functions);
|
|
89
|
+
resolvedAdditionalBehaviors[pathPattern] = {
|
|
90
|
+
...omit(config, "functions", "origin"),
|
|
91
|
+
origin: resolvedOrigin,
|
|
92
|
+
...(associations.length > 0 ? { functionAssociations: associations } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
defaultBehavior: resolvedDefaultBehavior,
|
|
97
|
+
additionalBehaviors: resolvedAdditionalBehaviors,
|
|
98
|
+
functions,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=resolve-behaviors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-behaviors.js","sourceRoot":"","sources":["../../src/resolve-behaviors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AlarmConfig } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which recommended alarms are created for a CloudFront distribution.
|
|
4
|
+
* All applicable alarms are enabled by default with AWS-recommended thresholds.
|
|
5
|
+
* Set individual alarms to `false` to disable them, or provide an
|
|
6
|
+
* {@link AlarmConfig} to tune thresholds.
|
|
7
|
+
*
|
|
8
|
+
* Function-level alarms are created automatically for every inline function
|
|
9
|
+
* declared on a behavior — see {@link FunctionAlarmConfig} to tune them.
|
|
10
|
+
*
|
|
11
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#CloudFront
|
|
12
|
+
*/
|
|
13
|
+
export interface DistributionAlarmConfig {
|
|
14
|
+
/**
|
|
15
|
+
* Master switch: set to `false` to disable all recommended alarms.
|
|
16
|
+
* Individual alarms can also be disabled via their own entry.
|
|
17
|
+
* @default true
|
|
18
|
+
*/
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Alarm when the distribution's 5xx error rate is elevated.
|
|
22
|
+
*
|
|
23
|
+
* Metric: `AWS/CloudFront 5xxErrorRate`, statistic Average, period 1 minute.
|
|
24
|
+
* Default threshold: > 5 (5% error rate).
|
|
25
|
+
*
|
|
26
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#CloudFront
|
|
27
|
+
*/
|
|
28
|
+
errorRate?: AlarmConfig | false;
|
|
29
|
+
/**
|
|
30
|
+
* Alarm when origin response latency is elevated.
|
|
31
|
+
*
|
|
32
|
+
* Metric: `AWS/CloudFront OriginLatency`, statistic p90, period 1 minute.
|
|
33
|
+
* Default threshold: > 5000ms (5 seconds).
|
|
34
|
+
*
|
|
35
|
+
* Requires [additional CloudFront metrics](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/viewing-cloudfront-metrics.html#monitoring-console.distributions-additional)
|
|
36
|
+
* to be enabled on the distribution for this alarm to receive data.
|
|
37
|
+
* With the default `treatMissingData: NOT_BREACHING`, the alarm will
|
|
38
|
+
* not fire when additional metrics are not enabled.
|
|
39
|
+
*
|
|
40
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#CloudFront
|
|
41
|
+
*/
|
|
42
|
+
originLatency?: AlarmConfig | false;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Controls which recommended alarms are created for a CloudFront Function
|
|
46
|
+
* declared inline on a cache behavior. All alarms are enabled by default
|
|
47
|
+
* with AWS-recommended thresholds. Set individual alarms to `false` to
|
|
48
|
+
* disable them, or provide an {@link AlarmConfig} to tune thresholds.
|
|
49
|
+
*
|
|
50
|
+
* CloudFront Function metrics are emitted in the `us-east-1` region only
|
|
51
|
+
* (CloudFront is a global service). The alarms live in the stack's region —
|
|
52
|
+
* if that is not `us-east-1`, the alarms will not receive data.
|
|
53
|
+
*
|
|
54
|
+
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/monitoring-functions.html
|
|
55
|
+
*/
|
|
56
|
+
export interface FunctionAlarmConfig {
|
|
57
|
+
/**
|
|
58
|
+
* Per-function switch: set to `false` to disable all recommended alarms
|
|
59
|
+
* for this one function. Individual alarms can also be disabled via their
|
|
60
|
+
* own entry. The global kill switch is
|
|
61
|
+
* {@link DistributionBuilderProps.recommendedAlarms} `: false` on the
|
|
62
|
+
* surrounding distribution builder, which suppresses every recommended
|
|
63
|
+
* alarm regardless of per-function settings.
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
66
|
+
enabled?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Alarm when the function raises runtime exceptions while processing a
|
|
69
|
+
* viewer request or response.
|
|
70
|
+
*
|
|
71
|
+
* Metric: `AWS/CloudFront FunctionExecutionErrors`, statistic Sum,
|
|
72
|
+
* period 1 minute. Default threshold: > 0 errors.
|
|
73
|
+
*
|
|
74
|
+
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/monitoring-functions.html
|
|
75
|
+
*/
|
|
76
|
+
executionErrors?: AlarmConfig | false;
|
|
77
|
+
/**
|
|
78
|
+
* Alarm when the function returns an event object that fails validation
|
|
79
|
+
* (e.g. malformed headers, unsupported response shape).
|
|
80
|
+
*
|
|
81
|
+
* Metric: `AWS/CloudFront FunctionValidationErrors`, statistic Sum,
|
|
82
|
+
* period 1 minute. Default threshold: > 0 errors.
|
|
83
|
+
*
|
|
84
|
+
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/monitoring-functions.html
|
|
85
|
+
*/
|
|
86
|
+
validationErrors?: AlarmConfig | false;
|
|
87
|
+
/**
|
|
88
|
+
* Alarm when the function is throttled — typically because it exceeded
|
|
89
|
+
* the 1ms compute-utilization budget.
|
|
90
|
+
*
|
|
91
|
+
* Metric: `AWS/CloudFront FunctionThrottles`, statistic Sum,
|
|
92
|
+
* period 1 minute. Default threshold: > 0 throttles.
|
|
93
|
+
*
|
|
94
|
+
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-function-restrictions.html
|
|
95
|
+
*/
|
|
96
|
+
throttles?: AlarmConfig | false;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=alarm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-config.d.ts","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEhC;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEtC;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEvC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
|
|
2
|
+
interface DistributionAlarmDefaults {
|
|
3
|
+
enabled: true;
|
|
4
|
+
errorRate: AlarmConfigDefaults;
|
|
5
|
+
originLatency: AlarmConfigDefaults;
|
|
6
|
+
}
|
|
7
|
+
interface FunctionAlarmDefaults {
|
|
8
|
+
enabled: true;
|
|
9
|
+
executionErrors: AlarmConfigDefaults;
|
|
10
|
+
validationErrors: AlarmConfigDefaults;
|
|
11
|
+
throttles: AlarmConfigDefaults;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* AWS-recommended default alarm configuration for CloudFront distributions.
|
|
15
|
+
*
|
|
16
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#CloudFront
|
|
17
|
+
*/
|
|
18
|
+
export declare const DISTRIBUTION_ALARM_DEFAULTS: DistributionAlarmDefaults;
|
|
19
|
+
/**
|
|
20
|
+
* Default alarm configuration for CloudFront Functions declared inline on
|
|
21
|
+
* a cache behavior. Any non-zero count of errors or throttles is worth
|
|
22
|
+
* investigating since a function executes on every viewer request/response.
|
|
23
|
+
*
|
|
24
|
+
* @see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/monitoring-functions.html
|
|
25
|
+
*/
|
|
26
|
+
export declare const FUNCTION_ALARM_DEFAULTS: FunctionAlarmDefaults;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=alarm-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,yBAAyB;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,mBAAmB,CAAC;CACpC;AAED,UAAU,qBAAqB;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,mBAAmB,CAAC;IACrC,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,yBAyBzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,qBA0BrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-defaults.js","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAgB9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAA8B;IACpE,OAAO,EAAE,IAAI;IAEb;;;OAGG;IACH,SAAS,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;OAIG;IACH,aAAa,EAAE;QACb,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,OAAO,EAAE,IAAI;IAEb,8EAA8E;IAC9E,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED,qFAAqF;IACrF,gBAAgB,EAAE;QAChB,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED,wFAAwF;IACxF,SAAS,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Function as CfFunction, FunctionEventType } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import type { AlarmDefinition } from "@composurecdk/cloudwatch";
|
|
3
|
+
import type { FunctionAlarmConfig } from "./alarm-config.js";
|
|
4
|
+
/**
|
|
5
|
+
* Converts a CloudFront cache-behavior path pattern into a PascalCase slug
|
|
6
|
+
* suitable for alarm keys and CDK construct ids. A single leading `/` is
|
|
7
|
+
* dropped (the common case), interior `/` becomes `Slash` so sibling patterns
|
|
8
|
+
* don't collide, `*` becomes `Star`, and `?` becomes `Q`. Other
|
|
9
|
+
* non-alphanumeric characters are stripped.
|
|
10
|
+
*
|
|
11
|
+
* Examples:
|
|
12
|
+
* - `/api/*` → `ApiSlashStar`
|
|
13
|
+
* - `/api*` → `ApiStar` (distinct from `/api/*`)
|
|
14
|
+
* - `*.html` → `StarHtml`
|
|
15
|
+
* - `images/*` → `ImagesSlashStar`
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function pathPatternSlug(pattern: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Converts a {@link FunctionEventType} value (e.g. `"viewer-request"`) into
|
|
22
|
+
* PascalCase (e.g. `"ViewerRequest"`) for use in alarm keys and construct ids.
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export declare function eventTypePascal(eventType: FunctionEventType): string;
|
|
27
|
+
/**
|
|
28
|
+
* Builds the prefix used for every alarm key produced for a given inline
|
|
29
|
+
* function — e.g. `defaultBehaviorViewerRequest` or `behaviorApiStarViewerRequest`.
|
|
30
|
+
* Pass `null` for the default behavior.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export declare function behaviorFunctionKeyPrefix(pathPattern: string | null, eventType: FunctionEventType): string;
|
|
35
|
+
/**
|
|
36
|
+
* Produces fully-resolved {@link AlarmDefinition}s for the three AWS-recommended
|
|
37
|
+
* CloudFront Function alarms — execution errors, validation errors, throttles —
|
|
38
|
+
* scoped to a single behavior + event type so the keys and descriptions stay
|
|
39
|
+
* actionable when the same underlying function is used on multiple behaviors.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveBehaviorFunctionAlarmDefinitions(pathPattern: string | null, eventType: FunctionEventType, fn: CfFunction, config: FunctionAlarmConfig | false | undefined): AlarmDefinition[];
|
|
44
|
+
//# sourceMappingURL=behavior-function-alarms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior-function-alarms.d.ts","sourceRoot":"","sources":["../../src/behavior-function-alarms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,IAAI,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA0B7D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAKpE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,SAAS,EAAE,iBAAiB,GAC3B,MAAM,CAIR;AAUD;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAC9C,eAAe,EAAE,CA4DnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior-function-alarms.js","sourceRoot":"","sources":["../../src/behavior-function-alarms.ts"],"names":[],"mappings":"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"}
|