@composurecdk/route53 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/README.md +54 -4
- package/dist/commonjs/a-record-builder.d.ts.map +1 -0
- package/dist/commonjs/a-record-builder.js +38 -0
- package/dist/commonjs/a-record-builder.js.map +1 -0
- package/dist/commonjs/aaaa-record-builder.d.ts.map +1 -0
- package/dist/commonjs/aaaa-record-builder.js +39 -0
- package/dist/commonjs/aaaa-record-builder.js.map +1 -0
- package/dist/commonjs/alias-targets.d.ts.map +1 -0
- package/dist/commonjs/alias-targets.js +50 -0
- package/dist/commonjs/alias-targets.js.map +1 -0
- package/dist/commonjs/caa-record-builder.d.ts.map +1 -0
- package/dist/commonjs/caa-record-builder.js +37 -0
- package/dist/commonjs/caa-record-builder.js.map +1 -0
- package/dist/commonjs/cname-record-builder.d.ts.map +1 -0
- package/dist/commonjs/cname-record-builder.js +43 -0
- package/dist/commonjs/cname-record-builder.js.map +1 -0
- package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +30 -4
- package/dist/commonjs/defaults.d.ts.map +1 -0
- package/dist/commonjs/defaults.js +159 -0
- package/dist/commonjs/defaults.js.map +1 -0
- package/dist/commonjs/ds-record-builder.d.ts.map +1 -0
- package/dist/commonjs/ds-record-builder.js +37 -0
- package/dist/commonjs/ds-record-builder.js.map +1 -0
- package/dist/commonjs/health-check-alarm-builder.d.ts.map +1 -0
- package/dist/commonjs/health-check-alarm-builder.js +136 -0
- package/dist/commonjs/health-check-alarm-builder.js.map +1 -0
- package/dist/commonjs/health-check-alarm-config.d.ts.map +1 -0
- package/dist/commonjs/health-check-alarm-config.js +3 -0
- package/dist/commonjs/health-check-alarm-config.js.map +1 -0
- package/dist/commonjs/health-check-alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/health-check-alarm-defaults.js +29 -0
- package/dist/commonjs/health-check-alarm-defaults.js.map +1 -0
- package/dist/commonjs/health-check-alarms.d.ts.map +1 -0
- package/dist/commonjs/health-check-alarms.js +45 -0
- package/dist/commonjs/health-check-alarms.js.map +1 -0
- package/dist/commonjs/health-check-builder.d.ts.map +1 -0
- package/dist/commonjs/health-check-builder.js +56 -0
- package/dist/commonjs/health-check-builder.js.map +1 -0
- package/dist/{hosted-zone-builder.d.ts → commonjs/hosted-zone-builder.d.ts} +26 -7
- package/dist/commonjs/hosted-zone-builder.d.ts.map +1 -0
- package/dist/commonjs/hosted-zone-builder.js +60 -0
- package/dist/commonjs/hosted-zone-builder.js.map +1 -0
- package/dist/commonjs/https-record-builder.d.ts.map +1 -0
- package/dist/commonjs/https-record-builder.js +45 -0
- package/dist/commonjs/https-record-builder.js.map +1 -0
- package/dist/{index.d.ts → commonjs/index.d.ts} +2 -1
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +54 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/mx-record-builder.d.ts.map +1 -0
- package/dist/commonjs/mx-record-builder.js +37 -0
- package/dist/commonjs/mx-record-builder.js.map +1 -0
- package/dist/commonjs/ns-record-builder.d.ts.map +1 -0
- package/dist/commonjs/ns-record-builder.js +42 -0
- package/dist/commonjs/ns-record-builder.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/query-logging.d.ts +60 -0
- package/dist/commonjs/query-logging.d.ts.map +1 -0
- package/dist/commonjs/query-logging.js +136 -0
- package/dist/commonjs/query-logging.js.map +1 -0
- package/dist/commonjs/srv-record-builder.d.ts.map +1 -0
- package/dist/commonjs/srv-record-builder.js +37 -0
- package/dist/commonjs/srv-record-builder.js.map +1 -0
- package/dist/commonjs/svcb-record-builder.d.ts.map +1 -0
- package/dist/commonjs/svcb-record-builder.js +38 -0
- package/dist/commonjs/svcb-record-builder.js.map +1 -0
- package/dist/commonjs/txt-record-builder.d.ts.map +1 -0
- package/dist/commonjs/txt-record-builder.js +37 -0
- package/dist/commonjs/txt-record-builder.js.map +1 -0
- package/dist/commonjs/zone/index.d.ts.map +1 -0
- package/dist/commonjs/zone/index.js +23 -0
- package/dist/commonjs/zone/index.js.map +1 -0
- package/dist/commonjs/zone/zone-dsl.d.ts.map +1 -0
- package/dist/commonjs/zone/zone-dsl.js +247 -0
- package/dist/commonjs/zone/zone-dsl.js.map +1 -0
- package/dist/commonjs/zone/zone-records.d.ts.map +1 -0
- package/dist/commonjs/zone/zone-records.js +322 -0
- package/dist/commonjs/zone/zone-records.js.map +1 -0
- package/dist/esm/a-record-builder.d.ts +56 -0
- package/dist/esm/a-record-builder.d.ts.map +1 -0
- package/dist/esm/a-record-builder.js.map +1 -0
- package/dist/esm/aaaa-record-builder.d.ts +44 -0
- package/dist/esm/aaaa-record-builder.d.ts.map +1 -0
- package/dist/esm/aaaa-record-builder.js.map +1 -0
- package/dist/esm/alias-targets.d.ts +34 -0
- package/dist/esm/alias-targets.d.ts.map +1 -0
- package/dist/esm/alias-targets.js.map +1 -0
- package/dist/esm/caa-record-builder.d.ts +44 -0
- package/dist/esm/caa-record-builder.d.ts.map +1 -0
- package/dist/esm/caa-record-builder.js.map +1 -0
- package/dist/esm/cname-record-builder.d.ts +42 -0
- package/dist/esm/cname-record-builder.d.ts.map +1 -0
- package/dist/esm/cname-record-builder.js.map +1 -0
- package/dist/esm/defaults.d.ts +119 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/{defaults.js → esm/defaults.js} +37 -4
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/ds-record-builder.d.ts +42 -0
- package/dist/esm/ds-record-builder.d.ts.map +1 -0
- package/dist/esm/ds-record-builder.js.map +1 -0
- package/dist/esm/health-check-alarm-builder.d.ts +133 -0
- package/dist/esm/health-check-alarm-builder.d.ts.map +1 -0
- package/dist/esm/health-check-alarm-builder.js.map +1 -0
- package/dist/esm/health-check-alarm-config.d.ts +39 -0
- package/dist/esm/health-check-alarm-config.d.ts.map +1 -0
- package/dist/esm/health-check-alarm-config.js.map +1 -0
- package/dist/esm/health-check-alarm-defaults.d.ts +13 -0
- package/dist/esm/health-check-alarm-defaults.d.ts.map +1 -0
- package/dist/esm/health-check-alarm-defaults.js.map +1 -0
- package/dist/esm/health-check-alarms.d.ts +15 -0
- package/dist/esm/health-check-alarms.d.ts.map +1 -0
- package/dist/esm/health-check-alarms.js.map +1 -0
- package/dist/esm/health-check-builder.d.ts +103 -0
- package/dist/esm/health-check-builder.d.ts.map +1 -0
- package/dist/esm/health-check-builder.js.map +1 -0
- package/dist/esm/hosted-zone-builder.d.ts +95 -0
- package/dist/esm/hosted-zone-builder.d.ts.map +1 -0
- package/dist/{hosted-zone-builder.js → esm/hosted-zone-builder.js} +11 -3
- package/dist/esm/hosted-zone-builder.js.map +1 -0
- package/dist/esm/https-record-builder.d.ts +45 -0
- package/dist/esm/https-record-builder.d.ts.map +1 -0
- package/dist/esm/https-record-builder.js.map +1 -0
- package/dist/esm/index.d.ts +20 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/{index.js → esm/index.js} +1 -1
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mx-record-builder.d.ts +40 -0
- package/dist/esm/mx-record-builder.d.ts.map +1 -0
- package/dist/esm/mx-record-builder.js.map +1 -0
- package/dist/esm/ns-record-builder.d.ts +40 -0
- package/dist/esm/ns-record-builder.d.ts.map +1 -0
- package/dist/esm/ns-record-builder.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/query-logging.d.ts +60 -0
- package/dist/esm/query-logging.d.ts.map +1 -0
- package/dist/esm/query-logging.js +133 -0
- package/dist/esm/query-logging.js.map +1 -0
- package/dist/esm/srv-record-builder.d.ts +40 -0
- package/dist/esm/srv-record-builder.d.ts.map +1 -0
- package/dist/esm/srv-record-builder.js.map +1 -0
- package/dist/esm/svcb-record-builder.d.ts +41 -0
- package/dist/esm/svcb-record-builder.d.ts.map +1 -0
- package/dist/esm/svcb-record-builder.js.map +1 -0
- package/dist/esm/txt-record-builder.d.ts +38 -0
- package/dist/esm/txt-record-builder.d.ts.map +1 -0
- package/dist/esm/txt-record-builder.js.map +1 -0
- package/dist/esm/zone/index.d.ts +3 -0
- package/dist/esm/zone/index.d.ts.map +1 -0
- package/dist/esm/zone/index.js.map +1 -0
- package/dist/esm/zone/zone-dsl.d.ts +296 -0
- package/dist/esm/zone/zone-dsl.d.ts.map +1 -0
- package/dist/esm/zone/zone-dsl.js.map +1 -0
- package/dist/esm/zone/zone-records.d.ts +67 -0
- package/dist/esm/zone/zone-records.d.ts.map +1 -0
- package/dist/esm/zone/zone-records.js.map +1 -0
- package/package.json +47 -21
- package/dist/a-record-builder.d.ts.map +0 -1
- package/dist/a-record-builder.js.map +0 -1
- package/dist/aaaa-record-builder.d.ts.map +0 -1
- package/dist/aaaa-record-builder.js.map +0 -1
- package/dist/alias-targets.d.ts.map +0 -1
- package/dist/alias-targets.js.map +0 -1
- package/dist/caa-record-builder.d.ts.map +0 -1
- package/dist/caa-record-builder.js.map +0 -1
- package/dist/cname-record-builder.d.ts.map +0 -1
- package/dist/cname-record-builder.js.map +0 -1
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/ds-record-builder.d.ts.map +0 -1
- package/dist/ds-record-builder.js.map +0 -1
- package/dist/health-check-alarm-builder.d.ts.map +0 -1
- package/dist/health-check-alarm-builder.js.map +0 -1
- package/dist/health-check-alarm-config.d.ts.map +0 -1
- package/dist/health-check-alarm-config.js.map +0 -1
- package/dist/health-check-alarm-defaults.d.ts.map +0 -1
- package/dist/health-check-alarm-defaults.js.map +0 -1
- package/dist/health-check-alarms.d.ts.map +0 -1
- package/dist/health-check-alarms.js.map +0 -1
- package/dist/health-check-builder.d.ts.map +0 -1
- package/dist/health-check-builder.js.map +0 -1
- package/dist/hosted-zone-builder.d.ts.map +0 -1
- package/dist/hosted-zone-builder.js.map +0 -1
- package/dist/https-record-builder.d.ts.map +0 -1
- package/dist/https-record-builder.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mx-record-builder.d.ts.map +0 -1
- package/dist/mx-record-builder.js.map +0 -1
- package/dist/ns-record-builder.d.ts.map +0 -1
- package/dist/ns-record-builder.js.map +0 -1
- package/dist/srv-record-builder.d.ts.map +0 -1
- package/dist/srv-record-builder.js.map +0 -1
- package/dist/svcb-record-builder.d.ts.map +0 -1
- package/dist/svcb-record-builder.js.map +0 -1
- package/dist/txt-record-builder.d.ts.map +0 -1
- package/dist/txt-record-builder.js.map +0 -1
- package/dist/zone/index.d.ts.map +0 -1
- package/dist/zone/index.js.map +0 -1
- package/dist/zone/zone-dsl.d.ts.map +0 -1
- package/dist/zone/zone-dsl.js.map +0 -1
- package/dist/zone/zone-records.d.ts.map +0 -1
- package/dist/zone/zone-records.js.map +0 -1
- /package/dist/{a-record-builder.d.ts → commonjs/a-record-builder.d.ts} +0 -0
- /package/dist/{aaaa-record-builder.d.ts → commonjs/aaaa-record-builder.d.ts} +0 -0
- /package/dist/{alias-targets.d.ts → commonjs/alias-targets.d.ts} +0 -0
- /package/dist/{caa-record-builder.d.ts → commonjs/caa-record-builder.d.ts} +0 -0
- /package/dist/{cname-record-builder.d.ts → commonjs/cname-record-builder.d.ts} +0 -0
- /package/dist/{ds-record-builder.d.ts → commonjs/ds-record-builder.d.ts} +0 -0
- /package/dist/{health-check-alarm-builder.d.ts → commonjs/health-check-alarm-builder.d.ts} +0 -0
- /package/dist/{health-check-alarm-config.d.ts → commonjs/health-check-alarm-config.d.ts} +0 -0
- /package/dist/{health-check-alarm-defaults.d.ts → commonjs/health-check-alarm-defaults.d.ts} +0 -0
- /package/dist/{health-check-alarms.d.ts → commonjs/health-check-alarms.d.ts} +0 -0
- /package/dist/{health-check-builder.d.ts → commonjs/health-check-builder.d.ts} +0 -0
- /package/dist/{https-record-builder.d.ts → commonjs/https-record-builder.d.ts} +0 -0
- /package/dist/{mx-record-builder.d.ts → commonjs/mx-record-builder.d.ts} +0 -0
- /package/dist/{ns-record-builder.d.ts → commonjs/ns-record-builder.d.ts} +0 -0
- /package/dist/{srv-record-builder.d.ts → commonjs/srv-record-builder.d.ts} +0 -0
- /package/dist/{svcb-record-builder.d.ts → commonjs/svcb-record-builder.d.ts} +0 -0
- /package/dist/{txt-record-builder.d.ts → commonjs/txt-record-builder.d.ts} +0 -0
- /package/dist/{zone → commonjs/zone}/index.d.ts +0 -0
- /package/dist/{zone → commonjs/zone}/zone-dsl.d.ts +0 -0
- /package/dist/{zone → commonjs/zone}/zone-records.d.ts +0 -0
- /package/dist/{a-record-builder.js → esm/a-record-builder.js} +0 -0
- /package/dist/{aaaa-record-builder.js → esm/aaaa-record-builder.js} +0 -0
- /package/dist/{alias-targets.js → esm/alias-targets.js} +0 -0
- /package/dist/{caa-record-builder.js → esm/caa-record-builder.js} +0 -0
- /package/dist/{cname-record-builder.js → esm/cname-record-builder.js} +0 -0
- /package/dist/{ds-record-builder.js → esm/ds-record-builder.js} +0 -0
- /package/dist/{health-check-alarm-builder.js → esm/health-check-alarm-builder.js} +0 -0
- /package/dist/{health-check-alarm-config.js → esm/health-check-alarm-config.js} +0 -0
- /package/dist/{health-check-alarm-defaults.js → esm/health-check-alarm-defaults.js} +0 -0
- /package/dist/{health-check-alarms.js → esm/health-check-alarms.js} +0 -0
- /package/dist/{health-check-builder.js → esm/health-check-builder.js} +0 -0
- /package/dist/{https-record-builder.js → esm/https-record-builder.js} +0 -0
- /package/dist/{mx-record-builder.js → esm/mx-record-builder.js} +0 -0
- /package/dist/{ns-record-builder.js → esm/ns-record-builder.js} +0 -0
- /package/dist/{srv-record-builder.js → esm/srv-record-builder.js} +0 -0
- /package/dist/{svcb-record-builder.js → esm/svcb-record-builder.js} +0 -0
- /package/dist/{txt-record-builder.js → esm/txt-record-builder.js} +0 -0
- /package/dist/{zone → esm/zone}/index.js +0 -0
- /package/dist/{zone → esm/zone}/zone-dsl.js +0 -0
- /package/dist/{zone → esm/zone}/zone-records.js +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildHealthCheckAlarms = buildHealthCheckAlarms;
|
|
4
|
+
exports.createHealthCheckAlarmBuilder = createHealthCheckAlarmBuilder;
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const core_1 = require("@composurecdk/core");
|
|
7
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
8
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
9
|
+
const health_check_alarms_js_1 = require("./health-check-alarms.js");
|
|
10
|
+
/**
|
|
11
|
+
* Route 53 health-check metrics are emitted in `us-east-1` only. CloudWatch
|
|
12
|
+
* alarms are regional, so alarms created in any other region will never
|
|
13
|
+
* receive data. Warn (don't error) when alarms are being created outside
|
|
14
|
+
* `us-east-1`, unless the region is an unresolved token (env-agnostic stack
|
|
15
|
+
* — user knows best).
|
|
16
|
+
*/
|
|
17
|
+
function warnIfNotUsEast1(scope) {
|
|
18
|
+
const region = aws_cdk_lib_1.Stack.of(scope).region;
|
|
19
|
+
if (aws_cdk_lib_1.Token.isUnresolved(region))
|
|
20
|
+
return;
|
|
21
|
+
if (region === "us-east-1")
|
|
22
|
+
return;
|
|
23
|
+
aws_cdk_lib_1.Annotations.of(scope).addWarningV2("@composurecdk/route53:alarm-region", `Route 53 health-check metrics are emitted in us-east-1 only, but this stack is ` +
|
|
24
|
+
`deployed in "${region}". CloudWatch alarms created here will not fire. Deploy the ` +
|
|
25
|
+
`stack in us-east-1, or use createHealthCheckAlarmBuilder() routed to a ` +
|
|
26
|
+
`us-east-1 stack via compose().withStacks().`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Shared alarm-assembly used by both {@link createHealthCheckBuilder} (in its
|
|
30
|
+
* own stack) and {@link createHealthCheckAlarmBuilder} (typically in a
|
|
31
|
+
* separate `us-east-1` stack). Materialises the recommended health-check
|
|
32
|
+
* alarm and any user-supplied custom alarms, emits the region warning if the
|
|
33
|
+
* resulting scope is not in `us-east-1`, and creates the alarm constructs.
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
function buildHealthCheckAlarms(scope, id, target, options = {}) {
|
|
38
|
+
const recommended = options.recommendedAlarms;
|
|
39
|
+
const recommendedDefs = recommended === false || recommended?.enabled === false
|
|
40
|
+
? []
|
|
41
|
+
: (0, health_check_alarms_js_1.resolveHealthCheckAlarmDefinitions)(target.healthCheck, recommended);
|
|
42
|
+
const customAlarmDefs = options.customAlarms?.map((b) => b.resolve(target.healthCheck)) ?? [];
|
|
43
|
+
const allAlarmDefs = [...recommendedDefs, ...customAlarmDefs];
|
|
44
|
+
if (allAlarmDefs.length > 0) {
|
|
45
|
+
warnIfNotUsEast1(scope);
|
|
46
|
+
}
|
|
47
|
+
return (0, cloudwatch_1.createAlarms)(scope, id, allAlarmDefs);
|
|
48
|
+
}
|
|
49
|
+
class HealthCheckAlarmBuilder {
|
|
50
|
+
props = {};
|
|
51
|
+
#healthCheck;
|
|
52
|
+
#customAlarms = [];
|
|
53
|
+
/**
|
|
54
|
+
* Sets the health check to alarm on. Pass the result of
|
|
55
|
+
* {@link createHealthCheckBuilder} (or a {@link Ref} to it). The builder
|
|
56
|
+
* reads the health check from the result.
|
|
57
|
+
*
|
|
58
|
+
* Pair with `compose().withStacks()` to route this component into a
|
|
59
|
+
* `us-east-1` stack while the health check itself lives elsewhere — set
|
|
60
|
+
* `crossRegionReferences: true` on both stacks so CDK can wire the
|
|
61
|
+
* `HealthCheckId` reference automatically.
|
|
62
|
+
*/
|
|
63
|
+
healthCheck(healthCheck) {
|
|
64
|
+
this.#healthCheck = healthCheck;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Adds a custom alarm against the health check. The configure callback
|
|
69
|
+
* receives a fresh {@link AlarmDefinitionBuilder} pre-set with the alarm's
|
|
70
|
+
* key; configure metric, threshold, comparison and any other options.
|
|
71
|
+
*
|
|
72
|
+
* The created alarm is materialised in this builder's stack — useful for
|
|
73
|
+
* cross-region setups where you want all health-check alarms to live with
|
|
74
|
+
* the recommended ones.
|
|
75
|
+
*/
|
|
76
|
+
addAlarm(key, configure) {
|
|
77
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/** @internal — see ADR-0005. */
|
|
81
|
+
[core_1.COPY_STATE](target) {
|
|
82
|
+
target.#healthCheck = this.#healthCheck;
|
|
83
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
84
|
+
}
|
|
85
|
+
build(scope, id, context) {
|
|
86
|
+
if (!this.#healthCheck) {
|
|
87
|
+
throw new Error(`HealthCheckAlarmBuilder "${id}" requires a health check. ` +
|
|
88
|
+
`Call .healthCheck() with a HealthCheckBuilderResult or a Ref to one.`);
|
|
89
|
+
}
|
|
90
|
+
const target = (0, core_1.resolve)(this.#healthCheck, context ?? {});
|
|
91
|
+
return {
|
|
92
|
+
alarms: buildHealthCheckAlarms(scope, id, target, {
|
|
93
|
+
recommendedAlarms: this.props.recommendedAlarms,
|
|
94
|
+
customAlarms: this.#customAlarms,
|
|
95
|
+
}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Creates a new {@link IHealthCheckAlarmBuilder} for materialising Route 53
|
|
101
|
+
* health-check alarms in a stack separate from the health check itself.
|
|
102
|
+
*
|
|
103
|
+
* The recommended use is multi-region deployments: the health check lives in
|
|
104
|
+
* the application's stack (in any region — Route 53 health checks are
|
|
105
|
+
* global), and the alarms must live in a `us-east-1` stack so they can read
|
|
106
|
+
* the metrics Route 53 emits there.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* compose(
|
|
111
|
+
* {
|
|
112
|
+
* api: createHealthCheckBuilder()
|
|
113
|
+
* .type(HealthCheckType.HTTPS)
|
|
114
|
+
* .fqdn("api.example.com")
|
|
115
|
+
* .recommendedAlarms(false), // suppress alarms in the api's own stack
|
|
116
|
+
*
|
|
117
|
+
* apiAlarms: createHealthCheckAlarmBuilder()
|
|
118
|
+
* .healthCheck(ref<HealthCheckBuilderResult>("api"))
|
|
119
|
+
* .recommendedAlarms({ healthCheckStatus: { evaluationPeriods: 2 } }),
|
|
120
|
+
* },
|
|
121
|
+
* { api: [], apiAlarms: ["api"] },
|
|
122
|
+
* )
|
|
123
|
+
* .withStacks({
|
|
124
|
+
* api: appStack, // any region — health checks are global
|
|
125
|
+
* apiAlarms: monitoringStack, // us-east-1 — where AWS/Route53 metrics live
|
|
126
|
+
* })
|
|
127
|
+
* .build(app, "App");
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* Set `crossRegionReferences: true` on both stacks so CDK can export the
|
|
131
|
+
* `HealthCheckId` from the app stack and import it in the alarm stack.
|
|
132
|
+
*/
|
|
133
|
+
function createHealthCheckAlarmBuilder() {
|
|
134
|
+
return (0, cloudformation_1.taggedBuilder)(HealthCheckAlarmBuilder);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=health-check-alarm-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarm-builder.js","sourceRoot":"","sources":["../../src/health-check-alarm-builder.ts"],"names":[],"mappings":";;AA8FA,wDAuBC;AAsGD,sEAIC;AA7ND,6CAAwD;AAExD,6CAA0F;AAC1F,iEAAkF;AAElF,yDAAgF;AAEhF,qEAA8E;AAwD9E;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAiB;IACzC,MAAM,MAAM,GAAG,mBAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,mBAAK,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO;IACnC,yBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,CAChC,oCAAoC,EACpC,iFAAiF;QAC/E,gBAAgB,MAAM,8DAA8D;QACpF,yEAAyE;QACzE,6CAA6C,CAChD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,KAAiB,EACjB,EAAU,EACV,MAAqD,EACrD,UAGI,EAAE;IAEN,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC9C,MAAM,eAAe,GACnB,WAAW,KAAK,KAAK,IAAI,WAAW,EAAE,OAAO,KAAK,KAAK;QACrD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAA,2DAAkC,EAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1E,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9F,MAAM,YAAY,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,eAAe,CAAC,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,IAAA,yBAAY,EAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,uBAAuB;IAC3B,KAAK,GAA0C,EAAE,CAAC;IAClD,YAAY,CAAwC;IAC3C,aAAa,GAA2C,EAAE,CAAC;IAEpE;;;;;;;;;OASG;IACH,WAAW,CAAC,WAAiD;QAC3D,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,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,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAA+B;QAC1C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACxC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CACH,KAAiB,EACjB,EAAU,EACV,OAAgC;QAEhC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,4BAA4B,EAAE,6BAA6B;gBACzD,sEAAsE,CACzE,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO;YACL,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE;gBAChD,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;gBAC/C,YAAY,EAAE,IAAI,CAAC,aAAa;aACjC,CAAC;SACH,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,6BAA6B;IAC3C,OAAO,IAAA,8BAAa,EAClB,uBAAuB,CACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarm-config.d.ts","sourceRoot":"","sources":["../../src/health-check-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAAiB,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarm-config.js","sourceRoot":"","sources":["../../src/health-check-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/health-check-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,wBAAwB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,wBAmBzC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HEALTH_CHECK_ALARM_DEFAULTS = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* AWS-recommended default alarm configuration for Route 53 health checks.
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#Route53
|
|
9
|
+
*/
|
|
10
|
+
exports.HEALTH_CHECK_ALARM_DEFAULTS = {
|
|
11
|
+
enabled: true,
|
|
12
|
+
/**
|
|
13
|
+
* Alarm when `HealthCheckStatus < 1` for one consecutive 1-minute period.
|
|
14
|
+
* The metric is 0 (unhealthy) or 1 (healthy) per Route 53 checker, so the
|
|
15
|
+
* `Minimum` statistic surfaces "at least one checker reports unhealthy."
|
|
16
|
+
*
|
|
17
|
+
* `treatMissingData: breaching` matches AWS's recommendation — missing
|
|
18
|
+
* datapoints are treated as unhealthy. This guards against situations
|
|
19
|
+
* where the metric stops emitting (e.g. health check deletion) while the
|
|
20
|
+
* downstream system still depends on it.
|
|
21
|
+
*/
|
|
22
|
+
healthCheckStatus: {
|
|
23
|
+
threshold: 1,
|
|
24
|
+
evaluationPeriods: 1,
|
|
25
|
+
datapointsToAlarm: 1,
|
|
26
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.BREACHING,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=health-check-alarm-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarm-defaults.js","sourceRoot":"","sources":["../../src/health-check-alarm-defaults.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAQ9D;;;;GAIG;AACU,QAAA,2BAA2B,GAA6B;IACnE,OAAO,EAAE,IAAI;IAEb;;;;;;;;;OASG;IACH,iBAAiB,EAAE;QACjB,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,SAAS;KAC7C;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarms.d.ts","sourceRoot":"","sources":["../../src/health-check-alarms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAK7E;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,sBAAsB,GAAG,SAAS,GACzC,eAAe,EAAE,CA8BnB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveHealthCheckAlarmDefinitions = resolveHealthCheckAlarmDefinitions;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
7
|
+
const health_check_alarm_defaults_js_1 = require("./health-check-alarm-defaults.js");
|
|
8
|
+
const METRIC_PERIOD = aws_cdk_lib_1.Duration.minutes(1);
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
11
|
+
* {@link AlarmDefinition}s for a Route 53 health check.
|
|
12
|
+
*
|
|
13
|
+
* Period and statistic are fixed at the AWS-recommended values
|
|
14
|
+
* (1 minute, Minimum) and not exposed as configuration knobs — they are
|
|
15
|
+
* load-bearing for the recommended semantics ("the worst checker reading
|
|
16
|
+
* per minute"). Threshold, evaluation periods, datapoints, and missing-data
|
|
17
|
+
* behaviour remain user-configurable via {@link HealthCheckAlarmConfig}.
|
|
18
|
+
*/
|
|
19
|
+
function resolveHealthCheckAlarmDefinitions(healthCheck, config) {
|
|
20
|
+
if (config?.enabled === false)
|
|
21
|
+
return [];
|
|
22
|
+
const definitions = [];
|
|
23
|
+
if (config?.healthCheckStatus !== false) {
|
|
24
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.healthCheckStatus, health_check_alarm_defaults_js_1.HEALTH_CHECK_ALARM_DEFAULTS.healthCheckStatus);
|
|
25
|
+
definitions.push({
|
|
26
|
+
key: "healthCheckStatus",
|
|
27
|
+
alarmName: cfg.alarmName,
|
|
28
|
+
metric: new aws_cloudwatch_1.Metric({
|
|
29
|
+
namespace: "AWS/Route53",
|
|
30
|
+
metricName: "HealthCheckStatus",
|
|
31
|
+
dimensionsMap: { HealthCheckId: healthCheck.healthCheckId },
|
|
32
|
+
statistic: aws_cloudwatch_1.Stats.MINIMUM,
|
|
33
|
+
period: METRIC_PERIOD,
|
|
34
|
+
}),
|
|
35
|
+
threshold: cfg.threshold,
|
|
36
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
37
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
38
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
39
|
+
treatMissingData: cfg.treatMissingData,
|
|
40
|
+
description: `Route 53 health check is reporting unhealthy. Threshold: HealthCheckStatus < ${String(cfg.threshold)} (Minimum, 1 minute).`,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return definitions;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=health-check-alarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-alarms.js","sourceRoot":"","sources":["../../src/health-check-alarms.ts"],"names":[],"mappings":";;AAoBA,gFAiCC;AArDD,6CAAuC;AACvC,+DAA+E;AAG/E,yDAA8D;AAE9D,qFAA+E;AAE/E,MAAM,aAAa,GAAG,sBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;;;;;;GASG;AACH,SAAgB,kCAAkC,CAChD,WAAyB,EACzB,MAA0C;IAE1C,IAAI,MAAM,EAAE,OAAO,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,IAAI,MAAM,EAAE,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAA,+BAAkB,EAC5B,MAAM,EAAE,iBAAiB,EACzB,4DAA2B,CAAC,iBAAiB,CAC9C,CAAC;QACF,WAAW,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,mBAAmB;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,IAAI,uBAAM,CAAC;gBACjB,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,mBAAmB;gBAC/B,aAAa,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE;gBAC3D,SAAS,EAAE,sBAAK,CAAC,OAAO;gBACxB,MAAM,EAAE,aAAa;aACtB,CAAC;YACF,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,kBAAkB,EAAE,mCAAkB,CAAC,mBAAmB;YAC1D,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,WAAW,EAAE,gFAAgF,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB;SAC1I,CAAC,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-builder.d.ts","sourceRoot":"","sources":["../../src/health-check-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC/D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,GAAG,KAAK,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,WAAW,EAAE,WAAW,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;AAE9F,cAAM,kBAAmB,YAAW,SAAS,CAAC,wBAAwB,CAAC;;IACrE,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;IAG7C,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CACT,KAAK,EAAE,sBAAsB,CAAC,YAAY,CAAC,KACxC,sBAAsB,CAAC,YAAY,CAAC,GACxC,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAI9C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,wBAAwB;CA4B/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,CAE9D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHealthCheckBuilder = createHealthCheckBuilder;
|
|
4
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const health_check_alarm_builder_js_1 = require("./health-check-alarm-builder.js");
|
|
9
|
+
const defaults_js_1 = require("./defaults.js");
|
|
10
|
+
class HealthCheckBuilder {
|
|
11
|
+
props = {};
|
|
12
|
+
#customAlarms = [];
|
|
13
|
+
addAlarm(key, configure) {
|
|
14
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
/** @internal — see ADR-0005. */
|
|
18
|
+
[core_1.COPY_STATE](target) {
|
|
19
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
20
|
+
}
|
|
21
|
+
build(scope, id) {
|
|
22
|
+
const { recommendedAlarms, ...rest } = this.props;
|
|
23
|
+
if (!rest.type) {
|
|
24
|
+
throw new Error(`HealthCheckBuilder "${id}" requires a type. Call .type() with a HealthCheckType value.`);
|
|
25
|
+
}
|
|
26
|
+
const mergedProps = {
|
|
27
|
+
...defaults_js_1.HEALTH_CHECK_DEFAULTS,
|
|
28
|
+
...rest,
|
|
29
|
+
};
|
|
30
|
+
const healthCheck = new aws_route53_1.HealthCheck(scope, id, mergedProps);
|
|
31
|
+
const alarms = (0, health_check_alarm_builder_js_1.buildHealthCheckAlarms)(scope, id, { healthCheck }, {
|
|
32
|
+
recommendedAlarms,
|
|
33
|
+
customAlarms: this.#customAlarms,
|
|
34
|
+
});
|
|
35
|
+
return { healthCheck, alarms };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new {@link IHealthCheckBuilder} for configuring a Route 53
|
|
40
|
+
* health check.
|
|
41
|
+
*
|
|
42
|
+
* @returns A fluent builder for a Route 53 health check.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const hc = createHealthCheckBuilder()
|
|
47
|
+
* .type(HealthCheckType.HTTPS)
|
|
48
|
+
* .fqdn("api.example.com");
|
|
49
|
+
*
|
|
50
|
+
* const result = hc.build(stack, "ApiHealthCheck");
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
function createHealthCheckBuilder() {
|
|
54
|
+
return (0, cloudformation_1.taggedBuilder)(HealthCheckBuilder);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=health-check-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check-builder.js","sourceRoot":"","sources":["../../src/health-check-builder.ts"],"names":[],"mappings":";;AAoJA,4DAEC;AAtJD,yDAAgG;AAGhG,6CAAgE;AAChE,iEAAkF;AAClF,yDAAkE;AAElE,mFAAyE;AACzE,+CAAsD;AA4EtD,MAAM,kBAAkB;IACtB,KAAK,GAAqC,EAAE,CAAC;IACpC,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,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAA0B;QACrC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,+DAA+D,CACzF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,mCAAqB;YACxB,GAAG,IAAI;SACY,CAAC;QAEtB,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAA,sDAAsB,EACnC,KAAK,EACL,EAAE,EACF,EAAE,WAAW,EAAE,EACf;YACE,iBAAiB;YACjB,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CACF,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,wBAAwB;IACtC,OAAO,IAAA,8BAAa,EAA8C,kBAAkB,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import { PublicHostedZone, type PublicHostedZoneProps } from "aws-cdk-lib/aws-route53";
|
|
2
|
+
import { type LogGroup } from "aws-cdk-lib/aws-logs";
|
|
2
3
|
import { type IConstruct } from "constructs";
|
|
3
4
|
import { type Lifecycle } from "@composurecdk/core";
|
|
4
5
|
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
6
|
+
import { type QueryLoggingConfig } from "./query-logging.js";
|
|
5
7
|
/**
|
|
6
8
|
* Configuration properties for the Route53 public hosted zone builder.
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* which the user supplies directly.
|
|
10
|
+
* Hides the CDK `queryLogsLogGroupArn` field in favour of {@link queryLogging}
|
|
11
|
+
* — a discriminated config that supports a `false` opt-out, a user-supplied
|
|
12
|
+
* pre-existing log group ARN, or a customizable auto-managed `LogGroup`
|
|
13
|
+
* provisioned alongside the hosted zone.
|
|
13
14
|
*/
|
|
14
|
-
export
|
|
15
|
+
export interface HostedZoneBuilderProps extends Omit<PublicHostedZoneProps, "queryLogsLogGroupArn"> {
|
|
16
|
+
/**
|
|
17
|
+
* See {@link QueryLoggingConfig}. Defaults to an auto-managed CloudWatch
|
|
18
|
+
* log group and a single shared resource policy granting Route 53 write
|
|
19
|
+
* access — the secure path is the easy path. Set to `false` to opt out, or
|
|
20
|
+
* to `{ logGroupArn }` to bring your own log group.
|
|
21
|
+
*/
|
|
22
|
+
queryLogging?: QueryLoggingConfig;
|
|
23
|
+
}
|
|
15
24
|
/**
|
|
16
25
|
* The build output of an {@link IHostedZoneBuilder}. Contains the CDK
|
|
17
26
|
* constructs created during {@link Lifecycle.build}, keyed by role.
|
|
@@ -19,6 +28,15 @@ export type HostedZoneBuilderProps = PublicHostedZoneProps;
|
|
|
19
28
|
export interface HostedZoneBuilderResult {
|
|
20
29
|
/** The Route53 public hosted zone construct created by the builder. */
|
|
21
30
|
hostedZone: PublicHostedZone;
|
|
31
|
+
/**
|
|
32
|
+
* The CloudWatch log group auto-created for DNS query logging, or
|
|
33
|
+
* `undefined` when query logging was disabled or the user supplied their
|
|
34
|
+
* own log group ARN. The shared `AWS::Logs::ResourcePolicy` is
|
|
35
|
+
* intentionally not exposed: it is stack-scoped, shared across every
|
|
36
|
+
* hosted zone in the stack, and not safe to mutate from a single
|
|
37
|
+
* builder's result.
|
|
38
|
+
*/
|
|
39
|
+
queryLogGroup?: LogGroup;
|
|
22
40
|
}
|
|
23
41
|
/**
|
|
24
42
|
* A fluent builder for configuring and creating a Route53 public hosted zone.
|
|
@@ -29,7 +47,8 @@ export interface HostedZoneBuilderResult {
|
|
|
29
47
|
*
|
|
30
48
|
* The builder implements {@link Lifecycle}, so it can be used directly as a
|
|
31
49
|
* component in a {@link compose | composed system}. When built, it creates a
|
|
32
|
-
* public hosted zone with the configured properties
|
|
50
|
+
* public hosted zone with the configured properties — including the
|
|
51
|
+
* auto-managed DNS query-log group and shared resource policy — and returns a
|
|
33
52
|
* {@link HostedZoneBuilderResult}.
|
|
34
53
|
*
|
|
35
54
|
* @example
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-zone-builder.d.ts","sourceRoot":"","sources":["../../src/hosted-zone-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAElF,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,qBAAqB,EACrB,sBAAsB,CACvB;IACC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,uEAAuE;IACvE,UAAU,EAAE,gBAAgB,CAAC;IAC7B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAE3F,cAAM,iBAAkB,YAAW,SAAS,CAAC,uBAAuB,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAM;IAE5C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,uBAAuB;CA8B9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,CAE5D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHostedZoneBuilder = createHostedZoneBuilder;
|
|
4
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
5
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
6
|
+
const defaults_js_1 = require("./defaults.js");
|
|
7
|
+
const query_logging_js_1 = require("./query-logging.js");
|
|
8
|
+
class HostedZoneBuilder {
|
|
9
|
+
props = {};
|
|
10
|
+
build(scope, id) {
|
|
11
|
+
if (!this.props.zoneName) {
|
|
12
|
+
throw new Error(`HostedZoneBuilder "${id}" requires a zoneName. ` +
|
|
13
|
+
`Call .zoneName() with a fully-qualified domain.`);
|
|
14
|
+
}
|
|
15
|
+
const { queryLogging, ...zoneProps } = {
|
|
16
|
+
...defaults_js_1.HOSTED_ZONE_DEFAULTS,
|
|
17
|
+
...this.props,
|
|
18
|
+
};
|
|
19
|
+
const { queryLogGroup, queryLogsLogGroupArn, policy } = (0, query_logging_js_1.resolveQueryLogging)(scope, id, this.props.zoneName, queryLogging);
|
|
20
|
+
const hostedZone = new aws_route53_1.PublicHostedZone(scope, id, {
|
|
21
|
+
...zoneProps,
|
|
22
|
+
zoneName: this.props.zoneName,
|
|
23
|
+
queryLogsLogGroupArn,
|
|
24
|
+
});
|
|
25
|
+
if (policy)
|
|
26
|
+
hostedZone.node.addDependency(policy);
|
|
27
|
+
return { hostedZone, queryLogGroup };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new {@link IHostedZoneBuilder} for configuring a Route53 public
|
|
32
|
+
* hosted zone.
|
|
33
|
+
*
|
|
34
|
+
* This is the entry point for defining a public hosted zone component. The
|
|
35
|
+
* returned builder exposes every {@link HostedZoneBuilderProps} property as a
|
|
36
|
+
* fluent setter/getter and implements {@link Lifecycle} for use with
|
|
37
|
+
* {@link compose}.
|
|
38
|
+
*
|
|
39
|
+
* @returns A fluent builder for a Route53 public hosted zone.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* const zone = createHostedZoneBuilder().zoneName("example.com");
|
|
44
|
+
*
|
|
45
|
+
* // Use standalone:
|
|
46
|
+
* const result = zone.build(stack, "SiteZone");
|
|
47
|
+
*
|
|
48
|
+
* // Or compose into a system:
|
|
49
|
+
* const system = compose(
|
|
50
|
+
* { zone, cert: createCertificateBuilder()
|
|
51
|
+
* .domainName("example.com")
|
|
52
|
+
* .validationZone(ref("zone", (r: HostedZoneBuilderResult) => r.hostedZone)) },
|
|
53
|
+
* { zone: [], cert: ["zone"] },
|
|
54
|
+
* );
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
function createHostedZoneBuilder() {
|
|
58
|
+
return (0, cloudformation_1.taggedBuilder)(HostedZoneBuilder);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=hosted-zone-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-zone-builder.js","sourceRoot":"","sources":["../../src/hosted-zone-builder.ts"],"names":[],"mappings":";;AAmIA,0DAEC;AArID,yDAAuF;AAIvF,iEAAkF;AAClF,+CAAqD;AACrD,yDAAkF;AA+DlF,MAAM,iBAAiB;IACrB,KAAK,GAAoC,EAAE,CAAC;IAE5C,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,yBAAyB;gBAC/C,iDAAiD,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,GAAG;YACrC,GAAG,kCAAoB;YACvB,GAAG,IAAI,CAAC,KAAK;SACd,CAAC;QAEF,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,IAAA,sCAAmB,EACzE,KAAK,EACL,EAAE,EACF,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,YAAY,CACb,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,8BAAgB,CAAC,KAAK,EAAE,EAAE,EAAE;YACjD,GAAG,SAAS;YACZ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,oBAAoB;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM;YAAE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAElD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IACvC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,uBAAuB;IACrC,OAAO,IAAA,8BAAa,EAA4C,iBAAiB,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"https-record-builder.d.ts","sourceRoot":"","sources":["../../src/https-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxF,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;GAOG;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;AAExF,cAAM,kBAAmB,YAAW,SAAS,CAAC,wBAAwB,CAAC;IACrE,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;IAE7C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,wBAAwB;CAiCjG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,CAG9D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHttpsRecordBuilder = createHttpsRecordBuilder;
|
|
4
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const defaults_js_1 = require("./defaults.js");
|
|
7
|
+
class HttpsRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, target, values, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`HttpsRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (values?.length === 0) {
|
|
15
|
+
throw new Error(`HttpsRecordBuilder "${id}" requires non-empty values. ` +
|
|
16
|
+
`Call .values() with one or more HttpsRecordValue entries, or use .target() instead.`);
|
|
17
|
+
}
|
|
18
|
+
const hasValues = values !== undefined;
|
|
19
|
+
if (hasValues === (target !== undefined)) {
|
|
20
|
+
throw new Error(`HttpsRecordBuilder "${id}" requires exactly one of .values() or .target(), not both.`);
|
|
21
|
+
}
|
|
22
|
+
const resolvedTarget = target ? (0, core_1.resolve)(target, context) : undefined;
|
|
23
|
+
const isAlias = resolvedTarget?.aliasTarget !== undefined;
|
|
24
|
+
const mergedProps = {
|
|
25
|
+
...(isAlias ? {} : defaults_js_1.HTTPS_RECORD_DEFAULTS),
|
|
26
|
+
...rest,
|
|
27
|
+
...(hasValues ? { values } : {}),
|
|
28
|
+
...(resolvedTarget ? { target: resolvedTarget } : {}),
|
|
29
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
30
|
+
};
|
|
31
|
+
const record = new aws_route53_1.HttpsRecord(scope, id, mergedProps);
|
|
32
|
+
return { record };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new {@link IHttpsRecordBuilder} for configuring a Route53 HTTPS
|
|
37
|
+
* record.
|
|
38
|
+
*
|
|
39
|
+
* @returns A fluent builder for a Route53 HTTPS record.
|
|
40
|
+
*/
|
|
41
|
+
function createHttpsRecordBuilder() {
|
|
42
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
43
|
+
return (0, core_1.Builder)(HttpsRecordBuilder);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=https-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"https-record-builder.js","sourceRoot":"","sources":["../../src/https-record-builder.ts"],"names":[],"mappings":";;AA6FA,4DAGC;AAhGD,yDAKiC;AAEjC,6CAM4B;AAC5B,+CAAsD;AAmCtD,MAAM,kBAAkB;IACtB,KAAK,GAAqC,EAAE,CAAC;IAE7C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,sDAAsD,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,+BAA+B;gBACtD,qFAAqF,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC;QACvC,IAAI,SAAS,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,6DAA6D,CACvF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,OAAO,GAAG,cAAc,EAAE,WAAW,KAAK,SAAS,CAAC;QAC1D,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAqB,CAAC;YACzC,GAAG,IAAI;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACT,CAAC;QAEtB,MAAM,MAAM,GAAG,IAAI,yBAAW,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB;IACtC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA8C,kBAAkB,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createHostedZoneBuilder, type HostedZoneBuilderProps, type HostedZoneBuilderResult, type IHostedZoneBuilder, } from "./hosted-zone-builder.js";
|
|
2
|
+
export { type QueryLoggingConfig } from "./query-logging.js";
|
|
2
3
|
export { createARecordBuilder, type ARecordBuilderProps, type ARecordBuilderResult, type IARecordBuilder, } from "./a-record-builder.js";
|
|
3
4
|
export { createAaaaRecordBuilder, type AaaaRecordBuilderProps, type AaaaRecordBuilderResult, type IAaaaRecordBuilder, } from "./aaaa-record-builder.js";
|
|
4
5
|
export { createCnameRecordBuilder, type CnameRecordBuilderProps, type CnameRecordBuilderResult, type ICnameRecordBuilder, } from "./cname-record-builder.js";
|
|
@@ -15,5 +16,5 @@ export { createHealthCheckAlarmBuilder, type HealthCheckAlarmBuilderProps, type
|
|
|
15
16
|
export type { HealthCheckAlarmConfig } from "./health-check-alarm-config.js";
|
|
16
17
|
export { HEALTH_CHECK_ALARM_DEFAULTS } from "./health-check-alarm-defaults.js";
|
|
17
18
|
export { cloudfrontAliasTarget, apiGatewayAliasTarget, apiGatewayDomainAliasTarget, } from "./alias-targets.js";
|
|
18
|
-
export { HOSTED_ZONE_DEFAULTS, A_RECORD_DEFAULTS, AAAA_RECORD_DEFAULTS, CNAME_RECORD_DEFAULTS, TXT_RECORD_DEFAULTS, MX_RECORD_DEFAULTS, SRV_RECORD_DEFAULTS, CAA_RECORD_DEFAULTS, NS_RECORD_DEFAULTS, DS_RECORD_DEFAULTS, HTTPS_RECORD_DEFAULTS, SVCB_RECORD_DEFAULTS, HEALTH_CHECK_DEFAULTS, } from "./defaults.js";
|
|
19
|
+
export { HOSTED_ZONE_DEFAULTS, QUERY_LOGGING_LOG_GROUP_NAME_PREFIX, QUERY_LOGGING_RESOURCE_POLICY_NAME, A_RECORD_DEFAULTS, AAAA_RECORD_DEFAULTS, CNAME_RECORD_DEFAULTS, TXT_RECORD_DEFAULTS, MX_RECORD_DEFAULTS, SRV_RECORD_DEFAULTS, CAA_RECORD_DEFAULTS, NS_RECORD_DEFAULTS, DS_RECORD_DEFAULTS, HTTPS_RECORD_DEFAULTS, SVCB_RECORD_DEFAULTS, HEALTH_CHECK_DEFAULTS, } from "./defaults.js";
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,GAC9B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,mCAAmC,EACnC,kCAAkC,EAClC,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HEALTH_CHECK_DEFAULTS = exports.SVCB_RECORD_DEFAULTS = exports.HTTPS_RECORD_DEFAULTS = exports.DS_RECORD_DEFAULTS = exports.NS_RECORD_DEFAULTS = exports.CAA_RECORD_DEFAULTS = exports.SRV_RECORD_DEFAULTS = exports.MX_RECORD_DEFAULTS = exports.TXT_RECORD_DEFAULTS = exports.CNAME_RECORD_DEFAULTS = exports.AAAA_RECORD_DEFAULTS = exports.A_RECORD_DEFAULTS = exports.QUERY_LOGGING_RESOURCE_POLICY_NAME = exports.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = exports.HOSTED_ZONE_DEFAULTS = exports.apiGatewayDomainAliasTarget = exports.apiGatewayAliasTarget = exports.cloudfrontAliasTarget = exports.HEALTH_CHECK_ALARM_DEFAULTS = exports.createHealthCheckAlarmBuilder = exports.createHealthCheckBuilder = exports.createSvcbRecordBuilder = exports.createHttpsRecordBuilder = exports.createDsRecordBuilder = exports.createNsRecordBuilder = exports.createCaaRecordBuilder = exports.createSrvRecordBuilder = exports.createMxRecordBuilder = exports.createTxtRecordBuilder = exports.createCnameRecordBuilder = exports.createAaaaRecordBuilder = exports.createARecordBuilder = exports.createHostedZoneBuilder = void 0;
|
|
4
|
+
var hosted_zone_builder_js_1 = require("./hosted-zone-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createHostedZoneBuilder", { enumerable: true, get: function () { return hosted_zone_builder_js_1.createHostedZoneBuilder; } });
|
|
6
|
+
var a_record_builder_js_1 = require("./a-record-builder.js");
|
|
7
|
+
Object.defineProperty(exports, "createARecordBuilder", { enumerable: true, get: function () { return a_record_builder_js_1.createARecordBuilder; } });
|
|
8
|
+
var aaaa_record_builder_js_1 = require("./aaaa-record-builder.js");
|
|
9
|
+
Object.defineProperty(exports, "createAaaaRecordBuilder", { enumerable: true, get: function () { return aaaa_record_builder_js_1.createAaaaRecordBuilder; } });
|
|
10
|
+
var cname_record_builder_js_1 = require("./cname-record-builder.js");
|
|
11
|
+
Object.defineProperty(exports, "createCnameRecordBuilder", { enumerable: true, get: function () { return cname_record_builder_js_1.createCnameRecordBuilder; } });
|
|
12
|
+
var txt_record_builder_js_1 = require("./txt-record-builder.js");
|
|
13
|
+
Object.defineProperty(exports, "createTxtRecordBuilder", { enumerable: true, get: function () { return txt_record_builder_js_1.createTxtRecordBuilder; } });
|
|
14
|
+
var mx_record_builder_js_1 = require("./mx-record-builder.js");
|
|
15
|
+
Object.defineProperty(exports, "createMxRecordBuilder", { enumerable: true, get: function () { return mx_record_builder_js_1.createMxRecordBuilder; } });
|
|
16
|
+
var srv_record_builder_js_1 = require("./srv-record-builder.js");
|
|
17
|
+
Object.defineProperty(exports, "createSrvRecordBuilder", { enumerable: true, get: function () { return srv_record_builder_js_1.createSrvRecordBuilder; } });
|
|
18
|
+
var caa_record_builder_js_1 = require("./caa-record-builder.js");
|
|
19
|
+
Object.defineProperty(exports, "createCaaRecordBuilder", { enumerable: true, get: function () { return caa_record_builder_js_1.createCaaRecordBuilder; } });
|
|
20
|
+
var ns_record_builder_js_1 = require("./ns-record-builder.js");
|
|
21
|
+
Object.defineProperty(exports, "createNsRecordBuilder", { enumerable: true, get: function () { return ns_record_builder_js_1.createNsRecordBuilder; } });
|
|
22
|
+
var ds_record_builder_js_1 = require("./ds-record-builder.js");
|
|
23
|
+
Object.defineProperty(exports, "createDsRecordBuilder", { enumerable: true, get: function () { return ds_record_builder_js_1.createDsRecordBuilder; } });
|
|
24
|
+
var https_record_builder_js_1 = require("./https-record-builder.js");
|
|
25
|
+
Object.defineProperty(exports, "createHttpsRecordBuilder", { enumerable: true, get: function () { return https_record_builder_js_1.createHttpsRecordBuilder; } });
|
|
26
|
+
var svcb_record_builder_js_1 = require("./svcb-record-builder.js");
|
|
27
|
+
Object.defineProperty(exports, "createSvcbRecordBuilder", { enumerable: true, get: function () { return svcb_record_builder_js_1.createSvcbRecordBuilder; } });
|
|
28
|
+
var health_check_builder_js_1 = require("./health-check-builder.js");
|
|
29
|
+
Object.defineProperty(exports, "createHealthCheckBuilder", { enumerable: true, get: function () { return health_check_builder_js_1.createHealthCheckBuilder; } });
|
|
30
|
+
var health_check_alarm_builder_js_1 = require("./health-check-alarm-builder.js");
|
|
31
|
+
Object.defineProperty(exports, "createHealthCheckAlarmBuilder", { enumerable: true, get: function () { return health_check_alarm_builder_js_1.createHealthCheckAlarmBuilder; } });
|
|
32
|
+
var health_check_alarm_defaults_js_1 = require("./health-check-alarm-defaults.js");
|
|
33
|
+
Object.defineProperty(exports, "HEALTH_CHECK_ALARM_DEFAULTS", { enumerable: true, get: function () { return health_check_alarm_defaults_js_1.HEALTH_CHECK_ALARM_DEFAULTS; } });
|
|
34
|
+
var alias_targets_js_1 = require("./alias-targets.js");
|
|
35
|
+
Object.defineProperty(exports, "cloudfrontAliasTarget", { enumerable: true, get: function () { return alias_targets_js_1.cloudfrontAliasTarget; } });
|
|
36
|
+
Object.defineProperty(exports, "apiGatewayAliasTarget", { enumerable: true, get: function () { return alias_targets_js_1.apiGatewayAliasTarget; } });
|
|
37
|
+
Object.defineProperty(exports, "apiGatewayDomainAliasTarget", { enumerable: true, get: function () { return alias_targets_js_1.apiGatewayDomainAliasTarget; } });
|
|
38
|
+
var defaults_js_1 = require("./defaults.js");
|
|
39
|
+
Object.defineProperty(exports, "HOSTED_ZONE_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.HOSTED_ZONE_DEFAULTS; } });
|
|
40
|
+
Object.defineProperty(exports, "QUERY_LOGGING_LOG_GROUP_NAME_PREFIX", { enumerable: true, get: function () { return defaults_js_1.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX; } });
|
|
41
|
+
Object.defineProperty(exports, "QUERY_LOGGING_RESOURCE_POLICY_NAME", { enumerable: true, get: function () { return defaults_js_1.QUERY_LOGGING_RESOURCE_POLICY_NAME; } });
|
|
42
|
+
Object.defineProperty(exports, "A_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.A_RECORD_DEFAULTS; } });
|
|
43
|
+
Object.defineProperty(exports, "AAAA_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.AAAA_RECORD_DEFAULTS; } });
|
|
44
|
+
Object.defineProperty(exports, "CNAME_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.CNAME_RECORD_DEFAULTS; } });
|
|
45
|
+
Object.defineProperty(exports, "TXT_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.TXT_RECORD_DEFAULTS; } });
|
|
46
|
+
Object.defineProperty(exports, "MX_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.MX_RECORD_DEFAULTS; } });
|
|
47
|
+
Object.defineProperty(exports, "SRV_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.SRV_RECORD_DEFAULTS; } });
|
|
48
|
+
Object.defineProperty(exports, "CAA_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.CAA_RECORD_DEFAULTS; } });
|
|
49
|
+
Object.defineProperty(exports, "NS_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.NS_RECORD_DEFAULTS; } });
|
|
50
|
+
Object.defineProperty(exports, "DS_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.DS_RECORD_DEFAULTS; } });
|
|
51
|
+
Object.defineProperty(exports, "HTTPS_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.HTTPS_RECORD_DEFAULTS; } });
|
|
52
|
+
Object.defineProperty(exports, "SVCB_RECORD_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.SVCB_RECORD_DEFAULTS; } });
|
|
53
|
+
Object.defineProperty(exports, "HEALTH_CHECK_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.HEALTH_CHECK_DEFAULTS; } });
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mEAKkC;AAJhC,iIAAA,uBAAuB,OAAA;AAMzB,6DAK+B;AAJ7B,2HAAA,oBAAoB,OAAA;AAKtB,mEAKkC;AAJhC,iIAAA,uBAAuB,OAAA;AAKzB,qEAKmC;AAJjC,mIAAA,wBAAwB,OAAA;AAK1B,iEAKiC;AAJ/B,+HAAA,sBAAsB,OAAA;AAKxB,+DAKgC;AAJ9B,6HAAA,qBAAqB,OAAA;AAKvB,iEAKiC;AAJ/B,+HAAA,sBAAsB,OAAA;AAKxB,iEAKiC;AAJ/B,+HAAA,sBAAsB,OAAA;AAKxB,+DAKgC;AAJ9B,6HAAA,qBAAqB,OAAA;AAKvB,+DAKgC;AAJ9B,6HAAA,qBAAqB,OAAA;AAKvB,qEAKmC;AAJjC,mIAAA,wBAAwB,OAAA;AAK1B,mEAKkC;AAJhC,iIAAA,uBAAuB,OAAA;AAKzB,qEAKmC;AAJjC,mIAAA,wBAAwB,OAAA;AAK1B,iFAKyC;AAJvC,8IAAA,6BAA6B,OAAA;AAM/B,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AACpC,uDAI4B;AAH1B,yHAAA,qBAAqB,OAAA;AACrB,yHAAA,qBAAqB,OAAA;AACrB,+HAAA,2BAA2B,OAAA;AAE7B,6CAgBuB;AAfrB,mHAAA,oBAAoB,OAAA;AACpB,kIAAA,mCAAmC,OAAA;AACnC,iIAAA,kCAAkC,OAAA;AAClC,gHAAA,iBAAiB,OAAA;AACjB,mHAAA,oBAAoB,OAAA;AACpB,oHAAA,qBAAqB,OAAA;AACrB,kHAAA,mBAAmB,OAAA;AACnB,iHAAA,kBAAkB,OAAA;AAClB,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AACnB,iHAAA,kBAAkB,OAAA;AAClB,iHAAA,kBAAkB,OAAA;AAClB,oHAAA,qBAAqB,OAAA;AACrB,mHAAA,oBAAoB,OAAA;AACpB,oHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mx-record-builder.d.ts","sourceRoot":"","sources":["../../src/mx-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACvE,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;;;;GAMG;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAE/E,cAAM,eAAgB,YAAW,SAAS,CAAC,qBAAqB,CAAC;IAC/D,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAM;IAE1C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,qBAAqB;CAsB9F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAGxD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMxRecordBuilder = createMxRecordBuilder;
|
|
4
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const defaults_js_1 = require("./defaults.js");
|
|
7
|
+
class MxRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, values, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`MxRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!values || values.length === 0) {
|
|
15
|
+
throw new Error(`MxRecordBuilder "${id}" requires non-empty values. ` +
|
|
16
|
+
`Call .values() with one or more { priority, hostName } entries.`);
|
|
17
|
+
}
|
|
18
|
+
const mergedProps = {
|
|
19
|
+
...defaults_js_1.MX_RECORD_DEFAULTS,
|
|
20
|
+
...rest,
|
|
21
|
+
values,
|
|
22
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
23
|
+
};
|
|
24
|
+
const record = new aws_route53_1.MxRecord(scope, id, mergedProps);
|
|
25
|
+
return { record };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new {@link IMxRecordBuilder} for configuring a Route53 MX record.
|
|
30
|
+
*
|
|
31
|
+
* @returns A fluent builder for a Route53 MX record.
|
|
32
|
+
*/
|
|
33
|
+
function createMxRecordBuilder() {
|
|
34
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
35
|
+
return (0, core_1.Builder)(MxRecordBuilder);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mx-record-builder.js.map
|