@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAE5F,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VPC_DEFAULTS = exports.createVpcBuilder = exports.VOLUME_ALARM_DEFAULTS = exports.VOLUME_DEFAULTS = exports.createVolumeBuilder = exports.VOLUME_ATTACHMENT_ALARM_DEFAULTS = exports.INSTANCE_ALARM_DEFAULTS = exports.INSTANCE_DEFAULTS = exports.createInstanceBuilder = void 0;
|
|
4
|
+
var instance_builder_js_1 = require("./instance-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createInstanceBuilder", { enumerable: true, get: function () { return instance_builder_js_1.createInstanceBuilder; } });
|
|
6
|
+
var instance_defaults_js_1 = require("./instance-defaults.js");
|
|
7
|
+
Object.defineProperty(exports, "INSTANCE_DEFAULTS", { enumerable: true, get: function () { return instance_defaults_js_1.INSTANCE_DEFAULTS; } });
|
|
8
|
+
var instance_alarm_defaults_js_1 = require("./instance-alarm-defaults.js");
|
|
9
|
+
Object.defineProperty(exports, "INSTANCE_ALARM_DEFAULTS", { enumerable: true, get: function () { return instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS; } });
|
|
10
|
+
var instance_volume_attachment_defaults_js_1 = require("./instance-volume-attachment-defaults.js");
|
|
11
|
+
Object.defineProperty(exports, "VOLUME_ATTACHMENT_ALARM_DEFAULTS", { enumerable: true, get: function () { return instance_volume_attachment_defaults_js_1.VOLUME_ATTACHMENT_ALARM_DEFAULTS; } });
|
|
12
|
+
var volume_builder_js_1 = require("./volume-builder.js");
|
|
13
|
+
Object.defineProperty(exports, "createVolumeBuilder", { enumerable: true, get: function () { return volume_builder_js_1.createVolumeBuilder; } });
|
|
14
|
+
var volume_defaults_js_1 = require("./volume-defaults.js");
|
|
15
|
+
Object.defineProperty(exports, "VOLUME_DEFAULTS", { enumerable: true, get: function () { return volume_defaults_js_1.VOLUME_DEFAULTS; } });
|
|
16
|
+
var volume_alarm_defaults_js_1 = require("./volume-alarm-defaults.js");
|
|
17
|
+
Object.defineProperty(exports, "VOLUME_ALARM_DEFAULTS", { enumerable: true, get: function () { return volume_alarm_defaults_js_1.VOLUME_ALARM_DEFAULTS; } });
|
|
18
|
+
var vpc_builder_js_1 = require("./vpc-builder.js");
|
|
19
|
+
Object.defineProperty(exports, "createVpcBuilder", { enumerable: true, get: function () { return vpc_builder_js_1.createVpcBuilder; } });
|
|
20
|
+
var vpc_defaults_js_1 = require("./vpc-defaults.js");
|
|
21
|
+
Object.defineProperty(exports, "VPC_DEFAULTS", { enumerable: true, get: function () { return vpc_defaults_js_1.VPC_DEFAULTS; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,6DAK+B;AAJ7B,4HAAA,qBAAqB,OAAA;AAKvB,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA;AAE1B,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAGhC,mGAA4F;AAAnF,0JAAA,gCAAgC,OAAA;AAEzC,yDAK6B;AAJ3B,wHAAA,mBAAmB,OAAA;AAKrB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAE9B,mDAM0B;AALxB,kHAAA,gBAAgB,OAAA;AAMlB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA"}
|
|
@@ -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 @@
|
|
|
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,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.INSTANCE_ALARM_DEFAULTS = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* AWS-recommended default alarm configuration for EC2 instances.
|
|
7
|
+
*
|
|
8
|
+
* Thresholds are sourced from the CloudWatch Best Practice Recommended
|
|
9
|
+
* Alarms guide. Thresholds may reasonably be tuned per-workload; defaults
|
|
10
|
+
* bias toward catching obvious issues without excessive noise.
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
13
|
+
*/
|
|
14
|
+
exports.INSTANCE_ALARM_DEFAULTS = {
|
|
15
|
+
enabled: true,
|
|
16
|
+
/**
|
|
17
|
+
* Sustained high CPU indicates the instance is a bottleneck and may
|
|
18
|
+
* need to be scaled up. 80% over 5 consecutive minutes avoids
|
|
19
|
+
* alarming on brief workload spikes.
|
|
20
|
+
*/
|
|
21
|
+
cpuUtilization: {
|
|
22
|
+
threshold: 80,
|
|
23
|
+
evaluationPeriods: 5,
|
|
24
|
+
datapointsToAlarm: 5,
|
|
25
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Any status check failure is actionable — it indicates instance or
|
|
29
|
+
* host impairment. 2-of-2 evaluation filters transient single-minute
|
|
30
|
+
* noise while keeping time-to-detect low.
|
|
31
|
+
*/
|
|
32
|
+
statusCheckFailed: {
|
|
33
|
+
threshold: 0,
|
|
34
|
+
evaluationPeriods: 2,
|
|
35
|
+
datapointsToAlarm: 2,
|
|
36
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
37
|
+
},
|
|
38
|
+
/**
|
|
39
|
+
* Attached EBS volumes are unreachable or unable to complete I/O —
|
|
40
|
+
* typically a host or storage-subsystem issue. The 10-of-10 evaluation
|
|
41
|
+
* window matches AWS guidance: EBS infrastructure usually self-heals
|
|
42
|
+
* within a few minutes, so a longer window avoids paging on transient
|
|
43
|
+
* issues that resolve without intervention.
|
|
44
|
+
*/
|
|
45
|
+
attachedEbsStatusCheckFailed: {
|
|
46
|
+
threshold: 1,
|
|
47
|
+
evaluationPeriods: 10,
|
|
48
|
+
datapointsToAlarm: 10,
|
|
49
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* Low CPU credit balance on burstable instances means imminent
|
|
53
|
+
* throttling to baseline performance. Threshold < 50 at 5-minute
|
|
54
|
+
* minimum gives an early warning to investigate or switch instance
|
|
55
|
+
* family. Credit balance metrics are only emitted at 5-minute
|
|
56
|
+
* granularity regardless of detailed monitoring.
|
|
57
|
+
*/
|
|
58
|
+
cpuCreditBalance: {
|
|
59
|
+
threshold: 50,
|
|
60
|
+
evaluationPeriods: 3,
|
|
61
|
+
datapointsToAlarm: 3,
|
|
62
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=instance-alarm-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-alarm-defaults.js","sourceRoot":"","sources":["../../src/instance-alarm-defaults.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAW9D;;;;;;;;GAQG;AACU,QAAA,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,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;OAIG;IACH,iBAAiB,EAAE;QACjB,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;;;OAMG;IACH,4BAA4B,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;;;OAMG;IACH,gBAAgB,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -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,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveInstanceAlarmDefinitions = resolveInstanceAlarmDefinitions;
|
|
4
|
+
exports.createInstanceAlarms = createInstanceAlarms;
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const instance_alarm_defaults_js_1 = require("./instance-alarm-defaults.js");
|
|
9
|
+
const METRIC_PERIOD = aws_cdk_lib_1.Duration.minutes(1);
|
|
10
|
+
const METRIC_PERIOD_LABEL = `${String(METRIC_PERIOD.toMinutes())} minute`;
|
|
11
|
+
/**
|
|
12
|
+
* CPU credit metrics are emitted by EC2 at 5-minute granularity regardless
|
|
13
|
+
* of whether detailed monitoring is enabled. Using a shorter period yields
|
|
14
|
+
* missing data rather than higher resolution.
|
|
15
|
+
*
|
|
16
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_credits_CPU.html
|
|
17
|
+
*/
|
|
18
|
+
const CREDIT_METRIC_PERIOD = aws_cdk_lib_1.Duration.minutes(5);
|
|
19
|
+
const CREDIT_METRIC_PERIOD_LABEL = `${String(CREDIT_METRIC_PERIOD.toMinutes())} minute`;
|
|
20
|
+
/**
|
|
21
|
+
* Instance type family prefixes that accrue CPU credits (burstable).
|
|
22
|
+
* Used to decide whether to emit the contextual {@link InstanceAlarmConfig.cpuCreditBalance}
|
|
23
|
+
* alarm. Other families bill at a flat CPU rate and have no credit metric.
|
|
24
|
+
*
|
|
25
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html
|
|
26
|
+
*/
|
|
27
|
+
const BURSTABLE_FAMILY_PREFIXES = ["t2.", "t3.", "t3a.", "t4g."];
|
|
28
|
+
function isBurstableInstanceType(instanceType) {
|
|
29
|
+
const identifier = instanceType.toString();
|
|
30
|
+
return BURSTABLE_FAMILY_PREFIXES.some((prefix) => identifier.startsWith(prefix));
|
|
31
|
+
}
|
|
32
|
+
function instanceMetric(instance, metricName, statistic, period = METRIC_PERIOD) {
|
|
33
|
+
return new aws_cloudwatch_1.Metric({
|
|
34
|
+
namespace: "AWS/EC2",
|
|
35
|
+
metricName,
|
|
36
|
+
dimensionsMap: { InstanceId: instance.instanceId },
|
|
37
|
+
statistic,
|
|
38
|
+
period,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
43
|
+
* {@link AlarmDefinition}s, applying contextual logic for the
|
|
44
|
+
* burstable-only CPU credit alarm.
|
|
45
|
+
*/
|
|
46
|
+
function resolveInstanceAlarmDefinitions(instance, config, props) {
|
|
47
|
+
if (config?.enabled === false)
|
|
48
|
+
return [];
|
|
49
|
+
const definitions = [];
|
|
50
|
+
if (config?.cpuUtilization !== false) {
|
|
51
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.cpuUtilization, instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS.cpuUtilization);
|
|
52
|
+
definitions.push({
|
|
53
|
+
key: "cpuUtilization",
|
|
54
|
+
alarmName: cfg.alarmName,
|
|
55
|
+
metric: instanceMetric(instance, "CPUUtilization", aws_cloudwatch_1.Stats.AVERAGE),
|
|
56
|
+
threshold: cfg.threshold,
|
|
57
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
58
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
59
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
60
|
+
treatMissingData: cfg.treatMissingData,
|
|
61
|
+
description: `EC2 instance CPU utilization is sustained at a high level. Threshold: > ${String(cfg.threshold)}% average over ${String(cfg.evaluationPeriods)} x ${METRIC_PERIOD_LABEL}.`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (config?.statusCheckFailed !== false) {
|
|
65
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.statusCheckFailed, instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS.statusCheckFailed);
|
|
66
|
+
definitions.push({
|
|
67
|
+
key: "statusCheckFailed",
|
|
68
|
+
alarmName: cfg.alarmName,
|
|
69
|
+
metric: instanceMetric(instance, "StatusCheckFailed", aws_cloudwatch_1.Stats.SUM),
|
|
70
|
+
threshold: cfg.threshold,
|
|
71
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
72
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
73
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
74
|
+
treatMissingData: cfg.treatMissingData,
|
|
75
|
+
description: `EC2 instance is failing its status checks. Threshold: > ${String(cfg.threshold)} failed checks over ${String(cfg.evaluationPeriods)} x ${METRIC_PERIOD_LABEL}.`,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (config?.attachedEbsStatusCheckFailed !== false) {
|
|
79
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.attachedEbsStatusCheckFailed, instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS.attachedEbsStatusCheckFailed);
|
|
80
|
+
definitions.push({
|
|
81
|
+
key: "attachedEbsStatusCheckFailed",
|
|
82
|
+
alarmName: cfg.alarmName,
|
|
83
|
+
metric: instanceMetric(instance, "StatusCheckFailed_AttachedEBS", aws_cloudwatch_1.Stats.MAXIMUM),
|
|
84
|
+
threshold: cfg.threshold,
|
|
85
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
86
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
87
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
88
|
+
treatMissingData: cfg.treatMissingData,
|
|
89
|
+
description: `EC2 instance attached EBS volume(s) are unreachable or unable to complete I/O. Threshold: >= ${String(cfg.threshold)} failed checks (max) over ${String(cfg.evaluationPeriods)} x ${METRIC_PERIOD_LABEL}.`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (config?.cpuCreditBalance !== false && isBurstableInstanceType(props.instanceType)) {
|
|
93
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.cpuCreditBalance, instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS.cpuCreditBalance);
|
|
94
|
+
definitions.push({
|
|
95
|
+
key: "cpuCreditBalance",
|
|
96
|
+
alarmName: cfg.alarmName,
|
|
97
|
+
metric: instanceMetric(instance, "CPUCreditBalance", aws_cloudwatch_1.Stats.MINIMUM, CREDIT_METRIC_PERIOD),
|
|
98
|
+
threshold: cfg.threshold,
|
|
99
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
100
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
101
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
102
|
+
treatMissingData: cfg.treatMissingData,
|
|
103
|
+
description: `EC2 burstable instance CPU credit balance is low — baseline throttling is imminent. Threshold: < ${String(cfg.threshold)} credits (minimum) over ${String(cfg.evaluationPeriods)} x ${CREDIT_METRIC_PERIOD_LABEL}.`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return definitions;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Creates AWS-recommended CloudWatch alarms for an EC2 instance,
|
|
110
|
+
* merging recommended definitions with any custom alarm builders.
|
|
111
|
+
*
|
|
112
|
+
* @param scope - CDK construct scope for creating alarm constructs.
|
|
113
|
+
* @param id - Base identifier for alarm construct ids.
|
|
114
|
+
* @param instance - The EC2 instance to create alarms for.
|
|
115
|
+
* @param config - User-provided alarm configuration, or `false` to disable all.
|
|
116
|
+
* @param props - The merged instance props, used for contextual alarm thresholds.
|
|
117
|
+
* @param customAlarms - Custom alarm builders added via `addAlarm()`.
|
|
118
|
+
* @returns A record mapping alarm keys to their created Alarm constructs.
|
|
119
|
+
*
|
|
120
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EC2
|
|
121
|
+
*/
|
|
122
|
+
function createInstanceAlarms(scope, id, instance, config, props, customAlarms = []) {
|
|
123
|
+
if (config === false)
|
|
124
|
+
return {};
|
|
125
|
+
const enabled = config?.enabled ?? instance_alarm_defaults_js_1.INSTANCE_ALARM_DEFAULTS.enabled;
|
|
126
|
+
if (!enabled)
|
|
127
|
+
return {};
|
|
128
|
+
const recommended = resolveInstanceAlarmDefinitions(instance, config, props);
|
|
129
|
+
const custom = customAlarms.map((b) => b.resolve(instance));
|
|
130
|
+
return (0, cloudwatch_1.createAlarms)(scope, id, [...recommended, ...custom]);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=instance-alarms.js.map
|
|
@@ -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 @@
|
|
|
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,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createInstanceBuilder = createInstanceBuilder;
|
|
4
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const instance_alarms_js_1 = require("./instance-alarms.js");
|
|
9
|
+
const instance_defaults_js_1 = require("./instance-defaults.js");
|
|
10
|
+
const instance_volume_attachments_js_1 = require("./instance-volume-attachments.js");
|
|
11
|
+
class InstanceBuilder {
|
|
12
|
+
props = {};
|
|
13
|
+
#customAlarms = [];
|
|
14
|
+
#volumeAttachments = [];
|
|
15
|
+
#vpc;
|
|
16
|
+
/**
|
|
17
|
+
* Sets the VPC the instance will be launched into.
|
|
18
|
+
*
|
|
19
|
+
* Accepts a concrete {@link IVpc} or a {@link Ref} that resolves to one
|
|
20
|
+
* at build time. This is how cross-component wiring works — e.g., to a
|
|
21
|
+
* sibling {@link IVpcBuilder} in the same composed system.
|
|
22
|
+
*
|
|
23
|
+
* @param vpc - The VPC or a Ref to one.
|
|
24
|
+
* @returns This builder for chaining.
|
|
25
|
+
*/
|
|
26
|
+
vpc(vpc) {
|
|
27
|
+
this.#vpc = vpc;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Adds a custom CloudWatch alarm to be created alongside the recommended
|
|
32
|
+
* alarms. The provided callback receives an {@link AlarmDefinitionBuilder}
|
|
33
|
+
* scoped to the built {@link Instance}; configure it fluently and return it.
|
|
34
|
+
*
|
|
35
|
+
* @param key - A unique key for the alarm (used to generate the alarm id).
|
|
36
|
+
* @param configure - Callback that configures the alarm definition.
|
|
37
|
+
* @returns This builder for chaining.
|
|
38
|
+
*/
|
|
39
|
+
addAlarm(key, configure) {
|
|
40
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Attaches an externally-managed EBS volume to the instance via an
|
|
45
|
+
* `AWS::EC2::VolumeAttachment` resource, mirroring the call shape of
|
|
46
|
+
* {@link addAlarm}.
|
|
47
|
+
*
|
|
48
|
+
* The `volumeRef` accepts either a `Resolvable<VolumeBuilderResult>`
|
|
49
|
+
* (drop a `ref<VolumeBuilderResult>("data")` straight in) or a
|
|
50
|
+
* `Resolvable<IVolume>` for an externally-managed volume — the builder
|
|
51
|
+
* unwraps either at build time.
|
|
52
|
+
*
|
|
53
|
+
* When both AZs are concrete at synth time, the builder asserts the
|
|
54
|
+
* instance and the volume are in the same Availability Zone — synth-
|
|
55
|
+
* time failure beats boot-time failure for AZ mismatches.
|
|
56
|
+
*
|
|
57
|
+
* Per-attachment AWS-recommended alarms (e.g. `volumeStalledIo`) are
|
|
58
|
+
* created by default and merged into the result's `alarms` record
|
|
59
|
+
* under prefixed keys (`${attachmentKey}.${alarmKey}`).
|
|
60
|
+
*
|
|
61
|
+
* @param key - Unique key for the attachment (used as the result-map
|
|
62
|
+
* field name and as the construct id suffix).
|
|
63
|
+
* @param volumeRef - Resolvable to the volume to attach.
|
|
64
|
+
* @param options - Attachment options (`device`, `recommendedAlarms`).
|
|
65
|
+
* @returns This builder for chaining.
|
|
66
|
+
*/
|
|
67
|
+
attachVolume(key, volumeRef, options) {
|
|
68
|
+
if (this.#volumeAttachments.some((a) => a.key === key)) {
|
|
69
|
+
throw new Error(`attachVolume: duplicate attachment key "${key}".`);
|
|
70
|
+
}
|
|
71
|
+
this.#volumeAttachments.push({ key, volumeRef, options });
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/** @internal — see ADR-0005. */
|
|
75
|
+
[core_1.COPY_STATE](target) {
|
|
76
|
+
target.#vpc = this.#vpc;
|
|
77
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
78
|
+
target.#volumeAttachments.push(...this.#volumeAttachments);
|
|
79
|
+
}
|
|
80
|
+
build(scope, id, context) {
|
|
81
|
+
const resolvedVpc = this.#vpc ? (0, core_1.resolve)(this.#vpc, context) : undefined;
|
|
82
|
+
if (!resolvedVpc) {
|
|
83
|
+
throw new Error(`InstanceBuilder "${id}" requires a VPC. Call .vpc() with an IVpc or a Ref to one.`);
|
|
84
|
+
}
|
|
85
|
+
const { recommendedAlarms: alarmConfig, role, keyPair, securityGroup, ...instanceProps } = this.props;
|
|
86
|
+
const mergedProps = {
|
|
87
|
+
...instance_defaults_js_1.INSTANCE_DEFAULTS,
|
|
88
|
+
...instanceProps,
|
|
89
|
+
vpc: resolvedVpc,
|
|
90
|
+
...(role !== undefined ? { role: (0, core_1.resolve)(role, context) } : {}),
|
|
91
|
+
...(keyPair !== undefined ? { keyPair: (0, core_1.resolve)(keyPair, context) } : {}),
|
|
92
|
+
...(securityGroup !== undefined ? { securityGroup: (0, core_1.resolve)(securityGroup, context) } : {}),
|
|
93
|
+
};
|
|
94
|
+
const instance = new aws_ec2_1.Instance(scope, id, mergedProps);
|
|
95
|
+
const instanceAlarms = (0, instance_alarms_js_1.createInstanceAlarms)(scope, id, instance, alarmConfig, mergedProps, this.#customAlarms);
|
|
96
|
+
const { attachments, alarms: attachmentAlarms } = (0, instance_volume_attachments_js_1.createVolumeAttachments)(scope, id, instance, mergedProps, this.#volumeAttachments, context);
|
|
97
|
+
return {
|
|
98
|
+
instance,
|
|
99
|
+
alarms: { ...instanceAlarms, ...attachmentAlarms },
|
|
100
|
+
volumeAttachments: attachments,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Creates a new {@link IInstanceBuilder} for configuring an AWS EC2 instance.
|
|
106
|
+
*
|
|
107
|
+
* This is the entry point for defining an EC2 instance component. The
|
|
108
|
+
* returned builder exposes every {@link InstanceBuilderProps} property as a
|
|
109
|
+
* fluent setter/getter, plus {@link IInstanceBuilder.vpc | .vpc()} for
|
|
110
|
+
* cross-component VPC wiring with Ref support. It implements
|
|
111
|
+
* {@link Lifecycle} for use with {@link compose}.
|
|
112
|
+
*
|
|
113
|
+
* @returns A fluent builder for an AWS EC2 instance.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const server = createInstanceBuilder()
|
|
118
|
+
* .vpc(ref<VpcBuilderResult>("network").get("vpc"))
|
|
119
|
+
* .instanceType(InstanceType.of(InstanceClass.T3, InstanceSize.MICRO))
|
|
120
|
+
* .machineImage(MachineImage.latestAmazonLinux2023());
|
|
121
|
+
*
|
|
122
|
+
* // Use standalone:
|
|
123
|
+
* const result = server.build(stack, "MyInstance");
|
|
124
|
+
*
|
|
125
|
+
* // Or compose into a system:
|
|
126
|
+
* const system = compose(
|
|
127
|
+
* { network: createVpcBuilder(), server },
|
|
128
|
+
* { network: [], server: ["network"] },
|
|
129
|
+
* );
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
function createInstanceBuilder() {
|
|
133
|
+
return (0, cloudformation_1.taggedBuilder)(InstanceBuilder);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=instance-builder.js.map
|
|
@@ -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 @@
|
|
|
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,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.INSTANCE_DEFAULTS = void 0;
|
|
4
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
5
|
+
/**
|
|
6
|
+
* Secure, AWS-recommended defaults applied to every EC2 instance built with
|
|
7
|
+
* {@link createInstanceBuilder}. Each property can be individually overridden
|
|
8
|
+
* via the builder's fluent API.
|
|
9
|
+
*
|
|
10
|
+
* Three required properties intentionally have no default — they are
|
|
11
|
+
* application-specific and must be supplied explicitly:
|
|
12
|
+
* - `vpc` (via the builder's `.vpc()` method)
|
|
13
|
+
* - `instanceType`
|
|
14
|
+
* - `machineImage`
|
|
15
|
+
*/
|
|
16
|
+
exports.INSTANCE_DEFAULTS = {
|
|
17
|
+
/**
|
|
18
|
+
* Require IMDSv2. IMDSv1 is vulnerable to SSRF-based credential exfiltration;
|
|
19
|
+
* IMDSv2 requires a session token and blocks the common attack pattern.
|
|
20
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_detect_investigate_events_app_service_logging.html
|
|
21
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html
|
|
22
|
+
*/
|
|
23
|
+
requireImdsv2: true,
|
|
24
|
+
/**
|
|
25
|
+
* Enable detailed (1-minute) CloudWatch metrics. Without this, instance
|
|
26
|
+
* metrics are emitted at 5-minute granularity, which makes short-window
|
|
27
|
+
* alarm evaluation unreliable.
|
|
28
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch-new.html
|
|
29
|
+
*/
|
|
30
|
+
detailedMonitoring: true,
|
|
31
|
+
/**
|
|
32
|
+
* Attach the AmazonSSMManagedInstanceCore managed policy so Session Manager
|
|
33
|
+
* can be used in place of SSH. Removes the need for key pairs, bastion
|
|
34
|
+
* hosts, or inbound SSH access.
|
|
35
|
+
* @see https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html
|
|
36
|
+
*/
|
|
37
|
+
ssmSessionPermissions: true,
|
|
38
|
+
/**
|
|
39
|
+
* EBS-optimized networking — dedicated bandwidth between the instance and
|
|
40
|
+
* its EBS volumes. Free and on-by-default for current-generation instance
|
|
41
|
+
* types; set explicitly for consistency.
|
|
42
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html
|
|
43
|
+
*/
|
|
44
|
+
ebsOptimized: true,
|
|
45
|
+
/**
|
|
46
|
+
* Encrypt the root EBS volume at rest using the account's default EBS KMS
|
|
47
|
+
* key. GP3 is the current-generation general-purpose volume type — cheaper
|
|
48
|
+
* and faster than GP2 at equivalent sizes. Users override this to change
|
|
49
|
+
* volume size, IOPS, throughput, or to add additional block devices.
|
|
50
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html
|
|
51
|
+
*/
|
|
52
|
+
blockDevices: [
|
|
53
|
+
{
|
|
54
|
+
deviceName: "/dev/xvda",
|
|
55
|
+
volume: aws_ec2_1.BlockDeviceVolume.ebs(8, {
|
|
56
|
+
encrypted: true,
|
|
57
|
+
volumeType: aws_ec2_1.EbsDeviceVolumeType.GP3,
|
|
58
|
+
}),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=instance-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-defaults.js","sourceRoot":"","sources":["../../src/instance-defaults.ts"],"names":[],"mappings":";;;AAAA,iDAAiG;AAEjG;;;;;;;;;;GAUG;AACU,QAAA,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,2BAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC/B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,6BAAmB,CAAC,GAAG;aACpC,CAAC;SACH;KACF;CACF,CAAC"}
|
|
@@ -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 @@
|
|
|
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,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VOLUME_ATTACHMENT_ALARM_DEFAULTS = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* AWS-recommended default alarm configuration for per-attachment EBS
|
|
7
|
+
* volumes.
|
|
8
|
+
*
|
|
9
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#EBS
|
|
10
|
+
*/
|
|
11
|
+
exports.VOLUME_ATTACHMENT_ALARM_DEFAULTS = {
|
|
12
|
+
enabled: true,
|
|
13
|
+
/**
|
|
14
|
+
* The single AWS-recommended EBS alarm. Complements the existing
|
|
15
|
+
* `attachedEbsStatusCheckFailed` on the instance: the EC2-side metric
|
|
16
|
+
* pages on instance-level reachability, this one on per-volume health.
|
|
17
|
+
* The 10-of-10 evaluation window matches AWS guidance — EBS
|
|
18
|
+
* infrastructure usually self-heals within a few minutes.
|
|
19
|
+
*/
|
|
20
|
+
volumeStalledIo: {
|
|
21
|
+
threshold: 1,
|
|
22
|
+
evaluationPeriods: 10,
|
|
23
|
+
datapointsToAlarm: 10,
|
|
24
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=instance-volume-attachment-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-volume-attachment-defaults.js","sourceRoot":"","sources":["../../src/instance-volume-attachment-defaults.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAQ9D;;;;;GAKG;AACU,QAAA,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,iCAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -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"}
|