@composurecdk/route53 0.6.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/{health-check-alarm-builder.d.ts → commonjs/health-check-alarm-builder.d.ts} +5 -2
- 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/{health-check-builder.d.ts → commonjs/health-check-builder.d.ts} +5 -2
- 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} +29 -9
- 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/{a-record-builder.js → esm/a-record-builder.js} +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/{aaaa-record-builder.js → esm/aaaa-record-builder.js} +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/{caa-record-builder.js → esm/caa-record-builder.js} +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/{cname-record-builder.js → esm/cname-record-builder.js} +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/{ds-record-builder.js → esm/ds-record-builder.js} +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/{health-check-alarm-builder.js → esm/health-check-alarm-builder.js} +8 -2
- 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/{health-check-builder.js → esm/health-check-builder.js} +7 -2
- 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} +13 -5
- 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/{https-record-builder.js → esm/https-record-builder.js} +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/{mx-record-builder.js → esm/mx-record-builder.js} +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/{ns-record-builder.js → esm/ns-record-builder.js} +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/{srv-record-builder.js → esm/srv-record-builder.js} +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/{svcb-record-builder.js → esm/svcb-record-builder.js} +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/{txt-record-builder.js → esm/txt-record-builder.js} +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 -20
- 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-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/{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/{alias-targets.js → esm/alias-targets.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/{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
package/README.md
CHANGED
|
@@ -21,12 +21,56 @@ Every [PublicHostedZoneProps](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cd
|
|
|
21
21
|
|
|
22
22
|
Route 53 is a global service, but DNS query logs are emitted in `us-east-1` only — the CloudWatch log group that receives them must live there regardless of where the hosted zone is declared. This is an AWS service constraint, not a restriction on where your hosted zone or records can live.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
**Query logging is enabled by default.** When you call `createHostedZoneBuilder().zoneName("example.com")` the builder auto-provisions:
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
1. A CloudWatch `LogGroup` named `/aws/route53/<zoneName>` with the `@composurecdk/logs` defaults (`RetentionDays.TWO_YEARS`, `RemovalPolicy.RETAIN`).
|
|
27
|
+
2. A single shared `AWS::Logs::ResourcePolicy` per stack — `ComposureCDK-Route53QueryLogging` — granting `route53.amazonaws.com` permission to `logs:CreateLogStream` and `logs:PutLogEvents` against the `/aws/route53/*` prefix. The policy includes the `aws:SourceAccount` confused-deputy condition.
|
|
28
|
+
3. The `QueryLoggingConfig` on the hosted zone wired to the auto-created log group's ARN, plus a `DependsOn` so Route 53 cannot race the policy on first write.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
Multiple hosted zones in the same stack share the resource policy — you stay well clear of the [10-policy/region soft limit](https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html). The auto-created log group is exposed as `result.queryLogGroup` for downstream wiring (subscription filters, metric filters).
|
|
31
|
+
|
|
32
|
+
#### `queryLogging` configuration
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
type QueryLoggingConfig =
|
|
36
|
+
| false
|
|
37
|
+
| {
|
|
38
|
+
configure?: (b: ILogGroupBuilder) => ILogGroupBuilder; // tweak the auto-created log group
|
|
39
|
+
logGroupArn?: string; // bring your own us-east-1 log group; you own its resource policy
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Customize the auto-created log group:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { RetentionDays } from "aws-cdk-lib/aws-logs";
|
|
47
|
+
|
|
48
|
+
createHostedZoneBuilder()
|
|
49
|
+
.zoneName("example.com")
|
|
50
|
+
.queryLogging({ configure: (lg) => lg.retention(RetentionDays.SIX_MONTHS) });
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Bring your own log group (you own the resource policy too):
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
createHostedZoneBuilder()
|
|
57
|
+
.zoneName("example.com")
|
|
58
|
+
.queryLogging({ logGroupArn: "arn:aws:logs:us-east-1:111122223333:log-group:/audit/dns" });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Disable entirely:
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
createHostedZoneBuilder().zoneName("example.com").queryLogging(false);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### `us-east-1` constraint
|
|
68
|
+
|
|
69
|
+
If the stack's region resolves to a known non-`us-east-1` region, `build()` throws with three remediations: deploy the stack in `us-east-1`, pass `queryLogging({ logGroupArn })`, or set `queryLogging(false)`. Env-agnostic stacks (where the region is an unresolved CDK token) are not blocked. A user-supplied `logGroupArn` outside `us-east-1` emits the synth warning `@composurecdk/route53:query-logging-region` instead of erroring.
|
|
70
|
+
|
|
71
|
+
#### Cost note
|
|
72
|
+
|
|
73
|
+
Default-on query logging adds two long-lived resources per stack: the log group (charged per ingested GB and per stored GB after retention) and the resource policy (free). For high-traffic zones consider lowering retention via the `configure` callback or disabling logging on zones with low security/audit value.
|
|
30
74
|
|
|
31
75
|
## Record Builders
|
|
32
76
|
|
|
@@ -76,6 +120,7 @@ Each helper accepts a `Resolvable`, so targets produced by other composed compon
|
|
|
76
120
|
| Builder | Property | Default | Rationale |
|
|
77
121
|
| -------------------------- | ---------------- | --------------------- | ---------------------------------------------------------------------------------------- |
|
|
78
122
|
| `createHostedZoneBuilder` | `addTrailingDot` | `true` | Matches RFC 1035 and the CDK default; unambiguous apex. |
|
|
123
|
+
| `createHostedZoneBuilder` | `queryLogging` | _auto-managed_ | DNS query logs to a `/aws/route53/<zoneName>` log group with a shared resource policy. |
|
|
79
124
|
| `createARecordBuilder` | `ttl` | `Duration.minutes(5)` | Balances propagation latency against DNS cache churn; skipped for alias targets.[^alias] |
|
|
80
125
|
| `createAaaaRecordBuilder` | `ttl` | `Duration.minutes(5)` | Same as A records; skipped for alias targets.[^alias] |
|
|
81
126
|
| `createCnameRecordBuilder` | `ttl` | `Duration.minutes(5)` | Same rationale as A records. |
|
|
@@ -343,6 +388,11 @@ import {
|
|
|
343
388
|
} from "@composurecdk/route53";
|
|
344
389
|
import { ALIAS, APEX, zoneRecords } from "@composurecdk/route53/zone";
|
|
345
390
|
|
|
391
|
+
// This composition only synthesises cleanly when `stack` is in `us-east-1`,
|
|
392
|
+
// because the default-on query logging on `zone` requires its auto-created
|
|
393
|
+
// log group to live there. To run the same shape outside `us-east-1`, pass
|
|
394
|
+
// `queryLogging({ logGroupArn })` referencing a us-east-1 log group, or
|
|
395
|
+
// `queryLogging(false)` to opt out.
|
|
346
396
|
compose(
|
|
347
397
|
{
|
|
348
398
|
zone: createHostedZoneBuilder().zoneName("example.com"),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-record-builder.d.ts","sourceRoot":"","sources":["../../src/a-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,YAAY,EACjB,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,mBAAoB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChF;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAE5E,cAAM,cAAe,YAAW,SAAS,CAAC,oBAAoB,CAAC;IAC7D,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;IAEzC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,oBAAoB;CAuB7F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAGtD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createARecordBuilder = createARecordBuilder;
|
|
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 ARecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, target, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`ARecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!target) {
|
|
15
|
+
throw new Error(`ARecordBuilder "${id}" requires a target. Call .target() with a RecordTarget.`);
|
|
16
|
+
}
|
|
17
|
+
const resolvedTarget = (0, core_1.resolve)(target, context);
|
|
18
|
+
const isAlias = resolvedTarget.aliasTarget !== undefined;
|
|
19
|
+
const mergedProps = {
|
|
20
|
+
...(isAlias ? {} : defaults_js_1.A_RECORD_DEFAULTS),
|
|
21
|
+
...rest,
|
|
22
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
23
|
+
target: resolvedTarget,
|
|
24
|
+
};
|
|
25
|
+
const record = new aws_route53_1.ARecord(scope, id, mergedProps);
|
|
26
|
+
return { record };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new {@link IARecordBuilder} for configuring a Route53 A record.
|
|
31
|
+
*
|
|
32
|
+
* @returns A fluent builder for a Route53 A record.
|
|
33
|
+
*/
|
|
34
|
+
function createARecordBuilder() {
|
|
35
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
36
|
+
return (0, core_1.Builder)(ARecordBuilder);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=a-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-record-builder.js","sourceRoot":"","sources":["../../src/a-record-builder.ts"],"names":[],"mappings":";;AA+FA,oDAGC;AAlGD,yDAKiC;AAEjC,6CAM4B;AAC5B,+CAAkD;AAgDlD,MAAM,cAAc;IAClB,KAAK,GAAiC,EAAE,CAAC;IAEzC,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mBAAmB,EAAE,0DAA0D,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,KAAK,SAAS,CAAC;QACzD,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,+BAAiB,CAAC;YACrC,GAAG,IAAI;YACP,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;YAC5B,MAAM,EAAE,cAAc;SACP,CAAC;QAElB,MAAM,MAAM,GAAG,IAAI,qBAAO,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAAsC,cAAc,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aaaa-record-builder.d.ts","sourceRoot":"","sources":["../../src/aaaa-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,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,sBAAuB,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAAC;IACtF,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,yBAAyB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAErF,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,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,uBAAuB;CAyBhG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,CAG5D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAaaaRecordBuilder = createAaaaRecordBuilder;
|
|
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 AaaaRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, target, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`AaaaRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!target) {
|
|
15
|
+
throw new Error(`AaaaRecordBuilder "${id}" requires a target. Call .target() with a RecordTarget.`);
|
|
16
|
+
}
|
|
17
|
+
const resolvedTarget = (0, core_1.resolve)(target, context);
|
|
18
|
+
const isAlias = resolvedTarget.aliasTarget !== undefined;
|
|
19
|
+
const mergedProps = {
|
|
20
|
+
...(isAlias ? {} : defaults_js_1.AAAA_RECORD_DEFAULTS),
|
|
21
|
+
...rest,
|
|
22
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
23
|
+
target: resolvedTarget,
|
|
24
|
+
};
|
|
25
|
+
const record = new aws_route53_1.AaaaRecord(scope, id, mergedProps);
|
|
26
|
+
return { record };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new {@link IAaaaRecordBuilder} for configuring a Route53 AAAA
|
|
31
|
+
* (IPv6) record.
|
|
32
|
+
*
|
|
33
|
+
* @returns A fluent builder for a Route53 AAAA record.
|
|
34
|
+
*/
|
|
35
|
+
function createAaaaRecordBuilder() {
|
|
36
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
37
|
+
return (0, core_1.Builder)(AaaaRecordBuilder);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=aaaa-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aaaa-record-builder.js","sourceRoot":"","sources":["../../src/aaaa-record-builder.ts"],"names":[],"mappings":";;AAoFA,0DAGC;AAvFD,yDAKiC;AAEjC,6CAM4B;AAC5B,+CAAqD;AAkCrD,MAAM,iBAAiB;IACrB,KAAK,GAAoC,EAAE,CAAC;IAE5C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,sDAAsD,CAC/E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,0DAA0D,CACnF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,KAAK,SAAS,CAAC;QACzD,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAoB,CAAC;YACxC,GAAG,IAAI;YACP,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;YAC5B,MAAM,EAAE,cAAc;SACJ,CAAC;QAErB,MAAM,MAAM,GAAG,IAAI,wBAAU,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB;IACrC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA4C,iBAAiB,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-targets.d.ts","sourceRoot":"","sources":["../../src/alias-targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,GACtC,UAAU,CAAC,YAAY,CAAC,CAI1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,GAC9B,UAAU,CAAC,YAAY,CAAC,CAI1B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cloudfrontAliasTarget = cloudfrontAliasTarget;
|
|
4
|
+
exports.apiGatewayAliasTarget = apiGatewayAliasTarget;
|
|
5
|
+
exports.apiGatewayDomainAliasTarget = apiGatewayDomainAliasTarget;
|
|
6
|
+
const aws_route53_1 = require("aws-cdk-lib/aws-route53");
|
|
7
|
+
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
8
|
+
const core_1 = require("@composurecdk/core");
|
|
9
|
+
/**
|
|
10
|
+
* Builds an alias {@link RecordTarget} for a CloudFront distribution, usable
|
|
11
|
+
* as the `target` of an A or AAAA record. Accepts a {@link Resolvable} so a
|
|
12
|
+
* distribution produced by a composed `@composurecdk/cloudfront` component
|
|
13
|
+
* can be wired in via {@link ref}.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* createARecordBuilder()
|
|
18
|
+
* .zone(ref("zone", (r: HostedZoneBuilderResult) => r.hostedZone))
|
|
19
|
+
* .target(cloudfrontAliasTarget(
|
|
20
|
+
* ref("cdn", (r: DistributionBuilderResult) => r.distribution),
|
|
21
|
+
* ));
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
function cloudfrontAliasTarget(distribution) {
|
|
25
|
+
return (0, core_1.isRef)(distribution)
|
|
26
|
+
? distribution.map((d) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(d)))
|
|
27
|
+
: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Builds an alias {@link RecordTarget} for an API Gateway REST API that has a
|
|
31
|
+
* custom domain name configured via {@link RestApiBase}. Accepts a
|
|
32
|
+
* {@link Resolvable}.
|
|
33
|
+
*/
|
|
34
|
+
function apiGatewayAliasTarget(api) {
|
|
35
|
+
return (0, core_1.isRef)(api)
|
|
36
|
+
? api.map((a) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(a)))
|
|
37
|
+
: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(api));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Builds an alias {@link RecordTarget} for an API Gateway custom domain name
|
|
41
|
+
* (`apigateway.DomainName`). Use this when you manage the domain name resource
|
|
42
|
+
* separately from the REST API (e.g. to share a custom domain across multiple
|
|
43
|
+
* APIs). Accepts a {@link Resolvable}.
|
|
44
|
+
*/
|
|
45
|
+
function apiGatewayDomainAliasTarget(domain) {
|
|
46
|
+
return (0, core_1.isRef)(domain)
|
|
47
|
+
? domain.map((d) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGatewayDomain(d)))
|
|
48
|
+
: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGatewayDomain(domain));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=alias-targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-targets.js","sourceRoot":"","sources":["../../src/alias-targets.ts"],"names":[],"mappings":";;AAqBA,sDAMC;AAOD,sDAIC;AAQD,kEAMC;AAlDD,yDAAuD;AACvD,yEAAiG;AACjG,6CAA4D;AAE5D;;;;;;;;;;;;;;GAcG;AACH,SAAgB,qBAAqB,CACnC,YAAuC;IAEvC,OAAO,IAAA,YAAK,EAAC,YAAY,CAAC;QACxB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,GAA4B;IAChE,OAAO,IAAA,YAAK,EAAC,GAAG,CAAC;QACf,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,gCAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,gCAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B,CACzC,MAA+B;IAE/B,OAAO,IAAA,YAAK,EAAC,MAAM,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caa-record-builder.d.ts","sourceRoot":"","sources":["../../src/caa-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3F,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,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACzE,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;AAElF,cAAM,gBAAiB,YAAW,SAAS,CAAC,sBAAsB,CAAC;IACjE,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAM;IAE3C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,sBAAsB;CAwB/F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,iBAAiB,CAG1D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCaaRecordBuilder = createCaaRecordBuilder;
|
|
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 CaaRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, values, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`CaaRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!values || values.length === 0) {
|
|
15
|
+
throw new Error(`CaaRecordBuilder "${id}" requires non-empty values. ` +
|
|
16
|
+
`Call .values() with one or more { flag, tag, value } entries.`);
|
|
17
|
+
}
|
|
18
|
+
const mergedProps = {
|
|
19
|
+
...defaults_js_1.CAA_RECORD_DEFAULTS,
|
|
20
|
+
...rest,
|
|
21
|
+
values,
|
|
22
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
23
|
+
};
|
|
24
|
+
const record = new aws_route53_1.CaaRecord(scope, id, mergedProps);
|
|
25
|
+
return { record };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new {@link ICaaRecordBuilder} for configuring a Route53 CAA record.
|
|
30
|
+
*
|
|
31
|
+
* @returns A fluent builder for a Route53 CAA record.
|
|
32
|
+
*/
|
|
33
|
+
function createCaaRecordBuilder() {
|
|
34
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
35
|
+
return (0, core_1.Builder)(CaaRecordBuilder);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=caa-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caa-record-builder.js","sourceRoot":"","sources":["../../src/caa-record-builder.ts"],"names":[],"mappings":";;AA8EA,wDAGC;AAjFD,yDAA2F;AAE3F,6CAM4B;AAC5B,+CAAoD;AAmCpD,MAAM,gBAAgB;IACpB,KAAK,GAAmC,EAAE,CAAC;IAE3C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,sDAAsD,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,+BAA+B;gBACpD,+DAA+D,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,iCAAmB;YACtB,GAAG,IAAI;YACP,MAAM;YACN,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACX,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,uBAAS,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,sBAAsB;IACpC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA0C,gBAAgB,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cname-record-builder.d.ts","sourceRoot":"","sources":["../../src/cname-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/F,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,uBAAwB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC7E,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;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;CA+BjG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,CAG9D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCnameRecordBuilder = createCnameRecordBuilder;
|
|
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 CnameRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, domainName, recordName, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`CnameRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!domainName) {
|
|
15
|
+
throw new Error(`CnameRecordBuilder "${id}" requires a domainName. ` +
|
|
16
|
+
`Call .domainName() with the target host (what the CNAME points to).`);
|
|
17
|
+
}
|
|
18
|
+
if (!recordName) {
|
|
19
|
+
throw new Error(`CnameRecordBuilder "${id}" requires a recordName. ` +
|
|
20
|
+
`Call .recordName() with the subdomain — CNAME records cannot be at the zone apex.`);
|
|
21
|
+
}
|
|
22
|
+
const mergedProps = {
|
|
23
|
+
...defaults_js_1.CNAME_RECORD_DEFAULTS,
|
|
24
|
+
...rest,
|
|
25
|
+
domainName,
|
|
26
|
+
recordName,
|
|
27
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
28
|
+
};
|
|
29
|
+
const record = new aws_route53_1.CnameRecord(scope, id, mergedProps);
|
|
30
|
+
return { record };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new {@link ICnameRecordBuilder} for configuring a Route53 CNAME
|
|
35
|
+
* record.
|
|
36
|
+
*
|
|
37
|
+
* @returns A fluent builder for a Route53 CNAME record.
|
|
38
|
+
*/
|
|
39
|
+
function createCnameRecordBuilder() {
|
|
40
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
41
|
+
return (0, core_1.Builder)(CnameRecordBuilder);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=cname-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cname-record-builder.js","sourceRoot":"","sources":["../../src/cname-record-builder.ts"],"names":[],"mappings":";;AAmFA,4DAGC;AAtFD,yDAA+F;AAE/F,6CAM4B;AAC5B,+CAAsD;AAgCtD,MAAM,kBAAkB;IACtB,KAAK,GAAqC,EAAE,CAAC;IAE7C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,sDAAsD,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,2BAA2B;gBAClD,qEAAqE,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,2BAA2B;gBAClD,mFAAmF,CACtF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,mCAAqB;YACxB,GAAG,IAAI;YACP,UAAU;YACV,UAAU;YACV,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"}
|
|
@@ -11,15 +11,41 @@ import type { DsRecordBuilderProps } from "./ds-record-builder.js";
|
|
|
11
11
|
import type { HttpsRecordBuilderProps } from "./https-record-builder.js";
|
|
12
12
|
import type { SvcbRecordBuilderProps } from "./svcb-record-builder.js";
|
|
13
13
|
import type { HealthCheckBuilderProps } from "./health-check-builder.js";
|
|
14
|
+
/**
|
|
15
|
+
* Naming prefix applied to every auto-created Route 53 query-log group. A
|
|
16
|
+
* single shared resource policy targets `<prefix>/*` so multiple hosted zones
|
|
17
|
+
* in the same stack share one `AWS::Logs::ResourcePolicy` (the per-region
|
|
18
|
+
* soft limit is 10). Matches the prefix the Route 53 console uses.
|
|
19
|
+
*
|
|
20
|
+
* @see https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html
|
|
21
|
+
*/
|
|
22
|
+
export declare const QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = "/aws/route53";
|
|
23
|
+
/**
|
|
24
|
+
* Construct id of the shared `AWS::Logs::ResourcePolicy` materialised once
|
|
25
|
+
* per stack when any hosted zone in that stack uses auto-managed query
|
|
26
|
+
* logging. Package-internal — used by the dedup helper and the unit tests, and
|
|
27
|
+
* intentionally not re-exported from the package barrel; consumers should not
|
|
28
|
+
* reference the policy directly.
|
|
29
|
+
*/
|
|
30
|
+
export declare const QUERY_LOGGING_RESOURCE_POLICY_ID = "ComposureCDKRoute53QueryLoggingPolicy";
|
|
31
|
+
/**
|
|
32
|
+
* Stable resource-policy name written into CloudWatch Logs so the policy is
|
|
33
|
+
* deduplicated when the same stack is re-synthesised across deployments.
|
|
34
|
+
*/
|
|
35
|
+
export declare const QUERY_LOGGING_RESOURCE_POLICY_NAME = "ComposureCDK-Route53QueryLogging";
|
|
14
36
|
/**
|
|
15
37
|
* Secure, AWS-recommended defaults applied to every public hosted zone built
|
|
16
38
|
* with {@link createHostedZoneBuilder}. Each property can be individually
|
|
17
39
|
* overridden via the builder's fluent API.
|
|
18
40
|
*
|
|
19
|
-
* Query logging is
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
41
|
+
* Query logging is enabled by default: the builder auto-creates a CloudWatch
|
|
42
|
+
* {@link import("aws-cdk-lib/aws-logs").LogGroup} under
|
|
43
|
+
* `${QUERY_LOGGING_LOG_GROUP_NAME_PREFIX}/<zoneName>` and a single shared
|
|
44
|
+
* `AWS::Logs::ResourcePolicy` granting `route53.amazonaws.com` permission to
|
|
45
|
+
* write log streams. Disable with `.queryLogging(false)` or supply a managed
|
|
46
|
+
* log group via `.queryLogging({ logGroupArn })`.
|
|
47
|
+
*
|
|
48
|
+
* @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html
|
|
23
49
|
*/
|
|
24
50
|
export declare const HOSTED_ZONE_DEFAULTS: Partial<HostedZoneBuilderProps>;
|
|
25
51
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,mCAAmC,iBAAiB,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,kCAAkC,qCAAqC,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAahE,CAAC;AAaF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,CAE1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAEhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAElE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAElE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAEhE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAIlE,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
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.HOSTED_ZONE_DEFAULTS = exports.QUERY_LOGGING_RESOURCE_POLICY_NAME = exports.QUERY_LOGGING_RESOURCE_POLICY_ID = exports.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Naming prefix applied to every auto-created Route 53 query-log group. A
|
|
7
|
+
* single shared resource policy targets `<prefix>/*` so multiple hosted zones
|
|
8
|
+
* in the same stack share one `AWS::Logs::ResourcePolicy` (the per-region
|
|
9
|
+
* soft limit is 10). Matches the prefix the Route 53 console uses.
|
|
10
|
+
*
|
|
11
|
+
* @see https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html
|
|
12
|
+
*/
|
|
13
|
+
exports.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = "/aws/route53";
|
|
14
|
+
/**
|
|
15
|
+
* Construct id of the shared `AWS::Logs::ResourcePolicy` materialised once
|
|
16
|
+
* per stack when any hosted zone in that stack uses auto-managed query
|
|
17
|
+
* logging. Package-internal — used by the dedup helper and the unit tests, and
|
|
18
|
+
* intentionally not re-exported from the package barrel; consumers should not
|
|
19
|
+
* reference the policy directly.
|
|
20
|
+
*/
|
|
21
|
+
exports.QUERY_LOGGING_RESOURCE_POLICY_ID = "ComposureCDKRoute53QueryLoggingPolicy";
|
|
22
|
+
/**
|
|
23
|
+
* Stable resource-policy name written into CloudWatch Logs so the policy is
|
|
24
|
+
* deduplicated when the same stack is re-synthesised across deployments.
|
|
25
|
+
*/
|
|
26
|
+
exports.QUERY_LOGGING_RESOURCE_POLICY_NAME = "ComposureCDK-Route53QueryLogging";
|
|
27
|
+
/**
|
|
28
|
+
* Secure, AWS-recommended defaults applied to every public hosted zone built
|
|
29
|
+
* with {@link createHostedZoneBuilder}. Each property can be individually
|
|
30
|
+
* overridden via the builder's fluent API.
|
|
31
|
+
*
|
|
32
|
+
* Query logging is enabled by default: the builder auto-creates a CloudWatch
|
|
33
|
+
* {@link import("aws-cdk-lib/aws-logs").LogGroup} under
|
|
34
|
+
* `${QUERY_LOGGING_LOG_GROUP_NAME_PREFIX}/<zoneName>` and a single shared
|
|
35
|
+
* `AWS::Logs::ResourcePolicy` granting `route53.amazonaws.com` permission to
|
|
36
|
+
* write log streams. Disable with `.queryLogging(false)` or supply a managed
|
|
37
|
+
* log group via `.queryLogging({ logGroupArn })`.
|
|
38
|
+
*
|
|
39
|
+
* @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html
|
|
40
|
+
*/
|
|
41
|
+
exports.HOSTED_ZONE_DEFAULTS = {
|
|
42
|
+
/**
|
|
43
|
+
* Add a trailing dot to the zone name so the apex is an unambiguous
|
|
44
|
+
* fully-qualified domain. Matches the CDK default and RFC 1035.
|
|
45
|
+
*/
|
|
46
|
+
addTrailingDot: true,
|
|
47
|
+
/**
|
|
48
|
+
* Enable DNS query logging out of the box, with the auto-managed log
|
|
49
|
+
* group and shared resource policy described above. Set to `false` or to
|
|
50
|
+
* `{ logGroupArn: '...' }` to deviate.
|
|
51
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_detect_investigate_events_app_service_logging.html
|
|
52
|
+
*/
|
|
53
|
+
queryLogging: {},
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Default TTL applied to records built by this package when no TTL is set.
|
|
57
|
+
*
|
|
58
|
+
* Five minutes balances propagation latency against downstream DNS cache
|
|
59
|
+
* churn. For alias records pointing at dynamic AWS resources (CloudFront,
|
|
60
|
+
* ALB), this matches AWS guidance.
|
|
61
|
+
*
|
|
62
|
+
* @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html
|
|
63
|
+
*/
|
|
64
|
+
const DEFAULT_RECORD_TTL = aws_cdk_lib_1.Duration.minutes(5);
|
|
65
|
+
/**
|
|
66
|
+
* Defaults for {@link createARecordBuilder}. Overridable via the fluent API.
|
|
67
|
+
* The builder skips the `ttl` default for alias targets — AWS ignores TTL on
|
|
68
|
+
* alias records and CDK emits a warning when one is set.
|
|
69
|
+
*/
|
|
70
|
+
exports.A_RECORD_DEFAULTS = {
|
|
71
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Defaults for {@link createAaaaRecordBuilder}. Overridable via the fluent API.
|
|
75
|
+
* Same alias-target caveat as {@link A_RECORD_DEFAULTS}.
|
|
76
|
+
*/
|
|
77
|
+
exports.AAAA_RECORD_DEFAULTS = {
|
|
78
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Defaults for {@link createCnameRecordBuilder}. Overridable via the fluent API.
|
|
82
|
+
*/
|
|
83
|
+
exports.CNAME_RECORD_DEFAULTS = {
|
|
84
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Defaults for {@link createTxtRecordBuilder}. Overridable via the fluent API.
|
|
88
|
+
*/
|
|
89
|
+
exports.TXT_RECORD_DEFAULTS = {
|
|
90
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Defaults for {@link createMxRecordBuilder}. Overridable via the fluent API.
|
|
94
|
+
*/
|
|
95
|
+
exports.MX_RECORD_DEFAULTS = {
|
|
96
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Defaults for {@link createSrvRecordBuilder}. Overridable via the fluent API.
|
|
100
|
+
*/
|
|
101
|
+
exports.SRV_RECORD_DEFAULTS = {
|
|
102
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Defaults for {@link createCaaRecordBuilder}. Overridable via the fluent API.
|
|
106
|
+
*/
|
|
107
|
+
exports.CAA_RECORD_DEFAULTS = {
|
|
108
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Defaults for {@link createNsRecordBuilder}. Overridable via the fluent API.
|
|
112
|
+
*
|
|
113
|
+
* A longer TTL is appropriate for delegation records — resolvers cache NS
|
|
114
|
+
* responses, and frequent churn forces parent-side re-delegation lookups.
|
|
115
|
+
*/
|
|
116
|
+
exports.NS_RECORD_DEFAULTS = {
|
|
117
|
+
ttl: aws_cdk_lib_1.Duration.hours(24),
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Defaults for {@link createDsRecordBuilder}. Overridable via the fluent API.
|
|
121
|
+
*
|
|
122
|
+
* DS records change rarely (key-signing rollovers); a long TTL reduces
|
|
123
|
+
* DNSSEC validation load on resolvers.
|
|
124
|
+
*/
|
|
125
|
+
exports.DS_RECORD_DEFAULTS = {
|
|
126
|
+
ttl: aws_cdk_lib_1.Duration.hours(24),
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Defaults for {@link createHttpsRecordBuilder}. Overridable via the fluent API.
|
|
130
|
+
* Same alias-target caveat as {@link A_RECORD_DEFAULTS}.
|
|
131
|
+
*/
|
|
132
|
+
exports.HTTPS_RECORD_DEFAULTS = {
|
|
133
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Defaults for {@link createSvcbRecordBuilder}. Overridable via the fluent API.
|
|
137
|
+
*/
|
|
138
|
+
exports.SVCB_RECORD_DEFAULTS = {
|
|
139
|
+
ttl: DEFAULT_RECORD_TTL,
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Defaults for {@link createHealthCheckBuilder}. Overridable via the fluent API.
|
|
143
|
+
*
|
|
144
|
+
* `failureThreshold` and `requestInterval` match CDK's defaults but are set
|
|
145
|
+
* explicitly so the values are surfaced in the package's defaults table and
|
|
146
|
+
* can be reasoned about without consulting CDK source. `measureLatency` is
|
|
147
|
+
* defaulted ON to align with the AWS Well-Architected operational-excellence
|
|
148
|
+
* pillar (per-region latency visibility on the Route 53 Health Checks
|
|
149
|
+
* console). It carries a small additional cost — disable explicitly via
|
|
150
|
+
* `.measureLatency(false)` if cost is a concern.
|
|
151
|
+
*
|
|
152
|
+
* @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-determining-health-of-endpoints.html
|
|
153
|
+
*/
|
|
154
|
+
exports.HEALTH_CHECK_DEFAULTS = {
|
|
155
|
+
failureThreshold: 3,
|
|
156
|
+
requestInterval: aws_cdk_lib_1.Duration.seconds(30),
|
|
157
|
+
measureLatency: true,
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAevC;;;;;;;GAOG;AACU,QAAA,mCAAmC,GAAG,cAAc,CAAC;AAElE;;;;;;GAMG;AACU,QAAA,gCAAgC,GAAG,uCAAuC,CAAC;AAExF;;;GAGG;AACU,QAAA,kCAAkC,GAAG,kCAAkC,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACU,QAAA,oBAAoB,GAAoC;IACnE;;;OAGG;IACH,cAAc,EAAE,IAAI;IACpB;;;;;OAKG;IACH,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,sBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE/C;;;;GAIG;AACU,QAAA,iBAAiB,GAAiC;IAC7D,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;GAGG;AACU,QAAA,oBAAoB,GAAoC;IACnE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAqC;IACrE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;;;GAKG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,sBAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,sBAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACU,QAAA,qBAAqB,GAAqC;IACrE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,oBAAoB,GAAoC;IACnE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACU,QAAA,qBAAqB,GAAqC;IACrE,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,cAAc,EAAE,IAAI;CACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-record-builder.d.ts","sourceRoot":"","sources":["../../src/ds-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;;;;;;;;GAQG;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.createDsRecordBuilder = createDsRecordBuilder;
|
|
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 DsRecordBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
build(scope, id, context) {
|
|
10
|
+
const { zone, values, ...rest } = this.props;
|
|
11
|
+
if (!zone) {
|
|
12
|
+
throw new Error(`DsRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
|
|
13
|
+
}
|
|
14
|
+
if (!values || values.length === 0) {
|
|
15
|
+
throw new Error(`DsRecordBuilder "${id}" requires non-empty values. ` +
|
|
16
|
+
`Call .values() with one or more DS rdata strings (keyTag algorithm digestType digest).`);
|
|
17
|
+
}
|
|
18
|
+
const mergedProps = {
|
|
19
|
+
...defaults_js_1.DS_RECORD_DEFAULTS,
|
|
20
|
+
...rest,
|
|
21
|
+
values,
|
|
22
|
+
zone: (0, core_1.resolve)(zone, context),
|
|
23
|
+
};
|
|
24
|
+
const record = new aws_route53_1.DsRecord(scope, id, mergedProps);
|
|
25
|
+
return { record };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new {@link IDsRecordBuilder} for configuring a Route53 DS record.
|
|
30
|
+
*
|
|
31
|
+
* @returns A fluent builder for a Route53 DS record.
|
|
32
|
+
*/
|
|
33
|
+
function createDsRecordBuilder() {
|
|
34
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
|
|
35
|
+
return (0, core_1.Builder)(DsRecordBuilder);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ds-record-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ds-record-builder.js","sourceRoot":"","sources":["../../src/ds-record-builder.ts"],"names":[],"mappings":";;AA0EA,sDAGC;AA7ED,yDAAyF;AAEzF,6CAM4B;AAC5B,+CAAmD;AAiCnD,MAAM,eAAe;IACnB,KAAK,GAAkC,EAAE,CAAC;IAE1C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,sDAAsD,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,oBAAoB,EAAE,+BAA+B;gBACnD,wFAAwF,CAC3F,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,gCAAkB;YACrB,GAAG,IAAI;YACP,MAAM;YACN,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACZ,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,sBAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,qBAAqB;IACnC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAAwC,eAAe,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type IHealthCheck } from "aws-cdk-lib/aws-route53";
|
|
2
2
|
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
3
|
import { type IConstruct } from "constructs";
|
|
4
|
-
import {
|
|
4
|
+
import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
|
|
5
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
5
6
|
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
6
7
|
import type { HealthCheckAlarmConfig } from "./health-check-alarm-config.js";
|
|
7
8
|
import type { HealthCheckBuilderResult } from "./health-check-builder.js";
|
|
@@ -51,7 +52,7 @@ export interface HealthCheckAlarmBuilderResult {
|
|
|
51
52
|
*
|
|
52
53
|
* @see {@link createHealthCheckAlarmBuilder}
|
|
53
54
|
*/
|
|
54
|
-
export type IHealthCheckAlarmBuilder =
|
|
55
|
+
export type IHealthCheckAlarmBuilder = ITaggedBuilder<HealthCheckAlarmBuilderProps, HealthCheckAlarmBuilder>;
|
|
55
56
|
/**
|
|
56
57
|
* Shared alarm-assembly used by both {@link createHealthCheckBuilder} (in its
|
|
57
58
|
* own stack) and {@link createHealthCheckAlarmBuilder} (typically in a
|
|
@@ -89,6 +90,8 @@ declare class HealthCheckAlarmBuilder implements Lifecycle<HealthCheckAlarmBuild
|
|
|
89
90
|
* the recommended ones.
|
|
90
91
|
*/
|
|
91
92
|
addAlarm(key: string, configure: (alarm: AlarmDefinitionBuilder<IHealthCheck>) => AlarmDefinitionBuilder<IHealthCheck>): this;
|
|
93
|
+
/** @internal — see ADR-0005. */
|
|
94
|
+
[COPY_STATE](target: HealthCheckAlarmBuilder): void;
|
|
92
95
|
build(scope: IConstruct, id: string, context?: Record<string, object>): HealthCheckAlarmBuilderResult;
|
|
93
96
|
}
|
|
94
97
|
/**
|