@aws-cdk/aws-elasticache-alpha 2.218.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ServerlessCacheBase = exports.CacheEngine = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
7
+ const iam = require("aws-cdk-lib/aws-iam");
8
+ const core_1 = require("aws-cdk-lib/core");
9
+ /**
10
+ * Supported cache engines together with available versions.
11
+ */
12
+ var CacheEngine;
13
+ (function (CacheEngine) {
14
+ /**
15
+ * Valkey engine, latest major version available, minor version is selected automatically
16
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
17
+ */
18
+ CacheEngine["VALKEY_LATEST"] = "valkey";
19
+ /**
20
+ * Valkey engine, major version 7, minor version is selected automatically
21
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
22
+ */
23
+ CacheEngine["VALKEY_7"] = "valkey_7";
24
+ /**
25
+ * Valkey engine, major version 8, minor version is selected automatically
26
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
27
+ */
28
+ CacheEngine["VALKEY_8"] = "valkey_8";
29
+ /**
30
+ * Redis engine, latest major version available, minor version is selected automatically
31
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
32
+ */
33
+ CacheEngine["REDIS_LATEST"] = "redis";
34
+ /**
35
+ * Redis engine, major version 7, minor version is selected automatically
36
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
37
+ */
38
+ CacheEngine["REDIS_7"] = "redis_7";
39
+ /**
40
+ * Memcached engine, latest major version available, minor version is selected automatically
41
+ * For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
42
+ */
43
+ CacheEngine["MEMCACHED_LATEST"] = "memcached";
44
+ })(CacheEngine || (exports.CacheEngine = CacheEngine = {}));
45
+ /**
46
+ * Base class for ServerlessCache constructs
47
+ */
48
+ class ServerlessCacheBase extends core_1.Resource {
49
+ /**
50
+ * Grant connect permissions to the cache
51
+ *
52
+ * @param grantee The principal to grant permissions to
53
+ */
54
+ grantConnect(grantee) {
55
+ return this.grant(grantee, 'elasticache:Connect', 'elasticache:DescribeServerlessCaches');
56
+ }
57
+ /**
58
+ * Grant the given identity custom permissions
59
+ *
60
+ * @param grantee The principal to grant permissions to
61
+ * @param actions The actions to grant
62
+ */
63
+ grant(grantee, ...actions) {
64
+ return iam.Grant.addToPrincipal({
65
+ grantee,
66
+ actions,
67
+ resourceArns: [this.serverlessCacheArn],
68
+ });
69
+ }
70
+ /**
71
+ * Return the given named metric for this cache
72
+ *
73
+ * @param metricName The name of the metric
74
+ * @param props Additional properties which will be merged with the default metric
75
+ * @default Average over 5 minutes
76
+ */
77
+ metric(metricName, props) {
78
+ return new cloudwatch.Metric({
79
+ namespace: 'AWS/ElastiCache',
80
+ metricName,
81
+ dimensionsMap: {
82
+ ServerlessCacheName: this.serverlessCacheName,
83
+ },
84
+ period: core_1.Duration.minutes(5),
85
+ statistic: 'Average',
86
+ ...props,
87
+ }).attachTo(this);
88
+ }
89
+ /**
90
+ * Metric for cache hit count
91
+ *
92
+ * @param props Additional properties which will be merged with the default metric
93
+ * @default Sum over 5 minutes
94
+ */
95
+ metricCacheHitCount(props) {
96
+ return this.metric('CacheHits', { statistic: 'Sum', ...props });
97
+ }
98
+ /**
99
+ * Metric for cache miss count
100
+ *
101
+ * @param props Additional properties which will be merged with the default metric
102
+ * @default Sum over 5 minutes
103
+ */
104
+ metricCacheMissCount(props) {
105
+ return this.metric('CacheMisses', { statistic: 'Sum', ...props });
106
+ }
107
+ /**
108
+ * Metric for cache hit rate
109
+ *
110
+ * @param props Additional properties which will be merged with the default metric
111
+ * @default Average over 5 minutes
112
+ */
113
+ metricCacheHitRate(props) {
114
+ return this.metric('CacheHitRate', props);
115
+ }
116
+ /**
117
+ * Metric for data stored in the cache
118
+ *
119
+ * @param props Additional properties which will be merged with the default metric
120
+ * @default Maximum over 5 minutes
121
+ */
122
+ metricDataStored(props) {
123
+ return this.metric('BytesUsedForCache', { statistic: 'Maximum', ...props });
124
+ }
125
+ /**
126
+ * Metric for ECPUs consumed
127
+ *
128
+ * @param props Additional properties which will be merged with the default metric
129
+ * @default Average over 5 minutes
130
+ */
131
+ metricProcessingUnitsConsumed(props) {
132
+ return this.metric('ElastiCacheProcessingUnits', props);
133
+ }
134
+ /**
135
+ * Metric for network bytes in
136
+ *
137
+ * @param props Additional properties which will be merged with the default metric
138
+ * @default Sum over 5 minutes
139
+ */
140
+ metricNetworkBytesIn(props) {
141
+ return this.metric('NetworkBytesIn', { statistic: 'Sum', ...props });
142
+ }
143
+ /**
144
+ * Metric for network bytes out
145
+ *
146
+ * @param props Additional properties which will be merged with the default metric
147
+ * @default Sum over 5 minutes
148
+ */
149
+ metricNetworkBytesOut(props) {
150
+ return this.metric('NetworkBytesOut', { statistic: 'Sum', ...props });
151
+ }
152
+ /**
153
+ * Metric for active connections
154
+ *
155
+ * @param props Additional properties which will be merged with the default metric
156
+ * @default Maximum over 5 minutes
157
+ */
158
+ metricActiveConnections(props) {
159
+ return this.metric('CurrConnections', { statistic: 'Maximum', ...props });
160
+ }
161
+ /**
162
+ * Metric for write request latency
163
+ *
164
+ * @param props Additional properties which will be merged with the default metric
165
+ * @default Average over 5 minutes
166
+ */
167
+ metricWriteRequestLatency(props) {
168
+ return this.metric('SuccessfulWriteRequestLatency', props);
169
+ }
170
+ /**
171
+ * Metric for read request latency
172
+ *
173
+ * @param props Additional properties which will be merged with the default metric
174
+ * @default Average over 5 minutes
175
+ */
176
+ metricReadRequestLatency(props) {
177
+ return this.metric('SuccessfulReadRequestLatency', props);
178
+ }
179
+ }
180
+ exports.ServerlessCacheBase = ServerlessCacheBase;
181
+ _a = JSII_RTTI_SYMBOL_1;
182
+ ServerlessCacheBase[_a] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCacheBase", version: "2.218.0-alpha.0" };
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jYWNoZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VydmVybGVzcy1jYWNoZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseURBQXlEO0FBRXpELDJDQUEyQztBQUUzQywyQ0FBaUU7QUFFakU7O0dBRUc7QUFDSCxJQUFZLFdBK0JYO0FBL0JELFdBQVksV0FBVztJQUNyQjs7O09BR0c7SUFDSCx1Q0FBd0IsQ0FBQTtJQUN4Qjs7O09BR0c7SUFDSCxvQ0FBcUIsQ0FBQTtJQUNyQjs7O09BR0c7SUFDSCxvQ0FBcUIsQ0FBQTtJQUNyQjs7O09BR0c7SUFDSCxxQ0FBc0IsQ0FBQTtJQUN0Qjs7O09BR0c7SUFDSCxrQ0FBbUIsQ0FBQTtJQUNuQjs7O09BR0c7SUFDSCw2Q0FBOEIsQ0FBQTtBQUNoQyxDQUFDLEVBL0JXLFdBQVcsMkJBQVgsV0FBVyxRQStCdEI7QUFzR0Q7O0dBRUc7QUFDSCxNQUFzQixtQkFBb0IsU0FBUSxlQUFRO0lBaUJ4RDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLE9BQXVCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztLQUMzRjtJQUNEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ3hDLENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFVBQWtCLEVBQUUsS0FBZ0M7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsU0FBUyxFQUFFLGlCQUFpQjtZQUM1QixVQUFVO1lBQ1YsYUFBYSxFQUFFO2dCQUNiLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDOUM7WUFDRCxNQUFNLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQjtJQUNEOzs7OztPQUtHO0lBQ0ksbUJBQW1CLENBQUMsS0FBZ0M7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFnQztRQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbkU7SUFDRDs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLEtBQWdDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0M7SUFDRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEtBQWdDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBQ0Q7Ozs7O09BS0c7SUFDSSw2QkFBNkIsQ0FBQyxLQUFnQztRQUNuRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekQ7SUFDRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQWdDO1FBQzFELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxxQkFBcUIsQ0FBQyxLQUFnQztRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUNEOzs7OztPQUtHO0lBQ0ksdUJBQXVCLENBQUMsS0FBZ0M7UUFDN0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0U7SUFDRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLEtBQWdDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1RDtJQUNEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQUMsS0FBZ0M7UUFDOUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzNEOztBQW5KSCxrREFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVXNlckdyb3VwIH0gZnJvbSAnLi91c2VyLWdyb3VwJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgSVJlc291cmNlLCBSZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcblxuLyoqXG4gKiBTdXBwb3J0ZWQgY2FjaGUgZW5naW5lcyB0b2dldGhlciB3aXRoIGF2YWlsYWJsZSB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVFbmdpbmUge1xuICAvKipcbiAgICogVmFsa2V5IGVuZ2luZSwgbGF0ZXN0IG1ham9yIHZlcnNpb24gYXZhaWxhYmxlLCBtaW5vciB2ZXJzaW9uIGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHlcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdGhpcyB2ZXJzaW9uIGNoZWNrOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRWxhc3RpQ2FjaGUvbGF0ZXN0L2RnL2VuZ2luZS12ZXJzaW9ucy5odG1sXG4gICAqL1xuICBWQUxLRVlfTEFURVNUID0gJ3ZhbGtleScsXG4gIC8qKlxuICAgKiBWYWxrZXkgZW5naW5lLCBtYWpvciB2ZXJzaW9uIDcsIG1pbm9yIHZlcnNpb24gaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseVxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgcmVsYXRlZCB0byB0aGlzIHZlcnNpb24gY2hlY2s6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvZW5naW5lLXZlcnNpb25zLmh0bWxcbiAgICovXG4gIFZBTEtFWV83ID0gJ3ZhbGtleV83JyxcbiAgLyoqXG4gICAqIFZhbGtleSBlbmdpbmUsIG1ham9yIHZlcnNpb24gOCwgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgVkFMS0VZXzggPSAndmFsa2V5XzgnLFxuICAvKipcbiAgICogUmVkaXMgZW5naW5lLCBsYXRlc3QgbWFqb3IgdmVyc2lvbiBhdmFpbGFibGUsIG1pbm9yIHZlcnNpb24gaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseVxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgcmVsYXRlZCB0byB0aGlzIHZlcnNpb24gY2hlY2s6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvZW5naW5lLXZlcnNpb25zLmh0bWxcbiAgICovXG4gIFJFRElTX0xBVEVTVCA9ICdyZWRpcycsXG4gIC8qKlxuICAgKiBSZWRpcyBlbmdpbmUsIG1ham9yIHZlcnNpb24gNywgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgUkVESVNfNyA9ICdyZWRpc183JyxcbiAgLyoqXG4gICAqIE1lbWNhY2hlZCBlbmdpbmUsIGxhdGVzdCBtYWpvciB2ZXJzaW9uIGF2YWlsYWJsZSwgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgTUVNQ0FDSEVEX0xBVEVTVCA9ICdtZW1jYWNoZWQnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBTZXJ2ZXJsZXNzIEVsYXN0aUNhY2hlIGNhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlcmxlc3NDYWNoZSBleHRlbmRzIElSZXNvdXJjZSwgZWMyLklDb25uZWN0YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgZW5naW5lIHVzZWQgYnkgdGhpcyBjYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogQ2FjaGVFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBvZiBiYWNrdXBzIHJlc3RvcmVkIGluIHRoZSBjYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwQXJuc1RvUmVzdG9yZT86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoaXMgY2FjaGUgaXMgZGVwbG95ZWQgaW5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIHN1Ym5ldHMgdGhpcyBjYWNoZSBpcyBkZXBsb3llZCBpblxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0cz86IGVjMi5JU3VibmV0W107XG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICAvKipcbiAgICogVGhlIHVzZXIgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cD86IElVc2VyR3JvdXA7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvIHRoZSBjYWNoZVxuICAgKi9cbiAgZ3JhbnRDb25uZWN0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBjYWNoZVxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgY2FjaGUgaGl0IGNvdW50XG4gICAqL1xuICBtZXRyaWNDYWNoZUhpdENvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIG1pc3MgY291bnRcbiAgICovXG4gIG1ldHJpY0NhY2hlTWlzc0NvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIGhpdCByYXRlXG4gICAqL1xuICBtZXRyaWNDYWNoZUhpdFJhdGUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgZGF0YSBzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBtZXRyaWNEYXRhU3RvcmVkKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIEVDUFVzIGNvbnN1bWVkXG4gICAqL1xuICBtZXRyaWNQcm9jZXNzaW5nVW5pdHNDb25zdW1lZChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuICAvKipcbiAgICogTWV0cmljIGZvciBuZXR3b3JrIGJ5dGVzIGluXG4gICAqL1xuICBtZXRyaWNOZXR3b3JrQnl0ZXNJbihwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuICAvKipcbiAgICogTWV0cmljIGZvciBuZXR3b3JrIGJ5dGVzIG91dFxuICAgKi9cbiAgbWV0cmljTmV0d29ya0J5dGVzT3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGFjdGl2ZSBjb25uZWN0aW9uc1xuICAgKi9cbiAgbWV0cmljQWN0aXZlQ29ubmVjdGlvbnMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3Igd3JpdGUgcmVxdWVzdCBsYXRlbmN5XG4gICAqL1xuICBtZXRyaWNXcml0ZVJlcXVlc3RMYXRlbmN5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHJlYWQgcmVxdWVzdCBsYXRlbmN5XG4gICAqL1xuICBtZXRyaWNSZWFkUmVxdWVzdExhdGVuY3kocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBTZXJ2ZXJsZXNzQ2FjaGUgY29uc3RydWN0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VydmVybGVzc0NhY2hlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVNlcnZlcmxlc3NDYWNoZSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBlbmdpbmU/OiBDYWNoZUVuZ2luZTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJhY2t1cEFybnNUb1Jlc3RvcmU/OiBzdHJpbmdbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdWJuZXRzPzogZWMyLklTdWJuZXRbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2VyR3JvdXA/OiBJVXNlckdyb3VwO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQWNjZXNzIHRvIG5ldHdvcmsgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcblxuICAvKipcbiAgICogR3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0byB0aGUgY2FjaGVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50Q29ubmVjdChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2VsYXN0aWNhY2hlOkNvbm5lY3QnLCAnZWxhc3RpY2FjaGU6RGVzY3JpYmVTZXJ2ZXJsZXNzQ2FjaGVzJyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBpZGVudGl0eSBjdXN0b20gcGVybWlzc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuc2VydmVybGVzc0NhY2hlQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VsYXN0aUNhY2hlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFNlcnZlcmxlc3NDYWNoZU5hbWU6IHRoaXMuc2VydmVybGVzc0NhY2hlTmFtZSxcbiAgICAgIH0sXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIGhpdCBjb3VudFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0NhY2hlSGl0Q291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDYWNoZUhpdHMnLCB7IHN0YXRpc3RpYzogJ1N1bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIG1pc3MgY291bnRcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZU1pc3NDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0NhY2hlTWlzc2VzJywgeyBzdGF0aXN0aWM6ICdTdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciBjYWNoZSBoaXQgcmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IEF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZUhpdFJhdGUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDYWNoZUhpdFJhdGUnLCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgZGF0YSBzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgTWF4aW11bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0RhdGFTdG9yZWQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdCeXRlc1VzZWRGb3JDYWNoZScsIHsgc3RhdGlzdGljOiAnTWF4aW11bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIEVDUFVzIGNvbnN1bWVkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1Byb2Nlc3NpbmdVbml0c0NvbnN1bWVkKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRWxhc3RpQ2FjaGVQcm9jZXNzaW5nVW5pdHMnLCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgbmV0d29yayBieXRlcyBpblxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY05ldHdvcmtCeXRlc0luKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnTmV0d29ya0J5dGVzSW4nLCB7IHN0YXRpc3RpYzogJ1N1bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIG5ldHdvcmsgYnl0ZXMgb3V0XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTmV0d29ya0J5dGVzT3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnTmV0d29ya0J5dGVzT3V0JywgeyBzdGF0aXN0aWM6ICdTdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciBhY3RpdmUgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBNYXhpbXVtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aXZlQ29ubmVjdGlvbnMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDdXJyQ29ubmVjdGlvbnMnLCB7IHN0YXRpc3RpYzogJ01heGltdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciB3cml0ZSByZXF1ZXN0IGxhdGVuY3lcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljV3JpdGVSZXF1ZXN0TGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1N1Y2Nlc3NmdWxXcml0ZVJlcXVlc3RMYXRlbmN5JywgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHJlYWQgcmVxdWVzdCBsYXRlbmN5XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1JlYWRSZXF1ZXN0TGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1N1Y2Nlc3NmdWxSZWFkUmVxdWVzdExhdGVuY3knLCBwcm9wcyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,341 @@
1
+ import { Construct } from 'constructs';
2
+ import { IServerlessCache, ServerlessCacheBase, CacheEngine } from './serverless-cache-base';
3
+ import { IUserGroup } from './user-group';
4
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
5
+ import * as events from 'aws-cdk-lib/aws-events';
6
+ import * as kms from 'aws-cdk-lib/aws-kms';
7
+ import { Size } from 'aws-cdk-lib/core';
8
+ /**
9
+ * Usage limits configuration for ServerlessCache
10
+ */
11
+ export interface CacheUsageLimitsProperty {
12
+ /**
13
+ * Minimum data storage size (1 GB)
14
+ *
15
+ * @default - No minimum limit
16
+ */
17
+ readonly dataStorageMinimumSize?: Size;
18
+ /**
19
+ * Maximum data storage size (5000 GB)
20
+ *
21
+ * @default - No maximum limit
22
+ */
23
+ readonly dataStorageMaximumSize?: Size;
24
+ /**
25
+ * Minimum request rate limit (1000 ECPUs per second)
26
+ *
27
+ * @default - No minimum limit
28
+ */
29
+ readonly requestRateLimitMinimum?: number;
30
+ /**
31
+ * Maximum request rate limit (15000000 ECPUs per second)
32
+ *
33
+ * @default - No maximum limit
34
+ */
35
+ readonly requestRateLimitMaximum?: number;
36
+ }
37
+ /**
38
+ * Backup configuration for ServerlessCache
39
+ */
40
+ export interface BackupSettings {
41
+ /**
42
+ * Automated daily backup UTC time
43
+ *
44
+ * @default - No automated backups
45
+ */
46
+ readonly backupTime?: events.Schedule;
47
+ /**
48
+ * Number of days to retain backups (1-35)
49
+ *
50
+ * @default - Backups are not retained
51
+ */
52
+ readonly backupRetentionLimit?: number;
53
+ /**
54
+ * Name for the final backup taken before deletion
55
+ *
56
+ * @default - No final backup
57
+ */
58
+ readonly backupNameBeforeDeletion?: string;
59
+ /**
60
+ * ARNs of backups from which to restore data into the new cache
61
+ *
62
+ * @default - Create a new cache with no existing data
63
+ */
64
+ readonly backupArnsToRestore?: string[];
65
+ }
66
+ /**
67
+ * Properties for defining a ServerlessCache
68
+ */
69
+ export interface ServerlessCacheProps {
70
+ /**
71
+ * The cache engine combined with the version
72
+ * Enum options: VALKEY_DEFAULT, VALKEY_7, VALKEY_8, REDIS_DEFAULT, MEMCACHED_DEFAULT
73
+ * The default options bring the latest versions available.
74
+ *
75
+ * @default when not provided, the default engine would be Valkey, latest version available (VALKEY_DEFAULT)
76
+ */
77
+ readonly engine?: CacheEngine;
78
+ /**
79
+ * Name for the serverless cache
80
+ *
81
+ * @default automatically generated name by Resource
82
+ */
83
+ readonly serverlessCacheName?: string;
84
+ /**
85
+ * A description for the cache
86
+ *
87
+ * @default - No description
88
+ */
89
+ readonly description?: string;
90
+ /**
91
+ * Usage limits for the cache
92
+ *
93
+ * @default - No usage limits
94
+ */
95
+ readonly cacheUsageLimits?: CacheUsageLimitsProperty;
96
+ /**
97
+ * Backup configuration
98
+ *
99
+ * @default - No backups configured
100
+ */
101
+ readonly backup?: BackupSettings;
102
+ /**
103
+ * KMS key for encryption
104
+ *
105
+ * @default - Service managed encryption (AWS owned KMS key)
106
+ */
107
+ readonly kmsKey?: kms.IKey;
108
+ /**
109
+ * The VPC to place the cache in
110
+ */
111
+ readonly vpc: ec2.IVpc;
112
+ /**
113
+ * Which subnets to place the cache in
114
+ *
115
+ * @default - Private subnets with egress
116
+ */
117
+ readonly vpcSubnets?: ec2.SubnetSelection;
118
+ /**
119
+ * Security groups for the cache
120
+ *
121
+ * @default - A new security group is created
122
+ */
123
+ readonly securityGroups?: ec2.ISecurityGroup[];
124
+ /**
125
+ * User group for access control
126
+ *
127
+ * @default - No user group
128
+ */
129
+ readonly userGroup?: IUserGroup;
130
+ }
131
+ /**
132
+ * Attributes that can be specified when importing a ServerlessCache
133
+ */
134
+ export interface ServerlessCacheAttributes {
135
+ /**
136
+ * The cache engine used by this cache
137
+ *
138
+ * @default - engine type is unknown
139
+ */
140
+ readonly engine?: CacheEngine;
141
+ /**
142
+ * The name of the serverless cache
143
+ *
144
+ * One of `serverlessCacheName` or `serverlessCacheArn` is required.
145
+ *
146
+ * @default - derived from serverlessCacheArn
147
+ */
148
+ readonly serverlessCacheName?: string;
149
+ /**
150
+ * The ARN of the serverless cache
151
+ *
152
+ * One of `serverlessCacheName` or `serverlessCacheArn` is required.
153
+ *
154
+ * @default - derived from serverlessCacheName
155
+ */
156
+ readonly serverlessCacheArn?: string;
157
+ /**
158
+ * The ARNs of backups restored in the cache
159
+ *
160
+ * @default - backups are unknown
161
+ */
162
+ readonly backupArnsToRestore?: string[];
163
+ /**
164
+ * The KMS key used for encryption
165
+ *
166
+ * @default - encryption key is unknown
167
+ */
168
+ readonly kmsKey?: kms.IKey;
169
+ /**
170
+ * The VPC this cache is deployed in
171
+ *
172
+ * @default - VPC is unknown
173
+ */
174
+ readonly vpc?: ec2.IVpc;
175
+ /**
176
+ * The subnets this cache is deployed in
177
+ *
178
+ * @default - subnets are unknown
179
+ */
180
+ readonly subnets?: ec2.ISubnet[];
181
+ /**
182
+ * The security groups associated with this cache
183
+ *
184
+ * @default - security groups are unknown
185
+ */
186
+ readonly securityGroups?: ec2.ISecurityGroup[];
187
+ /**
188
+ * The user group associated with this cache
189
+ *
190
+ * @default - user group is unknown
191
+ */
192
+ readonly userGroup?: IUserGroup;
193
+ }
194
+ /**
195
+ * A serverless ElastiCache cache
196
+ *
197
+ * @resource AWS::ElastiCache::ServerlessCache
198
+ */
199
+ export declare class ServerlessCache extends ServerlessCacheBase {
200
+ /**
201
+ * Uniquely identifies this class.
202
+ */
203
+ static readonly PROPERTY_INJECTION_ID: string;
204
+ /**
205
+ * Return whether the given object is a `ServerlessCache`
206
+ */
207
+ static isServerlessCache(x: any): x is ServerlessCache;
208
+ /**
209
+ * Import an existing serverless cache by name
210
+ *
211
+ * @param scope The parent creating construct (usually `this`)
212
+ * @param id The construct's name
213
+ * @param serverlessCacheName The name of the existing serverless cache
214
+ */
215
+ static fromServerlessCacheName(scope: Construct, id: string, serverlessCacheName: string): IServerlessCache;
216
+ /**
217
+ * Import an existing serverless cache by ARN
218
+ *
219
+ * @param scope The parent creating construct (usually `this`)
220
+ * @param id The construct's name
221
+ * @param serverlessCacheArn The ARN of the existing serverless cache
222
+ */
223
+ static fromServerlessCacheArn(scope: Construct, id: string, serverlessCacheArn: string): IServerlessCache;
224
+ /**
225
+ * Import an existing serverless cache using attributes
226
+ *
227
+ * @param scope The parent creating construct (usually `this`)
228
+ * @param id The construct's name
229
+ * @param attrs A `ServerlessCacheAttributes` object
230
+ */
231
+ static fromServerlessCacheAttributes(scope: Construct, id: string, attrs: ServerlessCacheAttributes): IServerlessCache;
232
+ readonly engine?: CacheEngine;
233
+ readonly serverlessCacheName: string;
234
+ readonly backupArnsToRestore?: string[];
235
+ readonly kmsKey?: kms.IKey;
236
+ readonly vpc?: ec2.IVpc;
237
+ readonly subnets?: ec2.ISubnet[];
238
+ readonly securityGroups?: ec2.ISecurityGroup[];
239
+ readonly userGroup?: IUserGroup;
240
+ /**
241
+ * The ARN of the serverless cache
242
+ *
243
+ * @attribute
244
+ */
245
+ readonly serverlessCacheArn: string;
246
+ /**
247
+ * The endpoint address of the serverless cache
248
+ *
249
+ * @attribute
250
+ */
251
+ readonly serverlessCacheEndpointAddress: string;
252
+ /**
253
+ * The endpoint port of the serverless cache
254
+ *
255
+ * @attribute
256
+ */
257
+ readonly serverlessCacheEndpointPort: string;
258
+ /**
259
+ * The reader endpoint address of the serverless cache
260
+ *
261
+ * @attribute
262
+ */
263
+ readonly serverlessCacheReaderEndpointAddress: string;
264
+ /**
265
+ * The reader endpoint port of the serverless cache
266
+ *
267
+ * @attribute
268
+ */
269
+ readonly serverlessCacheReaderEndpointPort: string;
270
+ /**
271
+ * The current status of the serverless cache
272
+ * Can be 'CREATING', 'AVAILABLE', 'DELETING', 'CREATE-FAILED', 'MODIFYING'
273
+ *
274
+ * @attribute
275
+ */
276
+ readonly serverlessCacheStatus: string;
277
+ /**
278
+ * Access to network connections
279
+ */
280
+ readonly connections: ec2.Connections;
281
+ constructor(scope: Construct, id: string, props: ServerlessCacheProps);
282
+ /**
283
+ * Validate description meets AWS requirements
284
+ *
285
+ * @param description The description to validate
286
+ */
287
+ private validateDescription;
288
+ /**
289
+ * Validate data storage size limits
290
+ *
291
+ * @param limits The usage limits containing data storage settings
292
+ */
293
+ private validateDataStorageLimits;
294
+ /**
295
+ * Validate request rate limits
296
+ *
297
+ * @param limits The usage limits containing request rate settings
298
+ */
299
+ private validateRequestRateLimits;
300
+ /**
301
+ * Validate backup settings meet AWS requirements
302
+ *
303
+ * @param backup The backup settings to validate
304
+ */
305
+ private validateBackupSettings;
306
+ /**
307
+ * Validate user group compatibility with cache engine
308
+ *
309
+ * @param engine The cache engine
310
+ * @param userGroup The user group to validate
311
+ */
312
+ private validateUserGroupCompatibility;
313
+ /**
314
+ * Render cache usage limits for CloudFormation
315
+ *
316
+ * @param limits The usage limits to render
317
+ * @returns CloudFormation-compatible usage limits object or undefined
318
+ */
319
+ private renderCacheUsageLimits;
320
+ /**
321
+ * Configure subnets for the cache
322
+ *
323
+ * @param props The ServerlessCache properties
324
+ * @returns Object containing subnet IDs and subnet objects
325
+ */
326
+ private configureSubnets;
327
+ /**
328
+ * Configure security groups for the cache
329
+ *
330
+ * @param props The ServerlessCache properties
331
+ * @returns Object containing security group IDs and security group objects
332
+ */
333
+ private configureSecurityGroups;
334
+ /**
335
+ * Format schedule to HH:MM format for daily backups
336
+ *
337
+ * @param schedule The schedule to format
338
+ * @returns Time string in HH:MM format
339
+ */
340
+ private formatBackupTime;
341
+ }