@composurecdk/ec2 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +22 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/instance-alarm-config.d.ts.map +1 -0
- package/dist/commonjs/instance-alarm-config.js +3 -0
- package/dist/commonjs/instance-alarm-config.js.map +1 -0
- package/dist/commonjs/instance-alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/instance-alarm-defaults.js +65 -0
- package/dist/commonjs/instance-alarm-defaults.js.map +1 -0
- package/dist/commonjs/instance-alarms.d.ts.map +1 -0
- package/dist/commonjs/instance-alarms.js +132 -0
- package/dist/commonjs/instance-alarms.js.map +1 -0
- package/dist/commonjs/instance-builder.d.ts.map +1 -0
- package/dist/commonjs/instance-builder.js +135 -0
- package/dist/commonjs/instance-builder.js.map +1 -0
- package/dist/commonjs/instance-defaults.d.ts.map +1 -0
- package/dist/commonjs/instance-defaults.js +62 -0
- package/dist/commonjs/instance-defaults.js.map +1 -0
- package/dist/commonjs/instance-volume-attachment-config.d.ts.map +1 -0
- package/dist/commonjs/instance-volume-attachment-config.js +3 -0
- package/dist/commonjs/instance-volume-attachment-config.js.map +1 -0
- package/dist/commonjs/instance-volume-attachment-defaults.d.ts.map +1 -0
- package/dist/commonjs/instance-volume-attachment-defaults.js +27 -0
- package/dist/commonjs/instance-volume-attachment-defaults.js.map +1 -0
- package/dist/commonjs/instance-volume-attachments.d.ts.map +1 -0
- package/dist/commonjs/instance-volume-attachments.js +107 -0
- package/dist/commonjs/instance-volume-attachments.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/volume-alarm-config.d.ts.map +1 -0
- package/dist/commonjs/volume-alarm-config.js +3 -0
- package/dist/commonjs/volume-alarm-config.js.map +1 -0
- package/dist/commonjs/volume-alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/volume-alarm-defaults.js +30 -0
- package/dist/commonjs/volume-alarm-defaults.js.map +1 -0
- package/dist/commonjs/volume-alarms.d.ts.map +1 -0
- package/dist/commonjs/volume-alarms.js +92 -0
- package/dist/commonjs/volume-alarms.js.map +1 -0
- package/dist/commonjs/volume-builder.d.ts.map +1 -0
- package/dist/commonjs/volume-builder.js +98 -0
- package/dist/commonjs/volume-builder.js.map +1 -0
- package/dist/commonjs/volume-defaults.d.ts.map +1 -0
- package/dist/commonjs/volume-defaults.js +50 -0
- package/dist/commonjs/volume-defaults.js.map +1 -0
- package/dist/commonjs/vpc-builder.d.ts.map +1 -0
- package/dist/commonjs/vpc-builder.js +82 -0
- package/dist/commonjs/vpc-builder.js.map +1 -0
- package/dist/commonjs/vpc-defaults.d.ts.map +1 -0
- package/dist/commonjs/vpc-defaults.js +58 -0
- package/dist/commonjs/vpc-defaults.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/instance-alarm-config.d.ts +62 -0
- package/dist/esm/instance-alarm-config.d.ts.map +1 -0
- package/dist/esm/instance-alarm-config.js.map +1 -0
- package/dist/esm/instance-alarm-defaults.d.ts +20 -0
- package/dist/esm/instance-alarm-defaults.d.ts.map +1 -0
- package/dist/esm/instance-alarm-defaults.js.map +1 -0
- package/dist/esm/instance-alarms.d.ts +28 -0
- package/dist/esm/instance-alarms.d.ts.map +1 -0
- package/dist/esm/instance-alarms.js.map +1 -0
- package/dist/esm/instance-builder.d.ts +223 -0
- package/dist/esm/instance-builder.d.ts.map +1 -0
- package/dist/esm/instance-builder.js.map +1 -0
- package/dist/esm/instance-defaults.d.ts +14 -0
- package/dist/esm/instance-defaults.d.ts.map +1 -0
- package/dist/esm/instance-defaults.js.map +1 -0
- package/dist/esm/instance-volume-attachment-config.d.ts +34 -0
- package/dist/esm/instance-volume-attachment-config.d.ts.map +1 -0
- package/dist/esm/instance-volume-attachment-config.js.map +1 -0
- package/dist/esm/instance-volume-attachment-defaults.d.ts +14 -0
- package/dist/esm/instance-volume-attachment-defaults.d.ts.map +1 -0
- package/dist/esm/instance-volume-attachment-defaults.js.map +1 -0
- package/dist/esm/instance-volume-attachments.d.ts +59 -0
- package/dist/esm/instance-volume-attachments.d.ts.map +1 -0
- package/dist/esm/instance-volume-attachments.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/volume-alarm-config.d.ts +35 -0
- package/dist/esm/volume-alarm-config.d.ts.map +1 -0
- package/dist/esm/volume-alarm-config.js.map +1 -0
- package/dist/esm/volume-alarm-defaults.d.ts +17 -0
- package/dist/esm/volume-alarm-defaults.d.ts.map +1 -0
- package/dist/esm/volume-alarm-defaults.js.map +1 -0
- package/dist/esm/volume-alarms.d.ts +29 -0
- package/dist/esm/volume-alarms.d.ts.map +1 -0
- package/dist/esm/volume-alarms.js.map +1 -0
- package/dist/esm/volume-builder.d.ts +171 -0
- package/dist/esm/volume-builder.d.ts.map +1 -0
- package/dist/esm/volume-builder.js.map +1 -0
- package/dist/esm/volume-defaults.d.ts +15 -0
- package/dist/esm/volume-defaults.d.ts.map +1 -0
- package/dist/esm/volume-defaults.js.map +1 -0
- package/dist/esm/vpc-builder.d.ts +110 -0
- package/dist/esm/vpc-builder.d.ts.map +1 -0
- package/dist/esm/vpc-builder.js.map +1 -0
- package/dist/esm/vpc-defaults.d.ts +15 -0
- package/dist/esm/vpc-defaults.d.ts.map +1 -0
- package/dist/esm/vpc-defaults.js.map +1 -0
- package/package.json +37 -19
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/instance-alarm-config.d.ts.map +0 -1
- package/dist/instance-alarm-config.js.map +0 -1
- package/dist/instance-alarm-defaults.d.ts.map +0 -1
- package/dist/instance-alarm-defaults.js.map +0 -1
- package/dist/instance-alarms.d.ts.map +0 -1
- package/dist/instance-alarms.js.map +0 -1
- package/dist/instance-builder.d.ts.map +0 -1
- package/dist/instance-builder.js.map +0 -1
- package/dist/instance-defaults.d.ts.map +0 -1
- package/dist/instance-defaults.js.map +0 -1
- package/dist/instance-volume-attachment-config.d.ts.map +0 -1
- package/dist/instance-volume-attachment-config.js.map +0 -1
- package/dist/instance-volume-attachment-defaults.d.ts.map +0 -1
- package/dist/instance-volume-attachment-defaults.js.map +0 -1
- package/dist/instance-volume-attachments.d.ts.map +0 -1
- package/dist/instance-volume-attachments.js.map +0 -1
- package/dist/volume-alarm-config.d.ts.map +0 -1
- package/dist/volume-alarm-config.js.map +0 -1
- package/dist/volume-alarm-defaults.d.ts.map +0 -1
- package/dist/volume-alarm-defaults.js.map +0 -1
- package/dist/volume-alarms.d.ts.map +0 -1
- package/dist/volume-alarms.js.map +0 -1
- package/dist/volume-builder.d.ts.map +0 -1
- package/dist/volume-builder.js.map +0 -1
- package/dist/volume-defaults.d.ts.map +0 -1
- package/dist/volume-defaults.js.map +0 -1
- package/dist/vpc-builder.d.ts.map +0 -1
- package/dist/vpc-builder.js.map +0 -1
- package/dist/vpc-defaults.d.ts.map +0 -1
- package/dist/vpc-defaults.js.map +0 -1
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{instance-alarm-config.d.ts → commonjs/instance-alarm-config.d.ts} +0 -0
- /package/dist/{instance-alarm-defaults.d.ts → commonjs/instance-alarm-defaults.d.ts} +0 -0
- /package/dist/{instance-alarms.d.ts → commonjs/instance-alarms.d.ts} +0 -0
- /package/dist/{instance-builder.d.ts → commonjs/instance-builder.d.ts} +0 -0
- /package/dist/{instance-defaults.d.ts → commonjs/instance-defaults.d.ts} +0 -0
- /package/dist/{instance-volume-attachment-config.d.ts → commonjs/instance-volume-attachment-config.d.ts} +0 -0
- /package/dist/{instance-volume-attachment-defaults.d.ts → commonjs/instance-volume-attachment-defaults.d.ts} +0 -0
- /package/dist/{instance-volume-attachments.d.ts → commonjs/instance-volume-attachments.d.ts} +0 -0
- /package/dist/{volume-alarm-config.d.ts → commonjs/volume-alarm-config.d.ts} +0 -0
- /package/dist/{volume-alarm-defaults.d.ts → commonjs/volume-alarm-defaults.d.ts} +0 -0
- /package/dist/{volume-alarms.d.ts → commonjs/volume-alarms.d.ts} +0 -0
- /package/dist/{volume-builder.d.ts → commonjs/volume-builder.d.ts} +0 -0
- /package/dist/{volume-defaults.d.ts → commonjs/volume-defaults.d.ts} +0 -0
- /package/dist/{vpc-builder.d.ts → commonjs/vpc-builder.d.ts} +0 -0
- /package/dist/{vpc-defaults.d.ts → commonjs/vpc-defaults.d.ts} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{instance-alarm-config.js → esm/instance-alarm-config.js} +0 -0
- /package/dist/{instance-alarm-defaults.js → esm/instance-alarm-defaults.js} +0 -0
- /package/dist/{instance-alarms.js → esm/instance-alarms.js} +0 -0
- /package/dist/{instance-builder.js → esm/instance-builder.js} +0 -0
- /package/dist/{instance-defaults.js → esm/instance-defaults.js} +0 -0
- /package/dist/{instance-volume-attachment-config.js → esm/instance-volume-attachment-config.js} +0 -0
- /package/dist/{instance-volume-attachment-defaults.js → esm/instance-volume-attachment-defaults.js} +0 -0
- /package/dist/{instance-volume-attachments.js → esm/instance-volume-attachments.js} +0 -0
- /package/dist/{volume-alarm-config.js → esm/volume-alarm-config.js} +0 -0
- /package/dist/{volume-alarm-defaults.js → esm/volume-alarm-defaults.js} +0 -0
- /package/dist/{volume-alarms.js → esm/volume-alarms.js} +0 -0
- /package/dist/{volume-builder.js → esm/volume-builder.js} +0 -0
- /package/dist/{volume-defaults.js → esm/volume-defaults.js} +0 -0
- /package/dist/{vpc-builder.js → esm/vpc-builder.js} +0 -0
- /package/dist/{vpc-defaults.js → esm/vpc-defaults.js} +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AlarmConfig } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which recommended alarms are created for an EC2 instance.
|
|
4
|
+
* All alarms are enabled by default with AWS-recommended thresholds.
|
|
5
|
+
* Set individual alarms to `false` to disable them, or provide an
|
|
6
|
+
* {@link AlarmConfig} to tune thresholds.
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
9
|
+
*/
|
|
10
|
+
export interface InstanceAlarmConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Master switch: set to `false` to disable all recommended alarms.
|
|
13
|
+
* Individual alarms can also be disabled via their own entry.
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Alarm when CPU utilization is sustained at a high level.
|
|
19
|
+
*
|
|
20
|
+
* Metric: `AWS/EC2 CPUUtilization`, statistic Average, period 1 minute.
|
|
21
|
+
* Default threshold: > 80% over 5 consecutive minutes.
|
|
22
|
+
*
|
|
23
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
24
|
+
*/
|
|
25
|
+
cpuUtilization?: AlarmConfig | false;
|
|
26
|
+
/**
|
|
27
|
+
* Alarm when the instance fails its EC2 or system status checks.
|
|
28
|
+
*
|
|
29
|
+
* Metric: `AWS/EC2 StatusCheckFailed`, statistic Sum, period 1 minute.
|
|
30
|
+
* Default threshold: > 0 failures over 2 consecutive minutes.
|
|
31
|
+
*
|
|
32
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
33
|
+
*/
|
|
34
|
+
statusCheckFailed?: AlarmConfig | false;
|
|
35
|
+
/**
|
|
36
|
+
* Alarm when the instance's attached EBS volumes are unreachable or
|
|
37
|
+
* unable to complete I/O — typically a host or storage-subsystem issue.
|
|
38
|
+
*
|
|
39
|
+
* Metric: `AWS/EC2 StatusCheckFailed_AttachedEBS`, statistic Maximum,
|
|
40
|
+
* period 1 minute. Default threshold: >= 1 over 10 consecutive minutes
|
|
41
|
+
* (the longer window reflects that EBS infrastructure usually self-heals
|
|
42
|
+
* within a few minutes).
|
|
43
|
+
*
|
|
44
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
45
|
+
*/
|
|
46
|
+
attachedEbsStatusCheckFailed?: AlarmConfig | false;
|
|
47
|
+
/**
|
|
48
|
+
* Alarm when burstable (T-family) CPU credit balance falls low,
|
|
49
|
+
* indicating the instance is about to be throttled to baseline.
|
|
50
|
+
*
|
|
51
|
+
* Only created when the `instanceType` family is one of: t2, t3, t3a, t4g.
|
|
52
|
+
* For other instance types this alarm is skipped entirely.
|
|
53
|
+
*
|
|
54
|
+
* Metric: `AWS/EC2 CPUCreditBalance`, statistic Minimum, period 5 minutes.
|
|
55
|
+
* Default threshold: < 50 credits over 3 consecutive 5-minute windows.
|
|
56
|
+
*
|
|
57
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
58
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
|
|
59
|
+
*/
|
|
60
|
+
cpuCreditBalance?: AlarmConfig | false;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=instance-alarm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarm-config.d.ts","sourceRoot":"","sources":["../../src/instance-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAErC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAExC;;;;;;;;;;OAUG;IACH,4BAA4B,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEnD;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarm-config.js","sourceRoot":"","sources":["../../src/instance-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
|
|
2
|
+
interface InstanceAlarmDefaults {
|
|
3
|
+
enabled: true;
|
|
4
|
+
cpuUtilization: AlarmConfigDefaults;
|
|
5
|
+
statusCheckFailed: AlarmConfigDefaults;
|
|
6
|
+
attachedEbsStatusCheckFailed: AlarmConfigDefaults;
|
|
7
|
+
cpuCreditBalance: AlarmConfigDefaults;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* AWS-recommended default alarm configuration for EC2 instances.
|
|
11
|
+
*
|
|
12
|
+
* Thresholds are sourced from the CloudWatch Best Practice Recommended
|
|
13
|
+
* Alarms guide. Thresholds may reasonably be tuned per-workload; defaults
|
|
14
|
+
* bias toward catching obvious issues without excessive noise.
|
|
15
|
+
*
|
|
16
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
17
|
+
*/
|
|
18
|
+
export declare const INSTANCE_ALARM_DEFAULTS: InstanceAlarmDefaults;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=instance-alarm-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/instance-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,cAAc,EAAE,mBAAmB,CAAC;IACpC,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,4BAA4B,EAAE,mBAAmB,CAAC;IAClD,gBAAgB,EAAE,mBAAmB,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,EAAE,qBAsDrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarm-defaults.js","sourceRoot":"","sources":["../../src/instance-alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAW9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,OAAO,EAAE,IAAI;IAEb;;;;OAIG;IACH,cAAc,EAAE;QACd,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;OAIG;IACH,iBAAiB,EAAE;QACjB,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;;;OAMG;IACH,4BAA4B,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;;;OAMG;IACH,gBAAgB,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { Instance, InstanceProps } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import type { IConstruct } from "constructs";
|
|
4
|
+
import type { AlarmDefinition } from "@composurecdk/cloudwatch";
|
|
5
|
+
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
6
|
+
import type { InstanceAlarmConfig } from "./instance-alarm-config.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
9
|
+
* {@link AlarmDefinition}s, applying contextual logic for the
|
|
10
|
+
* burstable-only CPU credit alarm.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveInstanceAlarmDefinitions(instance: Instance, config: InstanceAlarmConfig | undefined, props: Pick<InstanceProps, "instanceType">): AlarmDefinition[];
|
|
13
|
+
/**
|
|
14
|
+
* Creates AWS-recommended CloudWatch alarms for an EC2 instance,
|
|
15
|
+
* merging recommended definitions with any custom alarm builders.
|
|
16
|
+
*
|
|
17
|
+
* @param scope - CDK construct scope for creating alarm constructs.
|
|
18
|
+
* @param id - Base identifier for alarm construct ids.
|
|
19
|
+
* @param instance - The EC2 instance to create alarms for.
|
|
20
|
+
* @param config - User-provided alarm configuration, or `false` to disable all.
|
|
21
|
+
* @param props - The merged instance props, used for contextual alarm thresholds.
|
|
22
|
+
* @param customAlarms - Custom alarm builders added via `addAlarm()`.
|
|
23
|
+
* @returns A record mapping alarm keys to their created Alarm constructs.
|
|
24
|
+
*
|
|
25
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
26
|
+
*/
|
|
27
|
+
export declare function createInstanceAlarms(scope: IConstruct, id: string, instance: Instance, config: InstanceAlarmConfig | false | undefined, props: Pick<InstanceProps, "instanceType">, customAlarms?: AlarmDefinitionBuilder<Instance>[]): Record<string, Alarm>;
|
|
28
|
+
//# sourceMappingURL=instance-alarms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarms.d.ts","sourceRoot":"","sources":["../../src/instance-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAqC,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAa,QAAQ,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAoC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AA6CtE;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,GACzC,eAAe,EAAE,CA2EnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,mBAAmB,GAAG,KAAK,GAAG,SAAS,EAC/C,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAC1C,YAAY,GAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAO,GACpD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarms.js","sourceRoot":"","sources":["../../src/instance-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import { type CfnVolumeAttachment, Instance, type IKeyPair, type ISecurityGroup, type IVpc, type InstanceProps } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import { type IRole } from "aws-cdk-lib/aws-iam";
|
|
4
|
+
import { type IConstruct } from "constructs";
|
|
5
|
+
import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
|
|
6
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
7
|
+
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
8
|
+
import type { InstanceAlarmConfig } from "./instance-alarm-config.js";
|
|
9
|
+
import { type AttachVolumeOptions, type AttachVolumeRef } from "./instance-volume-attachments.js";
|
|
10
|
+
/**
|
|
11
|
+
* Configuration properties for the EC2 instance builder.
|
|
12
|
+
*
|
|
13
|
+
* Extends the CDK {@link InstanceProps} but lifts the cross-component-wiring
|
|
14
|
+
* props to {@link Resolvable} so they can be supplied as either concrete
|
|
15
|
+
* values or {@link Ref}s to sibling components in a {@link compose}d system:
|
|
16
|
+
*
|
|
17
|
+
* - `vpc` is supplied via the dedicated
|
|
18
|
+
* {@link IInstanceBuilder.vpc | .vpc()} method.
|
|
19
|
+
* - `role`, `keyPair`, and `securityGroup` are exposed on the builder as
|
|
20
|
+
* `Resolvable<T>` setters.
|
|
21
|
+
*
|
|
22
|
+
* Other props (`instanceType`, `machineImage`, `userData`, `blockDevices`,
|
|
23
|
+
* etc.) are passed through with their CDK types unchanged because they are
|
|
24
|
+
* almost always constructed inline rather than referenced from another
|
|
25
|
+
* component.
|
|
26
|
+
*/
|
|
27
|
+
export interface InstanceBuilderProps extends Omit<InstanceProps, "vpc" | "role" | "keyPair" | "securityGroup"> {
|
|
28
|
+
/**
|
|
29
|
+
* IAM role assumed by the instance via its instance profile.
|
|
30
|
+
*
|
|
31
|
+
* Accepts a concrete {@link IRole} or a {@link Ref} that resolves to one
|
|
32
|
+
* at build time, e.g. a sibling `RoleBuilder` in the same composed system.
|
|
33
|
+
*
|
|
34
|
+
* @default - CDK creates a role and attaches `AmazonSSMManagedInstanceCore`,
|
|
35
|
+
* driven by the `ssmSessionPermissions: true` default in
|
|
36
|
+
* {@link INSTANCE_DEFAULTS}.
|
|
37
|
+
*/
|
|
38
|
+
role?: Resolvable<IRole>;
|
|
39
|
+
/**
|
|
40
|
+
* Key pair to associate with the instance.
|
|
41
|
+
*
|
|
42
|
+
* Accepts a concrete {@link IKeyPair} or a {@link Ref} that resolves to
|
|
43
|
+
* one at build time.
|
|
44
|
+
*
|
|
45
|
+
* @default - no key pair is associated; SSM Session Manager is the
|
|
46
|
+
* recommended access path.
|
|
47
|
+
*/
|
|
48
|
+
keyPair?: Resolvable<IKeyPair>;
|
|
49
|
+
/**
|
|
50
|
+
* Primary security group for the instance.
|
|
51
|
+
*
|
|
52
|
+
* Accepts a concrete {@link ISecurityGroup} or a {@link Ref} that resolves
|
|
53
|
+
* to one at build time. Additional security groups can be attached via
|
|
54
|
+
* `instance.addSecurityGroup()` after build.
|
|
55
|
+
*
|
|
56
|
+
* @default - CDK creates a security group allowing all outbound traffic.
|
|
57
|
+
*/
|
|
58
|
+
securityGroup?: Resolvable<ISecurityGroup>;
|
|
59
|
+
/**
|
|
60
|
+
* Configuration for AWS-recommended CloudWatch alarms.
|
|
61
|
+
*
|
|
62
|
+
* By default, the builder creates recommended alarms with sensible
|
|
63
|
+
* thresholds for every applicable metric. Individual alarms can be
|
|
64
|
+
* customized or disabled. Set to `false` to disable all alarms.
|
|
65
|
+
*
|
|
66
|
+
* No alarm actions are configured by default since notification methods
|
|
67
|
+
* are user-specific. Access alarms from the build result or use an
|
|
68
|
+
* `afterBuild` hook to apply actions.
|
|
69
|
+
*
|
|
70
|
+
* Contextual alarms (`cpuCreditBalance`) are only created when the
|
|
71
|
+
* corresponding instance configuration is present — e.g., burstable
|
|
72
|
+
* T-family instance types.
|
|
73
|
+
*
|
|
74
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
75
|
+
*/
|
|
76
|
+
recommendedAlarms?: InstanceAlarmConfig | false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The build output of a {@link IInstanceBuilder}. Contains the CDK
|
|
80
|
+
* constructs created during {@link Lifecycle.build}, keyed by role.
|
|
81
|
+
*/
|
|
82
|
+
export interface InstanceBuilderResult {
|
|
83
|
+
instance: Instance;
|
|
84
|
+
/**
|
|
85
|
+
* CloudWatch alarms created for the instance, keyed by alarm name.
|
|
86
|
+
*
|
|
87
|
+
* Includes AWS-recommended instance alarms, any custom alarms added
|
|
88
|
+
* via {@link IInstanceBuilder.addAlarm}, and per-attachment alarms
|
|
89
|
+
* added by {@link IInstanceBuilder.attachVolume} (keyed
|
|
90
|
+
* `${attachmentKey}.${alarmKey}`, e.g. `AgentData.volumeStalledIo`).
|
|
91
|
+
*
|
|
92
|
+
* No alarm actions are configured — apply them via the result or an
|
|
93
|
+
* `afterBuild` hook.
|
|
94
|
+
*
|
|
95
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
96
|
+
*/
|
|
97
|
+
alarms: Record<string, Alarm>;
|
|
98
|
+
/**
|
|
99
|
+
* `AWS::EC2::VolumeAttachment` constructs created via
|
|
100
|
+
* {@link IInstanceBuilder.attachVolume}, keyed by the attachment key
|
|
101
|
+
* supplied in that call.
|
|
102
|
+
*
|
|
103
|
+
* Empty when no volumes were attached.
|
|
104
|
+
*/
|
|
105
|
+
volumeAttachments: Record<string, CfnVolumeAttachment>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A fluent builder for configuring and creating an AWS EC2 instance.
|
|
109
|
+
*
|
|
110
|
+
* Each configuration property from the CDK {@link InstanceProps} is exposed
|
|
111
|
+
* as an overloaded method: call with a value to set it (returns the builder
|
|
112
|
+
* for chaining), or call with no arguments to read the current value.
|
|
113
|
+
*
|
|
114
|
+
* The `vpc` is set via the dedicated {@link IInstanceBuilder.vpc | .vpc()}
|
|
115
|
+
* method that accepts a {@link Resolvable} value for cross-component wiring
|
|
116
|
+
* (e.g., to a sibling {@link IVpcBuilder}). The `role`, `keyPair`, and
|
|
117
|
+
* `securityGroup` setters likewise accept {@link Resolvable} values so they
|
|
118
|
+
* can be supplied by sibling builders' outputs via {@link ref}.
|
|
119
|
+
*
|
|
120
|
+
* The builder implements {@link Lifecycle}, so it can be used directly as a
|
|
121
|
+
* component in a {@link compose | composed system}. When built, it creates
|
|
122
|
+
* an EC2 instance with the configured properties and returns an
|
|
123
|
+
* {@link InstanceBuilderResult}.
|
|
124
|
+
*
|
|
125
|
+
* AWS-recommended CloudWatch alarms are created by default. Alarms can be
|
|
126
|
+
* customized or disabled via the `recommendedAlarms` property. Custom
|
|
127
|
+
* alarms can be added via the {@link addAlarm} method.
|
|
128
|
+
*
|
|
129
|
+
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2-readme.html
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* const server = createInstanceBuilder()
|
|
134
|
+
* .vpc(vpc)
|
|
135
|
+
* .instanceType(InstanceType.of(InstanceClass.T3, InstanceSize.MICRO))
|
|
136
|
+
* .machineImage(MachineImage.latestAmazonLinux2023());
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export type IInstanceBuilder = ITaggedBuilder<InstanceBuilderProps, InstanceBuilder>;
|
|
140
|
+
declare class InstanceBuilder implements Lifecycle<InstanceBuilderResult> {
|
|
141
|
+
#private;
|
|
142
|
+
props: Partial<InstanceBuilderProps>;
|
|
143
|
+
/**
|
|
144
|
+
* Sets the VPC the instance will be launched into.
|
|
145
|
+
*
|
|
146
|
+
* Accepts a concrete {@link IVpc} or a {@link Ref} that resolves to one
|
|
147
|
+
* at build time. This is how cross-component wiring works — e.g., to a
|
|
148
|
+
* sibling {@link IVpcBuilder} in the same composed system.
|
|
149
|
+
*
|
|
150
|
+
* @param vpc - The VPC or a Ref to one.
|
|
151
|
+
* @returns This builder for chaining.
|
|
152
|
+
*/
|
|
153
|
+
vpc(vpc: Resolvable<IVpc>): this;
|
|
154
|
+
/**
|
|
155
|
+
* Adds a custom CloudWatch alarm to be created alongside the recommended
|
|
156
|
+
* alarms. The provided callback receives an {@link AlarmDefinitionBuilder}
|
|
157
|
+
* scoped to the built {@link Instance}; configure it fluently and return it.
|
|
158
|
+
*
|
|
159
|
+
* @param key - A unique key for the alarm (used to generate the alarm id).
|
|
160
|
+
* @param configure - Callback that configures the alarm definition.
|
|
161
|
+
* @returns This builder for chaining.
|
|
162
|
+
*/
|
|
163
|
+
addAlarm(key: string, configure: (alarm: AlarmDefinitionBuilder<Instance>) => AlarmDefinitionBuilder<Instance>): this;
|
|
164
|
+
/**
|
|
165
|
+
* Attaches an externally-managed EBS volume to the instance via an
|
|
166
|
+
* `AWS::EC2::VolumeAttachment` resource, mirroring the call shape of
|
|
167
|
+
* {@link addAlarm}.
|
|
168
|
+
*
|
|
169
|
+
* The `volumeRef` accepts either a `Resolvable<VolumeBuilderResult>`
|
|
170
|
+
* (drop a `ref<VolumeBuilderResult>("data")` straight in) or a
|
|
171
|
+
* `Resolvable<IVolume>` for an externally-managed volume — the builder
|
|
172
|
+
* unwraps either at build time.
|
|
173
|
+
*
|
|
174
|
+
* When both AZs are concrete at synth time, the builder asserts the
|
|
175
|
+
* instance and the volume are in the same Availability Zone — synth-
|
|
176
|
+
* time failure beats boot-time failure for AZ mismatches.
|
|
177
|
+
*
|
|
178
|
+
* Per-attachment AWS-recommended alarms (e.g. `volumeStalledIo`) are
|
|
179
|
+
* created by default and merged into the result's `alarms` record
|
|
180
|
+
* under prefixed keys (`${attachmentKey}.${alarmKey}`).
|
|
181
|
+
*
|
|
182
|
+
* @param key - Unique key for the attachment (used as the result-map
|
|
183
|
+
* field name and as the construct id suffix).
|
|
184
|
+
* @param volumeRef - Resolvable to the volume to attach.
|
|
185
|
+
* @param options - Attachment options (`device`, `recommendedAlarms`).
|
|
186
|
+
* @returns This builder for chaining.
|
|
187
|
+
*/
|
|
188
|
+
attachVolume(key: string, volumeRef: AttachVolumeRef, options: AttachVolumeOptions): this;
|
|
189
|
+
/** @internal — see ADR-0005. */
|
|
190
|
+
[COPY_STATE](target: InstanceBuilder): void;
|
|
191
|
+
build(scope: IConstruct, id: string, context?: Record<string, object>): InstanceBuilderResult;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Creates a new {@link IInstanceBuilder} for configuring an AWS EC2 instance.
|
|
195
|
+
*
|
|
196
|
+
* This is the entry point for defining an EC2 instance component. The
|
|
197
|
+
* returned builder exposes every {@link InstanceBuilderProps} property as a
|
|
198
|
+
* fluent setter/getter, plus {@link IInstanceBuilder.vpc | .vpc()} for
|
|
199
|
+
* cross-component VPC wiring with Ref support. It implements
|
|
200
|
+
* {@link Lifecycle} for use with {@link compose}.
|
|
201
|
+
*
|
|
202
|
+
* @returns A fluent builder for an AWS EC2 instance.
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```ts
|
|
206
|
+
* const server = createInstanceBuilder()
|
|
207
|
+
* .vpc(ref<VpcBuilderResult>("network").get("vpc"))
|
|
208
|
+
* .instanceType(InstanceType.of(InstanceClass.T3, InstanceSize.MICRO))
|
|
209
|
+
* .machineImage(MachineImage.latestAmazonLinux2023());
|
|
210
|
+
*
|
|
211
|
+
* // Use standalone:
|
|
212
|
+
* const result = server.build(stack, "MyInstance");
|
|
213
|
+
*
|
|
214
|
+
* // Or compose into a system:
|
|
215
|
+
* const system = compose(
|
|
216
|
+
* { network: createVpcBuilder(), server },
|
|
217
|
+
* { network: [], server: ["network"] },
|
|
218
|
+
* );
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export declare function createInstanceBuilder(): IInstanceBuilder;
|
|
222
|
+
export {};
|
|
223
|
+
//# sourceMappingURL=instance-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-builder.d.ts","sourceRoot":"","sources":["../../src/instance-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,KAAK,mBAAmB,EACxB,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAGrB,MAAM,kCAAkC,CAAC;AAE1C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,aAAa,EACb,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAC7C;IACC;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAEzB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE/B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAE3C;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;;;;;;;;;;OAYG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAErF,cAAM,eAAgB,YAAW,SAAS,CAAC,qBAAqB,CAAC;;IAC/D,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAM;IAK1C;;;;;;;;;OASG;IACH,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI;IAKhC;;;;;;;;OAQG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,sBAAsB,CAAC,QAAQ,CAAC,GACvF,IAAI;IAKP;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAQzF,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAM3C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,qBAAqB;CAoD9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-builder.js","sourceRoot":"","sources":["../../src/instance-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type InstanceProps } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
/**
|
|
3
|
+
* Secure, AWS-recommended defaults applied to every EC2 instance built with
|
|
4
|
+
* {@link createInstanceBuilder}. Each property can be individually overridden
|
|
5
|
+
* via the builder's fluent API.
|
|
6
|
+
*
|
|
7
|
+
* Three required properties intentionally have no default — they are
|
|
8
|
+
* application-specific and must be supplied explicitly:
|
|
9
|
+
* - `vpc` (via the builder's `.vpc()` method)
|
|
10
|
+
* - `instanceType`
|
|
11
|
+
* - `machineImage`
|
|
12
|
+
*/
|
|
13
|
+
export declare const INSTANCE_DEFAULTS: Partial<InstanceProps>;
|
|
14
|
+
//# sourceMappingURL=instance-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-defaults.d.ts","sourceRoot":"","sources":["../../src/instance-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEjG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAiDpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-defaults.js","sourceRoot":"","sources":["../../src/instance-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AAEjG;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD;;;;;OAKG;IACH,aAAa,EAAE,IAAI;IAEnB;;;;;OAKG;IACH,kBAAkB,EAAE,IAAI;IAExB;;;;;OAKG;IACH,qBAAqB,EAAE,IAAI;IAE3B;;;;;OAKG;IACH,YAAY,EAAE,IAAI;IAElB;;;;;;OAMG;IACH,YAAY,EAAE;QACZ;YACE,UAAU,EAAE,WAAW;YACvB,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC/B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,mBAAmB,CAAC,GAAG;aACpC,CAAC;SACH;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AlarmConfig } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which recommended alarms are created for a per-attachment EBS
|
|
4
|
+
* volume on an EC2 instance.
|
|
5
|
+
*
|
|
6
|
+
* Default thresholds are sourced from the AWS-recommended CloudWatch
|
|
7
|
+
* alarm guide. Set the master switch or individual alarms to `false` to
|
|
8
|
+
* disable them, or provide an {@link AlarmConfig} to tune thresholds.
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
11
|
+
*/
|
|
12
|
+
export interface VolumeAttachmentAlarmConfig {
|
|
13
|
+
/**
|
|
14
|
+
* Master switch: set to `false` to disable all per-attachment alarms.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
enabled?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Alarm when the per-attachment EBS volume status check reports a
|
|
20
|
+
* stalled I/O condition — typically a host or storage-subsystem issue
|
|
21
|
+
* for that specific attachment.
|
|
22
|
+
*
|
|
23
|
+
* Metric: `AWS/EBS VolumeStalledIOCheck`, statistic Maximum,
|
|
24
|
+
* period 1 minute. Default threshold: >= 1 over 10 consecutive minutes.
|
|
25
|
+
*
|
|
26
|
+
* The metric is published only for Nitro-instance attachments. On
|
|
27
|
+
* non-Nitro instances the alarm sits at `INSUFFICIENT_DATA`, which the
|
|
28
|
+
* `treatMissingData: NOT_BREACHING` default makes harmless.
|
|
29
|
+
*
|
|
30
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
31
|
+
*/
|
|
32
|
+
volumeStalledIo?: AlarmConfig | false;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=instance-volume-attachment-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachment-config.d.ts","sourceRoot":"","sources":["../../src/instance-volume-attachment-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachment-config.js","sourceRoot":"","sources":["../../src/instance-volume-attachment-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
|
|
2
|
+
interface VolumeAttachmentAlarmDefaults {
|
|
3
|
+
enabled: true;
|
|
4
|
+
volumeStalledIo: AlarmConfigDefaults;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* AWS-recommended default alarm configuration for per-attachment EBS
|
|
8
|
+
* volumes.
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
11
|
+
*/
|
|
12
|
+
export declare const VOLUME_ATTACHMENT_ALARM_DEFAULTS: VolumeAttachmentAlarmDefaults;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=instance-volume-attachment-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachment-defaults.d.ts","sourceRoot":"","sources":["../../src/instance-volume-attachment-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,6BAA6B;IACrC,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,6BAgB9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachment-defaults.js","sourceRoot":"","sources":["../../src/instance-volume-attachment-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQ9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAkC;IAC7E,OAAO,EAAE,IAAI;IAEb;;;;;;OAMG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import { CfnVolumeAttachment, type Instance, type InstanceProps, type IVolume } from "aws-cdk-lib/aws-ec2";
|
|
3
|
+
import type { IConstruct } from "constructs";
|
|
4
|
+
import { type Resolvable } from "@composurecdk/core";
|
|
5
|
+
import type { VolumeBuilderResult } from "./volume-builder.js";
|
|
6
|
+
import type { VolumeAttachmentAlarmConfig } from "./instance-volume-attachment-config.js";
|
|
7
|
+
/**
|
|
8
|
+
* Reference to the volume to be attached. Either a sibling
|
|
9
|
+
* {@link VolumeBuilderResult} (the common composed-system case) or a
|
|
10
|
+
* concrete {@link IVolume} (for externally-managed volumes).
|
|
11
|
+
*/
|
|
12
|
+
export type AttachVolumeRef = Resolvable<VolumeBuilderResult> | Resolvable<IVolume>;
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for a single `attachVolume` call.
|
|
15
|
+
*/
|
|
16
|
+
export interface AttachVolumeOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Linux device name to attach the volume as (e.g. `/dev/sdf`).
|
|
19
|
+
*
|
|
20
|
+
* The Linux kernel may rename this to `xvdf` etc. on the instance —
|
|
21
|
+
* resolve mounts via UUID rather than the device path.
|
|
22
|
+
*
|
|
23
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html
|
|
24
|
+
*/
|
|
25
|
+
device: string;
|
|
26
|
+
/**
|
|
27
|
+
* Configuration for the per-attachment recommended alarms.
|
|
28
|
+
*
|
|
29
|
+
* @default - alarms enabled with the defaults in
|
|
30
|
+
* {@link VOLUME_ATTACHMENT_ALARM_DEFAULTS}.
|
|
31
|
+
*/
|
|
32
|
+
recommendedAlarms?: VolumeAttachmentAlarmConfig | false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Internal config captured by {@link IInstanceBuilder.attachVolume} and
|
|
36
|
+
* forwarded to {@link createVolumeAttachments} at build time.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export interface PendingVolumeAttachment {
|
|
41
|
+
key: string;
|
|
42
|
+
volumeRef: AttachVolumeRef;
|
|
43
|
+
options: AttachVolumeOptions;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates a {@link CfnVolumeAttachment} for each pending attachment and
|
|
47
|
+
* (when configured) the per-attachment recommended alarms. Synth-time AZ
|
|
48
|
+
* alignment is validated when both the volume's AZ and the instance's
|
|
49
|
+
* effective AZ are concrete strings.
|
|
50
|
+
*
|
|
51
|
+
* @returns The created `CfnVolumeAttachment`s keyed by attachment key,
|
|
52
|
+
* plus the per-attachment alarms keyed by `${attachmentKey}.${alarmKey}`
|
|
53
|
+
* so they can be flat-merged into the instance's `alarms` record.
|
|
54
|
+
*/
|
|
55
|
+
export declare function createVolumeAttachments(scope: IConstruct, id: string, instance: Instance, instanceProps: InstanceProps, attachments: PendingVolumeAttachment[], context?: Record<string, object>): {
|
|
56
|
+
attachments: Record<string, CfnVolumeAttachment>;
|
|
57
|
+
alarms: Record<string, Alarm>;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=instance-volume-attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachments.d.ts","sourceRoot":"","sources":["../../src/instance-volume-attachments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAqC,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EACL,mBAAmB,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,OAAO,EAEb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAM1F;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,mBAAmB,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,2BAA2B,GAAG,KAAK,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAsFD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,uBAAuB,EAAE,EACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,CAwCrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachments.js","sourceRoot":"","sources":["../../src/instance-volume-attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AlarmConfig } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which recommended alarms are created for an EBS volume.
|
|
4
|
+
* All applicable alarms are enabled by default with AWS-recommended
|
|
5
|
+
* thresholds. Set individual alarms to `false` to disable them, or
|
|
6
|
+
* provide an {@link AlarmConfig} to tune thresholds.
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
9
|
+
*/
|
|
10
|
+
export interface VolumeAlarmConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Master switch: set to `false` to disable all recommended alarms.
|
|
13
|
+
* Individual alarms can also be disabled via their own entry.
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Alarm when a burstable volume's I/O credit balance falls low,
|
|
19
|
+
* indicating the volume is about to be throttled to baseline IOPS or
|
|
20
|
+
* throughput.
|
|
21
|
+
*
|
|
22
|
+
* Only created when the configured `volumeType` is one of the burstable
|
|
23
|
+
* types: `gp2` (IOPS credits), `st1` and `sc1` (throughput credits).
|
|
24
|
+
* For non-burstable types (`gp3`, `io1`, `io2`, `standard`) the metric
|
|
25
|
+
* is not emitted, so the alarm is skipped entirely.
|
|
26
|
+
*
|
|
27
|
+
* Metric: `AWS/EBS BurstBalance`, statistic Average, period 5 minutes.
|
|
28
|
+
* Default threshold: < 20% over 3 consecutive 5-minute windows.
|
|
29
|
+
*
|
|
30
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
31
|
+
* @see https://docs.aws.amazon.com/ebs/latest/userguide/general-purpose.html#gp2-volume-performance
|
|
32
|
+
*/
|
|
33
|
+
burstBalance?: AlarmConfig | false;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=volume-alarm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-alarm-config.d.ts","sourceRoot":"","sources":["../../src/volume-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-alarm-config.js","sourceRoot":"","sources":["../../src/volume-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
|
|
2
|
+
interface VolumeAlarmDefaults {
|
|
3
|
+
enabled: true;
|
|
4
|
+
burstBalance: AlarmConfigDefaults;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* AWS-recommended default alarm configuration for EBS volumes.
|
|
8
|
+
*
|
|
9
|
+
* Thresholds are sourced from the CloudWatch Best Practice Recommended
|
|
10
|
+
* Alarms guide. Thresholds may reasonably be tuned per-workload; defaults
|
|
11
|
+
* bias toward catching obvious issues without excessive noise.
|
|
12
|
+
*
|
|
13
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
14
|
+
*/
|
|
15
|
+
export declare const VOLUME_ALARM_DEFAULTS: VolumeAlarmDefaults;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=volume-alarm-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/volume-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,mBAAmB;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAgBnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-alarm-defaults.js","sourceRoot":"","sources":["../../src/volume-alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQ9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,OAAO,EAAE,IAAI;IAEb;;;;;;OAMG;IACH,YAAY,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|