@composurecdk/sqs 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/defaults.d.ts.map +1 -0
- package/dist/commonjs/defaults.js +38 -0
- package/dist/commonjs/defaults.js.map +1 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +10 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/queue-alarm-config.d.ts.map +1 -0
- package/dist/commonjs/queue-alarm-config.js +3 -0
- package/dist/commonjs/queue-alarm-config.js.map +1 -0
- package/dist/commonjs/queue-alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/queue-alarm-defaults.js +40 -0
- package/dist/commonjs/queue-alarm-defaults.js.map +1 -0
- package/dist/commonjs/queue-alarms.d.ts.map +1 -0
- package/dist/commonjs/queue-alarms.js +75 -0
- package/dist/commonjs/queue-alarms.js.map +1 -0
- package/dist/commonjs/queue-builder.d.ts.map +1 -0
- package/dist/commonjs/queue-builder.js +96 -0
- package/dist/commonjs/queue-builder.js.map +1 -0
- package/dist/esm/defaults.d.ts +8 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/queue-alarm-config.d.ts +46 -0
- package/dist/esm/queue-alarm-config.d.ts.map +1 -0
- package/dist/esm/queue-alarm-config.js.map +1 -0
- package/dist/esm/queue-alarm-defaults.d.ts +18 -0
- package/dist/esm/queue-alarm-defaults.d.ts.map +1 -0
- package/dist/esm/queue-alarm-defaults.js.map +1 -0
- package/dist/esm/queue-alarms.d.ts +26 -0
- package/dist/esm/queue-alarms.d.ts.map +1 -0
- package/dist/esm/queue-alarms.js.map +1 -0
- package/dist/esm/queue-builder.d.ts +111 -0
- package/dist/esm/queue-builder.d.ts.map +1 -0
- package/dist/{queue-builder.js → esm/queue-builder.js} +36 -0
- package/dist/esm/queue-builder.js.map +1 -0
- package/package.json +36 -18
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/queue-alarm-config.d.ts.map +0 -1
- package/dist/queue-alarm-config.js.map +0 -1
- package/dist/queue-alarm-defaults.d.ts.map +0 -1
- package/dist/queue-alarm-defaults.js.map +0 -1
- package/dist/queue-alarms.d.ts.map +0 -1
- package/dist/queue-alarms.js.map +0 -1
- package/dist/queue-builder.d.ts.map +0 -1
- package/dist/queue-builder.js.map +0 -1
- /package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +0 -0
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{queue-alarm-config.d.ts → commonjs/queue-alarm-config.d.ts} +0 -0
- /package/dist/{queue-alarm-defaults.d.ts → commonjs/queue-alarm-defaults.d.ts} +0 -0
- /package/dist/{queue-alarms.d.ts → commonjs/queue-alarms.d.ts} +0 -0
- /package/dist/{queue-builder.d.ts → commonjs/queue-builder.d.ts} +0 -0
- /package/dist/{defaults.js → esm/defaults.js} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{queue-alarm-config.js → esm/queue-alarm-config.js} +0 -0
- /package/dist/{queue-alarm-defaults.js → esm/queue-alarm-defaults.js} +0 -0
- /package/dist/{queue-alarms.js → esm/queue-alarms.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,UAAU,CA4B9C,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUEUE_DEFAULTS = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
|
|
6
|
+
/**
|
|
7
|
+
* Secure, AWS-recommended defaults applied to every SQS queue built
|
|
8
|
+
* with {@link createQueueBuilder}. Each property can be individually
|
|
9
|
+
* overridden via the builder's fluent API.
|
|
10
|
+
*/
|
|
11
|
+
exports.QUEUE_DEFAULTS = {
|
|
12
|
+
/**
|
|
13
|
+
* Reject any request that does not use TLS. Adds a resource policy
|
|
14
|
+
* `Deny` on `aws:SecureTransport: false`, the same control applied to
|
|
15
|
+
* SNS topics by {@link createTopicBuilder}.
|
|
16
|
+
* @see https://docs.aws.amazon.com/AmazonSQS/latest/SQSDeveloperGuide/sqs-security-best-practices.html
|
|
17
|
+
*/
|
|
18
|
+
enforceSSL: true,
|
|
19
|
+
/**
|
|
20
|
+
* Encrypt messages at rest with the SQS-managed key (SSE-SQS). This
|
|
21
|
+
* is the safe baseline; bring-your-own KMS encryption is opt-in via
|
|
22
|
+
* `.encryptionMasterKey(...)` paired with `.encryption(QueueEncryption.KMS)`.
|
|
23
|
+
* CDK already defaults newly-created queues to SSE-SQS — making it
|
|
24
|
+
* explicit here keeps the default discoverable and stable across CDK
|
|
25
|
+
* versions.
|
|
26
|
+
* @see https://docs.aws.amazon.com/AmazonSQS/latest/SQSDeveloperGuide/sqs-data-protection.html
|
|
27
|
+
*/
|
|
28
|
+
encryption: aws_sqs_1.QueueEncryption.SQS_MANAGED,
|
|
29
|
+
/**
|
|
30
|
+
* Enable long polling. Holds `ReceiveMessage` connections open for up
|
|
31
|
+
* to 20 seconds while waiting for messages, which cuts both the cost
|
|
32
|
+
* of empty receives and the perceived delivery latency of low-traffic
|
|
33
|
+
* queues. The 20s value is the SQS maximum.
|
|
34
|
+
* @see https://docs.aws.amazon.com/AmazonSQS/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling
|
|
35
|
+
*/
|
|
36
|
+
receiveMessageWaitTime: aws_cdk_lib_1.Duration.seconds(20),
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AACvC,iDAAuE;AAEvE;;;;GAIG;AACU,QAAA,cAAc,GAAwB;IACjD;;;;;OAKG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;;;;;OAQG;IACH,UAAU,EAAE,yBAAe,CAAC,WAAW;IAEvC;;;;;;OAMG;IACH,sBAAsB,EAAE,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUEUE_ALARM_DEFAULTS = exports.QUEUE_DEFAULTS = exports.createQueueBuilder = void 0;
|
|
4
|
+
var queue_builder_js_1 = require("./queue-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createQueueBuilder", { enumerable: true, get: function () { return queue_builder_js_1.createQueueBuilder; } });
|
|
6
|
+
var defaults_js_1 = require("./defaults.js");
|
|
7
|
+
Object.defineProperty(exports, "QUEUE_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.QUEUE_DEFAULTS; } });
|
|
8
|
+
var queue_alarm_defaults_js_1 = require("./queue-alarm-defaults.js");
|
|
9
|
+
Object.defineProperty(exports, "QUEUE_ALARM_DEFAULTS", { enumerable: true, get: function () { return queue_alarm_defaults_js_1.QUEUE_ALARM_DEFAULTS; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAK4B;AAJ1B,sHAAA,kBAAkB,OAAA;AAKpB,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AAEvB,qEAAiE;AAAxD,+HAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-config.d.ts","sourceRoot":"","sources":["../../src/queue-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,6BAA6B,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,qCAAqC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-config.js","sourceRoot":"","sources":["../../src/queue-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/queue-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,kBAAkB;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,6BAA6B,EAAE,mBAAmB,CAAC;IACnD,qCAAqC,EAAE,mBAAmB,CAAC;CAC5D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBA2BlC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUEUE_ALARM_DEFAULTS = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* AWS-recommended default alarm configuration for SQS queues.
|
|
7
|
+
*
|
|
8
|
+
* Tuned for primary (consumer-fed) queues. Dead-letter queues need
|
|
9
|
+
* different thresholds — any message on a DLQ is itself an alert,
|
|
10
|
+
* whereas a primary queue with messages is normal.
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
13
|
+
*/
|
|
14
|
+
exports.QUEUE_ALARM_DEFAULTS = {
|
|
15
|
+
enabled: true,
|
|
16
|
+
/**
|
|
17
|
+
* 5 minutes. Conservative starting point for a "consumer falling
|
|
18
|
+
* behind" alarm. The right value depends on the workload's SLA and
|
|
19
|
+
* `retentionPeriod`; tune via `recommendedAlarms`.
|
|
20
|
+
*/
|
|
21
|
+
approximateAgeOfOldestMessage: {
|
|
22
|
+
threshold: 300,
|
|
23
|
+
evaluationPeriods: 1,
|
|
24
|
+
datapointsToAlarm: 1,
|
|
25
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* 90,000 — 75% of the SQS 120,000 in-flight message quota. Proactive
|
|
29
|
+
* guardrail; a breach means the queue is approaching the point where
|
|
30
|
+
* new messages will be rejected.
|
|
31
|
+
* @see https://docs.aws.amazon.com/AmazonSQS/latest/SQSDeveloperGuide/quotas-messages.html#quotas-in-flight
|
|
32
|
+
*/
|
|
33
|
+
approximateNumberOfMessagesNotVisible: {
|
|
34
|
+
threshold: 90_000,
|
|
35
|
+
evaluationPeriods: 1,
|
|
36
|
+
datapointsToAlarm: 1,
|
|
37
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=queue-alarm-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-defaults.js","sourceRoot":"","sources":["../../src/queue-alarm-defaults.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAS9D;;;;;;;;GAQG;AACU,QAAA,oBAAoB,GAAuB;IACtD,OAAO,EAAE,IAAI;IAEb;;;;OAIG;IACH,6BAA6B,EAAE;QAC7B,SAAS,EAAE,GAAG;QACd,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;;OAKG;IACH,qCAAqC,EAAE;QACrC,SAAS,EAAE,MAAM;QACjB,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarms.d.ts","sourceRoot":"","sources":["../../src/queue-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAsB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,eAAe,EAAE,CA+CnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,KAAK,GAAG,SAAS,EAC5C,YAAY,GAAE,sBAAsB,CAAC,MAAM,CAAC,EAAO,GAClD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveQueueAlarmDefinitions = resolveQueueAlarmDefinitions;
|
|
4
|
+
exports.createQueueAlarms = createQueueAlarms;
|
|
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 queue_alarm_defaults_js_1 = require("./queue-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
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
13
|
+
* {@link AlarmDefinition}s for an SQS queue.
|
|
14
|
+
*/
|
|
15
|
+
function resolveQueueAlarmDefinitions(queue, config) {
|
|
16
|
+
if (config?.enabled === false)
|
|
17
|
+
return [];
|
|
18
|
+
const definitions = [];
|
|
19
|
+
if (config?.approximateAgeOfOldestMessage !== false) {
|
|
20
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.approximateAgeOfOldestMessage, queue_alarm_defaults_js_1.QUEUE_ALARM_DEFAULTS.approximateAgeOfOldestMessage);
|
|
21
|
+
definitions.push({
|
|
22
|
+
key: "approximateAgeOfOldestMessage",
|
|
23
|
+
alarmName: cfg.alarmName,
|
|
24
|
+
metric: queue.metricApproximateAgeOfOldestMessage({ period: METRIC_PERIOD }),
|
|
25
|
+
threshold: cfg.threshold,
|
|
26
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
27
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
28
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
29
|
+
treatMissingData: cfg.treatMissingData,
|
|
30
|
+
description: `SQS queue's oldest message has been waiting longer than the threshold, ` +
|
|
31
|
+
`indicating consumers are falling behind. Threshold: > ${String(cfg.threshold)} seconds in ${METRIC_PERIOD_LABEL}.`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (config?.approximateNumberOfMessagesNotVisible !== false) {
|
|
35
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.approximateNumberOfMessagesNotVisible, queue_alarm_defaults_js_1.QUEUE_ALARM_DEFAULTS.approximateNumberOfMessagesNotVisible);
|
|
36
|
+
definitions.push({
|
|
37
|
+
key: "approximateNumberOfMessagesNotVisible",
|
|
38
|
+
alarmName: cfg.alarmName,
|
|
39
|
+
metric: queue.metricApproximateNumberOfMessagesNotVisible({ period: METRIC_PERIOD }),
|
|
40
|
+
threshold: cfg.threshold,
|
|
41
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
42
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
43
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
44
|
+
treatMissingData: cfg.treatMissingData,
|
|
45
|
+
description: `SQS queue's in-flight messages are approaching the 120,000 per-queue quota; ` +
|
|
46
|
+
`further receives will be rejected once the quota is hit. ` +
|
|
47
|
+
`Threshold: > ${String(cfg.threshold)} in-flight in ${METRIC_PERIOD_LABEL}.`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return definitions;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates AWS-recommended CloudWatch alarms for an SQS queue, merging
|
|
54
|
+
* recommended definitions with any custom alarm builders.
|
|
55
|
+
*
|
|
56
|
+
* @param scope - CDK construct scope for creating alarm constructs.
|
|
57
|
+
* @param id - Base identifier for alarm construct ids.
|
|
58
|
+
* @param queue - The SQS queue to create alarms for.
|
|
59
|
+
* @param config - User-provided alarm configuration, or `false` to disable all.
|
|
60
|
+
* @param customAlarms - Custom alarm builders added via `addAlarm()`.
|
|
61
|
+
* @returns A record mapping alarm keys to their created Alarm constructs.
|
|
62
|
+
*
|
|
63
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
64
|
+
*/
|
|
65
|
+
function createQueueAlarms(scope, id, queue, config, customAlarms = []) {
|
|
66
|
+
if (config === false)
|
|
67
|
+
return {};
|
|
68
|
+
const enabled = config?.enabled ?? queue_alarm_defaults_js_1.QUEUE_ALARM_DEFAULTS.enabled;
|
|
69
|
+
if (!enabled)
|
|
70
|
+
return {};
|
|
71
|
+
const recommended = resolveQueueAlarmDefinitions(queue, config);
|
|
72
|
+
const custom = customAlarms.map((b) => b.resolve(queue));
|
|
73
|
+
return (0, cloudwatch_1.createAlarms)(scope, id, [...recommended, ...custom]);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=queue-alarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarms.js","sourceRoot":"","sources":["../../src/queue-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-builder.d.ts","sourceRoot":"","sources":["../../src/queue-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAehE;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC;IAEb;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE5E,cAAM,YAAa,YAAW,SAAS,CAAC,kBAAkB,CAAC;;IACzD,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAM;IAGvC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,KAAK,sBAAsB,CAAC,MAAM,CAAC,GACnF,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIxC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB;CAgBzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAElD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createQueueBuilder = createQueueBuilder;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
|
|
6
|
+
const core_1 = require("@composurecdk/core");
|
|
7
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
8
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
9
|
+
const queue_alarms_js_1 = require("./queue-alarms.js");
|
|
10
|
+
const defaults_js_1 = require("./defaults.js");
|
|
11
|
+
/**
|
|
12
|
+
* AWS-recommended minimum for `maxReceiveCount` on an SQS redrive
|
|
13
|
+
* policy. A consumer needs a few retries before SQS gives up and
|
|
14
|
+
* forwards the message to the dead-letter queue; anything below this
|
|
15
|
+
* tends to surface as a flood of "poison" messages from transient
|
|
16
|
+
* errors that would have succeeded on retry.
|
|
17
|
+
*
|
|
18
|
+
* @see https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
|
|
19
|
+
*/
|
|
20
|
+
const RECOMMENDED_MIN_MAX_RECEIVE_COUNT = 5;
|
|
21
|
+
class QueueBuilder {
|
|
22
|
+
props = {};
|
|
23
|
+
#customAlarms = [];
|
|
24
|
+
addAlarm(key, configure) {
|
|
25
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/** @internal — see ADR-0005. */
|
|
29
|
+
[core_1.COPY_STATE](target) {
|
|
30
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
31
|
+
}
|
|
32
|
+
build(scope, id) {
|
|
33
|
+
const { recommendedAlarms: alarmConfig, ...queueProps } = this.props;
|
|
34
|
+
const mergedProps = {
|
|
35
|
+
...defaults_js_1.QUEUE_DEFAULTS,
|
|
36
|
+
...queueProps,
|
|
37
|
+
};
|
|
38
|
+
warnIfLowMaxReceiveCount(scope, id, mergedProps);
|
|
39
|
+
const queue = new aws_sqs_1.Queue(scope, id, mergedProps);
|
|
40
|
+
const alarms = (0, queue_alarms_js_1.createQueueAlarms)(scope, id, queue, alarmConfig, this.#customAlarms);
|
|
41
|
+
return { queue, alarms };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new {@link IQueueBuilder} for configuring an AWS SQS queue.
|
|
46
|
+
*
|
|
47
|
+
* This is the entry point for defining an SQS queue component. The returned
|
|
48
|
+
* builder exposes every {@link QueueBuilderProps} property as a fluent setter/getter
|
|
49
|
+
* and implements {@link Lifecycle} for use with {@link compose}.
|
|
50
|
+
*
|
|
51
|
+
* @returns A fluent builder for an AWS SQS queue.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const orders = createQueueBuilder()
|
|
56
|
+
* .queueName("orders")
|
|
57
|
+
* .visibilityTimeout(Duration.seconds(60));
|
|
58
|
+
*
|
|
59
|
+
* // Use standalone:
|
|
60
|
+
* const result = orders.build(stack, "Orders");
|
|
61
|
+
*
|
|
62
|
+
* // Or compose into a system:
|
|
63
|
+
* const system = compose(
|
|
64
|
+
* { orders, alerts: createTopicBuilder() },
|
|
65
|
+
* { orders: [], alerts: [] },
|
|
66
|
+
* );
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
function createQueueBuilder() {
|
|
70
|
+
return (0, cloudformation_1.taggedBuilder)(QueueBuilder);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Annotates `scope` with a non-fatal warning when a redrive policy is
|
|
74
|
+
* configured with `maxReceiveCount` below the AWS-recommended floor
|
|
75
|
+
* of {@link RECOMMENDED_MIN_MAX_RECEIVE_COUNT}.
|
|
76
|
+
*
|
|
77
|
+
* The builder owns the redrive policy directly, so this is a true
|
|
78
|
+
* check rather than a contextual reminder — the actual configured
|
|
79
|
+
* value is compared. Short-circuits on unresolved tokens so stacks
|
|
80
|
+
* that thread `maxReceiveCount` through CFN parameters aren't spammed.
|
|
81
|
+
*/
|
|
82
|
+
function warnIfLowMaxReceiveCount(scope, id, props) {
|
|
83
|
+
const dlq = props.deadLetterQueue;
|
|
84
|
+
if (!dlq)
|
|
85
|
+
return;
|
|
86
|
+
const maxReceiveCount = dlq.maxReceiveCount;
|
|
87
|
+
if (aws_cdk_lib_1.Token.isUnresolved(maxReceiveCount))
|
|
88
|
+
return;
|
|
89
|
+
if (maxReceiveCount >= RECOMMENDED_MIN_MAX_RECEIVE_COUNT)
|
|
90
|
+
return;
|
|
91
|
+
aws_cdk_lib_1.Annotations.of(scope).addWarningV2("@composurecdk/sqs:redrive-low-max-receive-count", `QueueBuilder "${id}": redrive policy maxReceiveCount is ${String(maxReceiveCount)}; ` +
|
|
92
|
+
`AWS recommends >= ${String(RECOMMENDED_MIN_MAX_RECEIVE_COUNT)} so the consumer ` +
|
|
93
|
+
`has room to retry before messages hit the dead-letter queue. ` +
|
|
94
|
+
`See https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html`);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=queue-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-builder.js","sourceRoot":"","sources":["../../src/queue-builder.ts"],"names":[],"mappings":";;AA0JA,gDAEC;AA5JD,6CAAiD;AAEjD,iDAA0E;AAE1E,6CAAgE;AAChE,iEAAkF;AAClF,yDAAkE;AAElE,uDAAsD;AACtD,+CAA+C;AAE/C;;;;;;;;GAQG;AACH,MAAM,iCAAiC,GAAG,CAAC,CAAC;AA0E5C,MAAM,YAAY;IAChB,KAAK,GAA+B,EAAE,CAAC;IAC9B,aAAa,GAAqC,EAAE,CAAC;IAE9D,QAAQ,CACN,GAAW,EACX,SAAoF;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,mCAAsB,CAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAAoB;QAC/B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAErE,MAAM,WAAW,GAAG;YAClB,GAAG,4BAAc;YACjB,GAAG,UAAU;SACO,CAAC;QAEvB,wBAAwB,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAA,mCAAiB,EAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,kBAAkB;IAChC,OAAO,IAAA,8BAAa,EAAkC,YAAY,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAC/B,KAAiB,EACjB,EAAU,EACV,KAAiC;IAEjC,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,mBAAK,CAAC,YAAY,CAAC,eAAe,CAAC;QAAE,OAAO;IAChD,IAAI,eAAe,IAAI,iCAAiC;QAAE,OAAO;IACjE,yBAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,CAChC,iDAAiD,EACjD,iBAAiB,EAAE,wCAAwC,MAAM,CAAC,eAAe,CAAC,IAAI;QACpF,qBAAqB,MAAM,CAAC,iCAAiC,CAAC,mBAAmB;QACjF,+DAA+D;QAC/D,gEAAgE,CACnE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type QueueProps } from "aws-cdk-lib/aws-sqs";
|
|
2
|
+
/**
|
|
3
|
+
* Secure, AWS-recommended defaults applied to every SQS queue built
|
|
4
|
+
* with {@link createQueueBuilder}. Each property can be individually
|
|
5
|
+
* overridden via the builder's fluent API.
|
|
6
|
+
*/
|
|
7
|
+
export declare const QUEUE_DEFAULTS: Partial<QueueProps>;
|
|
8
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,UAAU,CA4B9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD;;;;;OAKG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;;;;;OAQG;IACH,UAAU,EAAE,eAAe,CAAC,WAAW;IAEvC;;;;;;OAMG;IACH,sBAAsB,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createQueueBuilder, type IQueueBuilder, type QueueBuilderProps, type QueueBuilderResult, } from "./queue-builder.js";
|
|
2
|
+
export { QUEUE_DEFAULTS } from "./defaults.js";
|
|
3
|
+
export { type QueueAlarmConfig } from "./queue-alarm-config.js";
|
|
4
|
+
export { QUEUE_ALARM_DEFAULTS } from "./queue-alarm-defaults.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AlarmConfig } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls which recommended alarms are created for an SQS queue.
|
|
4
|
+
* All applicable alarms are enabled by default with AWS-recommended thresholds.
|
|
5
|
+
* Set individual alarms to `false` to disable them, or provide an
|
|
6
|
+
* {@link AlarmConfig} to tune thresholds.
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
9
|
+
*/
|
|
10
|
+
export interface QueueAlarmConfig {
|
|
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 the oldest unprocessed message in the queue has been
|
|
19
|
+
* waiting longer than the configured threshold. Primary signal that
|
|
20
|
+
* consumers are falling behind.
|
|
21
|
+
*
|
|
22
|
+
* Metric: `AWS/SQS ApproximateAgeOfOldestMessage`, statistic Maximum,
|
|
23
|
+
* period 1 minute.
|
|
24
|
+
* Default threshold: > 300 seconds (5 minutes).
|
|
25
|
+
*
|
|
26
|
+
* The default is conservative and should be tuned to the queue's
|
|
27
|
+
* SLA and `retentionPeriod`.
|
|
28
|
+
*
|
|
29
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
30
|
+
*/
|
|
31
|
+
approximateAgeOfOldestMessage?: AlarmConfig | false;
|
|
32
|
+
/**
|
|
33
|
+
* Alarm when the number of in-flight (received but not yet deleted)
|
|
34
|
+
* messages approaches the SQS quota of 120,000 per queue. A breach
|
|
35
|
+
* means new messages will start being rejected.
|
|
36
|
+
*
|
|
37
|
+
* Metric: `AWS/SQS ApproximateNumberOfMessagesNotVisible`, statistic
|
|
38
|
+
* Maximum, period 1 minute.
|
|
39
|
+
* Default threshold: > 90,000 (75% of the in-flight quota).
|
|
40
|
+
*
|
|
41
|
+
* @see https://docs.aws.amazon.com/AmazonSQS/latest/SQSDeveloperGuide/quotas-messages.html#quotas-in-flight
|
|
42
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
43
|
+
*/
|
|
44
|
+
approximateNumberOfMessagesNotVisible?: AlarmConfig | false;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=queue-alarm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-config.d.ts","sourceRoot":"","sources":["../../src/queue-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,6BAA6B,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,qCAAqC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-config.js","sourceRoot":"","sources":["../../src/queue-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AlarmConfigDefaults } from "@composurecdk/cloudwatch";
|
|
2
|
+
interface QueueAlarmDefaults {
|
|
3
|
+
enabled: true;
|
|
4
|
+
approximateAgeOfOldestMessage: AlarmConfigDefaults;
|
|
5
|
+
approximateNumberOfMessagesNotVisible: AlarmConfigDefaults;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* AWS-recommended default alarm configuration for SQS queues.
|
|
9
|
+
*
|
|
10
|
+
* Tuned for primary (consumer-fed) queues. Dead-letter queues need
|
|
11
|
+
* different thresholds — any message on a DLQ is itself an alert,
|
|
12
|
+
* whereas a primary queue with messages is normal.
|
|
13
|
+
*
|
|
14
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
15
|
+
*/
|
|
16
|
+
export declare const QUEUE_ALARM_DEFAULTS: QueueAlarmDefaults;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=queue-alarm-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/queue-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,kBAAkB;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,6BAA6B,EAAE,mBAAmB,CAAC;IACnD,qCAAqC,EAAE,mBAAmB,CAAC;CAC5D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBA2BlC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarm-defaults.js","sourceRoot":"","sources":["../../src/queue-alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAS9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,OAAO,EAAE,IAAI;IAEb;;;;OAIG;IACH,6BAA6B,EAAE;QAC7B,SAAS,EAAE,GAAG;QACd,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;;OAKG;IACH,qCAAqC,EAAE;QACrC,SAAS,EAAE,MAAM;QACjB,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { IQueue } from "aws-cdk-lib/aws-sqs";
|
|
3
|
+
import type { IConstruct } from "constructs";
|
|
4
|
+
import type { AlarmDefinition } from "@composurecdk/cloudwatch";
|
|
5
|
+
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
6
|
+
import type { QueueAlarmConfig } from "./queue-alarm-config.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
9
|
+
* {@link AlarmDefinition}s for an SQS queue.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveQueueAlarmDefinitions(queue: IQueue, config: QueueAlarmConfig | undefined): AlarmDefinition[];
|
|
12
|
+
/**
|
|
13
|
+
* Creates AWS-recommended CloudWatch alarms for an SQS queue, merging
|
|
14
|
+
* recommended definitions with any custom alarm builders.
|
|
15
|
+
*
|
|
16
|
+
* @param scope - CDK construct scope for creating alarm constructs.
|
|
17
|
+
* @param id - Base identifier for alarm construct ids.
|
|
18
|
+
* @param queue - The SQS queue to create alarms for.
|
|
19
|
+
* @param config - User-provided alarm configuration, or `false` to disable all.
|
|
20
|
+
* @param customAlarms - Custom alarm builders added via `addAlarm()`.
|
|
21
|
+
* @returns A record mapping alarm keys to their created Alarm constructs.
|
|
22
|
+
*
|
|
23
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
24
|
+
*/
|
|
25
|
+
export declare function createQueueAlarms(scope: IConstruct, id: string, queue: IQueue, config: QueueAlarmConfig | false | undefined, customAlarms?: AlarmDefinitionBuilder<IQueue>[]): Record<string, Alarm>;
|
|
26
|
+
//# sourceMappingURL=queue-alarms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarms.d.ts","sourceRoot":"","sources":["../../src/queue-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAsB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,eAAe,EAAE,CA+CnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,KAAK,GAAG,SAAS,EAC5C,YAAY,GAAE,sBAAsB,CAAC,MAAM,CAAC,EAAO,GAClD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-alarms.js","sourceRoot":"","sources":["../../src/queue-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import { type IQueue, Queue, type QueueProps } from "aws-cdk-lib/aws-sqs";
|
|
3
|
+
import { type IConstruct } from "constructs";
|
|
4
|
+
import { COPY_STATE, type Lifecycle } from "@composurecdk/core";
|
|
5
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
6
|
+
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
7
|
+
import type { QueueAlarmConfig } from "./queue-alarm-config.js";
|
|
8
|
+
/**
|
|
9
|
+
* Configuration properties for the SQS queue builder.
|
|
10
|
+
*
|
|
11
|
+
* Extends the CDK {@link QueueProps} with additional builder-specific options.
|
|
12
|
+
*/
|
|
13
|
+
export interface QueueBuilderProps extends QueueProps {
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for AWS-recommended CloudWatch alarms.
|
|
16
|
+
*
|
|
17
|
+
* By default, the builder creates recommended alarms with sensible
|
|
18
|
+
* thresholds for every applicable metric. Individual alarms can be
|
|
19
|
+
* customized or disabled. Set to `false` to disable all alarms.
|
|
20
|
+
*
|
|
21
|
+
* No alarm actions are configured by default since notification
|
|
22
|
+
* methods are user-specific. Access alarms from the build result
|
|
23
|
+
* or use an `afterBuild` hook to apply actions.
|
|
24
|
+
*
|
|
25
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
26
|
+
*/
|
|
27
|
+
recommendedAlarms?: QueueAlarmConfig | false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The build output of an {@link IQueueBuilder}. Contains the CDK constructs
|
|
31
|
+
* created during {@link Lifecycle.build}, keyed by role.
|
|
32
|
+
*/
|
|
33
|
+
export interface QueueBuilderResult {
|
|
34
|
+
/** The SQS queue construct created by the builder. */
|
|
35
|
+
queue: Queue;
|
|
36
|
+
/**
|
|
37
|
+
* CloudWatch alarms created for the queue, keyed by alarm name.
|
|
38
|
+
*
|
|
39
|
+
* Includes both AWS-recommended alarms and any custom alarms added
|
|
40
|
+
* via {@link IQueueBuilder.addAlarm}. Access individual alarms
|
|
41
|
+
* by key (e.g., `result.alarms.approximateAgeOfOldestMessage`).
|
|
42
|
+
*
|
|
43
|
+
* No alarm actions are configured — apply them via the result or an
|
|
44
|
+
* `afterBuild` hook.
|
|
45
|
+
*
|
|
46
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#SQS
|
|
47
|
+
*/
|
|
48
|
+
alarms: Record<string, Alarm>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A fluent builder for configuring and creating an AWS SQS queue.
|
|
52
|
+
*
|
|
53
|
+
* Each configuration property from the CDK {@link QueueProps} is exposed
|
|
54
|
+
* as an overloaded method: call with a value to set it (returns the builder
|
|
55
|
+
* for chaining), or call with no arguments to read the current value.
|
|
56
|
+
*
|
|
57
|
+
* The builder implements {@link Lifecycle}, so it can be used directly as a
|
|
58
|
+
* component in a {@link compose | composed system}. When built, it creates
|
|
59
|
+
* an SQS queue with the configured properties and returns a
|
|
60
|
+
* {@link QueueBuilderResult}.
|
|
61
|
+
*
|
|
62
|
+
* The builder also creates AWS-recommended CloudWatch alarms by default.
|
|
63
|
+
* Alarms can be customized or disabled via the `recommendedAlarms` property.
|
|
64
|
+
* Custom alarms can be added via the {@link addAlarm} method.
|
|
65
|
+
*
|
|
66
|
+
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_sqs.Queue.html
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const orders = createQueueBuilder()
|
|
71
|
+
* .queueName("orders")
|
|
72
|
+
* .visibilityTimeout(Duration.seconds(60));
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export type IQueueBuilder = ITaggedBuilder<QueueBuilderProps, QueueBuilder>;
|
|
76
|
+
declare class QueueBuilder implements Lifecycle<QueueBuilderResult> {
|
|
77
|
+
#private;
|
|
78
|
+
props: Partial<QueueBuilderProps>;
|
|
79
|
+
addAlarm(key: string, configure: (alarm: AlarmDefinitionBuilder<IQueue>) => AlarmDefinitionBuilder<IQueue>): this;
|
|
80
|
+
/** @internal — see ADR-0005. */
|
|
81
|
+
[COPY_STATE](target: QueueBuilder): void;
|
|
82
|
+
build(scope: IConstruct, id: string): QueueBuilderResult;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Creates a new {@link IQueueBuilder} for configuring an AWS SQS queue.
|
|
86
|
+
*
|
|
87
|
+
* This is the entry point for defining an SQS queue component. The returned
|
|
88
|
+
* builder exposes every {@link QueueBuilderProps} property as a fluent setter/getter
|
|
89
|
+
* and implements {@link Lifecycle} for use with {@link compose}.
|
|
90
|
+
*
|
|
91
|
+
* @returns A fluent builder for an AWS SQS queue.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* const orders = createQueueBuilder()
|
|
96
|
+
* .queueName("orders")
|
|
97
|
+
* .visibilityTimeout(Duration.seconds(60));
|
|
98
|
+
*
|
|
99
|
+
* // Use standalone:
|
|
100
|
+
* const result = orders.build(stack, "Orders");
|
|
101
|
+
*
|
|
102
|
+
* // Or compose into a system:
|
|
103
|
+
* const system = compose(
|
|
104
|
+
* { orders, alerts: createTopicBuilder() },
|
|
105
|
+
* { orders: [], alerts: [] },
|
|
106
|
+
* );
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare function createQueueBuilder(): IQueueBuilder;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=queue-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-builder.d.ts","sourceRoot":"","sources":["../../src/queue-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAehE;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC;IAEb;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE5E,cAAM,YAAa,YAAW,SAAS,CAAC,kBAAkB,CAAC;;IACzD,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAM;IAGvC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,KAAK,sBAAsB,CAAC,MAAM,CAAC,GACnF,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIxC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB;CAgBzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAElD"}
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
import { Annotations, Token } from "aws-cdk-lib";
|
|
1
2
|
import { Queue } from "aws-cdk-lib/aws-sqs";
|
|
2
3
|
import { COPY_STATE } from "@composurecdk/core";
|
|
3
4
|
import { taggedBuilder } from "@composurecdk/cloudformation";
|
|
4
5
|
import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
|
|
5
6
|
import { createQueueAlarms } from "./queue-alarms.js";
|
|
6
7
|
import { QUEUE_DEFAULTS } from "./defaults.js";
|
|
8
|
+
/**
|
|
9
|
+
* AWS-recommended minimum for `maxReceiveCount` on an SQS redrive
|
|
10
|
+
* policy. A consumer needs a few retries before SQS gives up and
|
|
11
|
+
* forwards the message to the dead-letter queue; anything below this
|
|
12
|
+
* tends to surface as a flood of "poison" messages from transient
|
|
13
|
+
* errors that would have succeeded on retry.
|
|
14
|
+
*
|
|
15
|
+
* @see https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
|
|
16
|
+
*/
|
|
17
|
+
const RECOMMENDED_MIN_MAX_RECEIVE_COUNT = 5;
|
|
7
18
|
class QueueBuilder {
|
|
8
19
|
props = {};
|
|
9
20
|
#customAlarms = [];
|
|
@@ -21,6 +32,7 @@ class QueueBuilder {
|
|
|
21
32
|
...QUEUE_DEFAULTS,
|
|
22
33
|
...queueProps,
|
|
23
34
|
};
|
|
35
|
+
warnIfLowMaxReceiveCount(scope, id, mergedProps);
|
|
24
36
|
const queue = new Queue(scope, id, mergedProps);
|
|
25
37
|
const alarms = createQueueAlarms(scope, id, queue, alarmConfig, this.#customAlarms);
|
|
26
38
|
return { queue, alarms };
|
|
@@ -54,4 +66,28 @@ class QueueBuilder {
|
|
|
54
66
|
export function createQueueBuilder() {
|
|
55
67
|
return taggedBuilder(QueueBuilder);
|
|
56
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Annotates `scope` with a non-fatal warning when a redrive policy is
|
|
71
|
+
* configured with `maxReceiveCount` below the AWS-recommended floor
|
|
72
|
+
* of {@link RECOMMENDED_MIN_MAX_RECEIVE_COUNT}.
|
|
73
|
+
*
|
|
74
|
+
* The builder owns the redrive policy directly, so this is a true
|
|
75
|
+
* check rather than a contextual reminder — the actual configured
|
|
76
|
+
* value is compared. Short-circuits on unresolved tokens so stacks
|
|
77
|
+
* that thread `maxReceiveCount` through CFN parameters aren't spammed.
|
|
78
|
+
*/
|
|
79
|
+
function warnIfLowMaxReceiveCount(scope, id, props) {
|
|
80
|
+
const dlq = props.deadLetterQueue;
|
|
81
|
+
if (!dlq)
|
|
82
|
+
return;
|
|
83
|
+
const maxReceiveCount = dlq.maxReceiveCount;
|
|
84
|
+
if (Token.isUnresolved(maxReceiveCount))
|
|
85
|
+
return;
|
|
86
|
+
if (maxReceiveCount >= RECOMMENDED_MIN_MAX_RECEIVE_COUNT)
|
|
87
|
+
return;
|
|
88
|
+
Annotations.of(scope).addWarningV2("@composurecdk/sqs:redrive-low-max-receive-count", `QueueBuilder "${id}": redrive policy maxReceiveCount is ${String(maxReceiveCount)}; ` +
|
|
89
|
+
`AWS recommends >= ${String(RECOMMENDED_MIN_MAX_RECEIVE_COUNT)} so the consumer ` +
|
|
90
|
+
`has room to retry before messages hit the dead-letter queue. ` +
|
|
91
|
+
`See https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html`);
|
|
92
|
+
}
|
|
57
93
|
//# sourceMappingURL=queue-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-builder.js","sourceRoot":"","sources":["../../src/queue-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAe,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAuB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,iCAAiC,GAAG,CAAC,CAAC;AA0E5C,MAAM,YAAY;IAChB,KAAK,GAA+B,EAAE,CAAC;IAC9B,aAAa,GAAqC,EAAE,CAAC;IAE9D,QAAQ,CACN,GAAW,EACX,SAAoF;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,sBAAsB,CAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAoB;QAC/B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAErE,MAAM,WAAW,GAAG;YAClB,GAAG,cAAc;YACjB,GAAG,UAAU;SACO,CAAC;QAEvB,wBAAwB,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,aAAa,CAAkC,YAAY,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAC/B,KAAiB,EACjB,EAAU,EACV,KAAiC;IAEjC,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC;QAAE,OAAO;IAChD,IAAI,eAAe,IAAI,iCAAiC;QAAE,OAAO;IACjE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,CAChC,iDAAiD,EACjD,iBAAiB,EAAE,wCAAwC,MAAM,CAAC,eAAe,CAAC,IAAI;QACpF,qBAAqB,MAAM,CAAC,iCAAiC,CAAC,mBAAmB;QACjF,+DAA+D;QAC/D,gEAAgE,CACnE,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@composurecdk/sqs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Composable SQS queue builder with well-architected defaults",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/laazyj/composureCDK",
|
|
8
8
|
"directory": "packages/sqs"
|
|
9
9
|
},
|
|
10
|
-
"main": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"exports": {
|
|
13
|
-
".": {
|
|
14
|
-
"import": "./dist/index.js",
|
|
15
|
-
"types": "./dist/index.d.ts"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
10
|
"files": [
|
|
19
11
|
"dist",
|
|
20
12
|
"README.md",
|
|
21
13
|
"LICENSE"
|
|
22
14
|
],
|
|
23
15
|
"scripts": {
|
|
24
|
-
"clean": "rm -rf dist",
|
|
25
|
-
"build": "
|
|
16
|
+
"clean": "rm -rf dist .tshy .tshy-build",
|
|
17
|
+
"build": "tshy",
|
|
26
18
|
"typecheck": "tsc --noEmit",
|
|
19
|
+
"check:exports": "attw --pack . --profile node16 && publint",
|
|
27
20
|
"test": "vitest run",
|
|
28
21
|
"test:watch": "vitest"
|
|
29
22
|
},
|
|
@@ -34,18 +27,43 @@
|
|
|
34
27
|
"access": "public"
|
|
35
28
|
},
|
|
36
29
|
"type": "module",
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"tshy": {
|
|
34
|
+
"exports": {
|
|
35
|
+
"./package.json": "./package.json",
|
|
36
|
+
".": "./src/index.ts"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
37
39
|
"peerDependencies": {
|
|
38
|
-
"@composurecdk/cloudformation": "^0.
|
|
39
|
-
"@composurecdk/cloudwatch": "^0.
|
|
40
|
-
"@composurecdk/core": "^0.
|
|
40
|
+
"@composurecdk/cloudformation": "^0.8.0",
|
|
41
|
+
"@composurecdk/cloudwatch": "^0.8.0",
|
|
42
|
+
"@composurecdk/core": "^0.8.0",
|
|
41
43
|
"aws-cdk-lib": "^2.0.0",
|
|
42
44
|
"constructs": "^10.0.0"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^25.
|
|
46
|
-
"aws-cdk-lib": "^2.
|
|
47
|
+
"@types/node": "^25.9.1",
|
|
48
|
+
"aws-cdk-lib": "^2.257.0",
|
|
47
49
|
"constructs": "^10.6.0",
|
|
48
50
|
"typescript": "^6.0.3",
|
|
49
|
-
"vitest": "^4.1.
|
|
50
|
-
}
|
|
51
|
+
"vitest": "^4.1.7"
|
|
52
|
+
},
|
|
53
|
+
"exports": {
|
|
54
|
+
"./package.json": "./package.json",
|
|
55
|
+
".": {
|
|
56
|
+
"import": {
|
|
57
|
+
"types": "./dist/esm/index.d.ts",
|
|
58
|
+
"default": "./dist/esm/index.js"
|
|
59
|
+
},
|
|
60
|
+
"require": {
|
|
61
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
62
|
+
"default": "./dist/commonjs/index.js"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"main": "./dist/commonjs/index.js",
|
|
67
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
68
|
+
"module": "./dist/esm/index.js"
|
|
51
69
|
}
|
package/dist/defaults.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,UAAU,CA4B9C,CAAC"}
|
package/dist/defaults.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD;;;;;OAKG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;;;;;OAQG;IACH,UAAU,EAAE,eAAe,CAAC,WAAW;IAEvC;;;;;;OAMG;IACH,sBAAsB,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarm-config.d.ts","sourceRoot":"","sources":["../src/queue-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,6BAA6B,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,qCAAqC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC7D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarm-config.js","sourceRoot":"","sources":["../src/queue-alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarm-defaults.d.ts","sourceRoot":"","sources":["../src/queue-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,kBAAkB;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,6BAA6B,EAAE,mBAAmB,CAAC;IACnD,qCAAqC,EAAE,mBAAmB,CAAC;CAC5D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBA2BlC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarm-defaults.js","sourceRoot":"","sources":["../src/queue-alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAS9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,OAAO,EAAE,IAAI;IAEb;;;;OAIG;IACH,6BAA6B,EAAE;QAC7B,SAAS,EAAE,GAAG;QACd,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;IAED;;;;;OAKG;IACH,qCAAqC,EAAE;QACrC,SAAS,EAAE,MAAM;QACjB,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarms.d.ts","sourceRoot":"","sources":["../src/queue-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAsB,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,eAAe,EAAE,CA+CnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,gBAAgB,GAAG,KAAK,GAAG,SAAS,EAC5C,YAAY,GAAE,sBAAsB,CAAC,MAAM,CAAC,EAAO,GAClD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
|
package/dist/queue-alarms.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-alarms.js","sourceRoot":"","sources":["../src/queue-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-builder.d.ts","sourceRoot":"","sources":["../src/queue-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC;IAEb;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE5E,cAAM,YAAa,YAAW,SAAS,CAAC,kBAAkB,CAAC;;IACzD,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAM;IAGvC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,KAAK,sBAAsB,CAAC,MAAM,CAAC,GACnF,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIxC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB;CAczD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAElD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue-builder.js","sourceRoot":"","sources":["../src/queue-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAuB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA0E/C,MAAM,YAAY;IAChB,KAAK,GAA+B,EAAE,CAAC;IAC9B,aAAa,GAAqC,EAAE,CAAC;IAE9D,QAAQ,CACN,GAAW,EACX,SAAoF;QAEpF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,sBAAsB,CAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAoB;QAC/B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAErE,MAAM,WAAW,GAAG;YAClB,GAAG,cAAc;YACjB,GAAG,UAAU;SACO,CAAC;QAEvB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,aAAa,CAAkC,YAAY,CAAC,CAAC;AACtE,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|