@ashishpandeyone/cdk-lambda-web-function 0.1.2 → 0.1.3
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/.jsii +649 -79
- package/.jsii.tabl.json +1 -1
- package/API.md +506 -0
- package/README.md +47 -5
- package/assets/web-function-provider/index.js +26 -26
- package/lib/nodejs-web-function.js +1 -1
- package/lib/private/metrics.d.ts +23 -0
- package/lib/private/metrics.js +49 -0
- package/lib/private/provider-protocol.d.ts +17 -0
- package/lib/private/provider-protocol.js +6 -2
- package/lib/private/provider.d.ts +3 -3
- package/lib/private/provider.js +15 -5
- package/lib/private/regional-alarm.d.ts +23 -0
- package/lib/private/regional-alarm.js +40 -0
- package/lib/private/rollback.d.ts +9 -0
- package/lib/private/rollback.js +3 -0
- package/lib/private/traffic-shift.d.ts +2 -0
- package/lib/private/traffic-shift.js +3 -2
- package/lib/web-function-deployment.d.ts +64 -0
- package/lib/web-function-deployment.js +41 -6
- package/lib/web-function-endpoint.d.ts +46 -0
- package/lib/web-function-endpoint.js +155 -2
- package/lib/web-function-grants.js +1 -1
- package/lib/web-function-revision.js +1 -1
- package/lib/web-function.d.ts +30 -0
- package/lib/web-function.js +52 -2
- package/package.json +2 -2
|
@@ -11,12 +11,12 @@ const MAX_STEPS = 20;
|
|
|
11
11
|
* How an endpoint moves its traffic to a new revision.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionDeployment {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.3" };
|
|
15
15
|
/**
|
|
16
16
|
* All traffic moves to the new revision at once, as soon as it's ready (the default).
|
|
17
17
|
*/
|
|
18
18
|
static allAtOnce() {
|
|
19
|
-
return new WebFunctionDeployment('allAtOnce', [100], 0, []);
|
|
19
|
+
return new WebFunctionDeployment('allAtOnce', [100], 0, [], undefined);
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* The new revision first gets `percent` of the traffic for `bake`, then all of it.
|
|
@@ -24,7 +24,7 @@ class WebFunctionDeployment {
|
|
|
24
24
|
static canary(options) {
|
|
25
25
|
const percent = wholePercent('canary', 'percent', options.percent, 1, 99);
|
|
26
26
|
const bake = minutes('canary', 'bake', options.bake, MAX_TOTAL_WAIT_MINUTES);
|
|
27
|
-
return new WebFunctionDeployment('canary', [percent, 100], bake.toSeconds(), options.alarms ?? []);
|
|
27
|
+
return new WebFunctionDeployment('canary', [percent, 100], bake.toSeconds(), options.alarms ?? [], rollbackOn('canary', options.rollbackOn));
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* The new revision gets `percent` more of the traffic every `interval` until it has all of it.
|
|
@@ -40,7 +40,7 @@ class WebFunctionDeployment {
|
|
|
40
40
|
if (total > MAX_TOTAL_WAIT_MINUTES * 60) {
|
|
41
41
|
throw new Error(`WebFunctionDeployment.linear: ${steps.length - 1} intervals of ${interval.toHumanString()} take ${total / 60} minutes; at most ${MAX_TOTAL_WAIT_MINUTES} are allowed`);
|
|
42
42
|
}
|
|
43
|
-
return new WebFunctionDeployment('linear', steps, interval.toSeconds(), options.alarms ?? []);
|
|
43
|
+
return new WebFunctionDeployment('linear', steps, interval.toSeconds(), options.alarms ?? [], rollbackOn('linear', options.rollbackOn));
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* The new revision's share of traffic at each step, in percent; the last is 100.
|
|
@@ -58,11 +58,18 @@ class WebFunctionDeployment {
|
|
|
58
58
|
_alarms;
|
|
59
59
|
/** @internal */
|
|
60
60
|
_kind;
|
|
61
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Thresholds for the alarms the endpoint creates, with defaults applied.
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
_rollbackOn;
|
|
67
|
+
constructor(kind, steps, waitSeconds, alarms, rollback) {
|
|
62
68
|
this._kind = kind;
|
|
63
69
|
this._steps = steps;
|
|
64
70
|
this._waitSeconds = waitSeconds;
|
|
65
71
|
this._alarms = alarms;
|
|
72
|
+
this._rollbackOn = rollback;
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
75
|
* Whether traffic moves in steps (canary or linear) rather than all at once.
|
|
@@ -87,4 +94,32 @@ function minutes(kind, name, value, maxMinutes) {
|
|
|
87
94
|
}
|
|
88
95
|
return aws_cdk_lib_1.Duration.seconds(seconds);
|
|
89
96
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLWRlcGxveW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2ViLWZ1bmN0aW9uLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUE4QztBQUc5QyxnSUFBZ0k7QUFDaEksTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsMEZBQTBGO0FBQzFGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQXVEckI7O0dBRUc7QUFDSCxNQUFhLHFCQUFxQjs7SUFDaEM7O09BRUc7SUFDSSxNQUFNLENBQUMsU0FBUztRQUNyQixPQUFPLElBQUkscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBMkM7UUFDOUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUEyQztRQUM5RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxTQUFTLEVBQUUsRUFB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SyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1SyxDQUFDO0lBQ0QsT0FBTyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcblxuLyoqIExvbmdlc3QgdG90YWwgd2FpdCBvZiBhIGRlcGxveW1lbnQ6IHRoZSBkZXBsb3ltZW50IHN0ZXAgbXVzdCBmaW5pc2ggd2l0aGluIENsb3VkRm9ybWF0aW9uJ3MgMS1ob3VyIGN1c3RvbSByZXNvdXJjZSBsaW1pdC4gKi9cbmNvbnN0IE1BWF9UT1RBTF9XQUlUX01JTlVURVMgPSA0NTtcbi8qKiBNb3N0IHRyYWZmaWMgc3RlcHM6IGVhY2ggb25lIGFsc28gd2FpdHMgZm9yIHRoZSBlbmRwb2ludCB0byB1cGRhdGUgaW4gZXZlcnkgcmVnaW9uLiAqL1xuY29uc3QgTUFYX1NURVBTID0gMjA7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSBjYW5hcnkgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJGdW5jdGlvbkNhbmFyeURlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzaGFyZSBvZiB0cmFmZmljLCBpbiB3aG9sZSBwZXJjZW50ICgxLTk5KSwgdGhhdCB0aGUgbmV3IHJldmlzaW9uIGdldHMgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSBwZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIHRoZSBuZXcgcmV2aXNpb24gc2VydmVzIGBwZXJjZW50YCBiZWZvcmUgaXQgZ2V0cyBhbGwgdHJhZmZpYyAoMS00NSBtaW51dGVzKS5cbiAgICogTWFrZSBpdCBsb25nZXIgdGhhbiB0aGUgdGltZSB5b3VyIGFsYXJtcyBuZWVkIHRvIGZpcmUgKHBlcmlvZCDDlyBldmFsdWF0aW9uIHBlcmlvZHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFrZTogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEFsYXJtcyB0aGF0IHN0b3AgdGhlIGRlcGxveW1lbnQ6IGlmIG9uZSBpcyBpbiBBTEFSTSwgdGhlIGVuZHBvaW50IGdvZXMgYmFjayB0byB0aGUgcHJldmlvdXNcbiAgICogcmV2aXNpb24gYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzLCBzbyBDbG91ZEZvcm1hdGlvbiByb2xscyB0aGUgc3RhY2sgYmFjay5cbiAgICpcbiAgICogVGhleSdyZSBjaGVja2VkIGJlZm9yZSB0cmFmZmljIG1vdmVzLCBkdXJpbmcgdGhlIGJha2UsIGFuZCBvbmNlIHRoZSBuZXcgcmV2aXNpb24gaGFzIGFsbCB0cmFmZmljLlxuICAgKiBVc2UgYWxhcm1zIGluIGFueSByZWdpb24gKGJ5IEFSTiksIGluY2x1ZGluZyBjb21wb3NpdGUgYWxhcm1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFsYXJtczogdHJhZmZpYyBtb3ZlcyBvbiBhIHRpbWVyXG4gICAqL1xuICByZWFkb25seSBhbGFybXM/OiBjbG91ZHdhdGNoLklBbGFybVtdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgbGluZWFyIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViRnVuY3Rpb25MaW5lYXJEZXBsb3ltZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmUgb2YgdHJhZmZpYywgaW4gd2hvbGUgcGVyY2VudCAoNS01MCksIHRoYXQgbW92ZXMgdG8gdGhlIG5ldyByZXZpc2lvbiBhdCBlYWNoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBwZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIGVhY2ggc3RlcCBzZXJ2ZXMgYmVmb3JlIHRoZSBuZXh0IG9uZSAoYXQgbGVhc3QgMSBtaW51dGUsIGFuZCBhdCBtb3N0IDQ1IG1pbnV0ZXMgaW4gdG90YWwpLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw6IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbGFybXMgdGhhdCBzdG9wIHRoZSBkZXBsb3ltZW50OiBpZiBvbmUgaXMgaW4gQUxBUk0sIHRoZSBlbmRwb2ludCBnb2VzIGJhY2sgdG8gdGhlIHByZXZpb3VzXG4gICAqIHJldmlzaW9uIGFuZCB0aGUgZGVwbG95bWVudCBmYWlscywgc28gQ2xvdWRGb3JtYXRpb24gcm9sbHMgdGhlIHN0YWNrIGJhY2suXG4gICAqXG4gICAqIFRoZXkncmUgY2hlY2tlZCBiZWZvcmUgdHJhZmZpYyBtb3ZlcywgZHVyaW5nIGV2ZXJ5IHN0ZXAsIGFuZCBvbmNlIHRoZSBuZXcgcmV2aXNpb24gaGFzIGFsbCB0cmFmZmljLlxuICAgKiBVc2UgYWxhcm1zIGluIGFueSByZWdpb24gKGJ5IEFSTiksIGluY2x1ZGluZyBjb21wb3NpdGUgYWxhcm1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFsYXJtczogdHJhZmZpYyBtb3ZlcyBvbiBhIHRpbWVyXG4gICAqL1xuICByZWFkb25seSBhbGFybXM/OiBjbG91ZHdhdGNoLklBbGFybVtdO1xufVxuXG4vKipcbiAqIEhvdyBhbiBlbmRwb2ludCBtb3ZlcyBpdHMgdHJhZmZpYyB0byBhIG5ldyByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYkZ1bmN0aW9uRGVwbG95bWVudCB7XG4gIC8qKlxuICAgKiBBbGwgdHJhZmZpYyBtb3ZlcyB0byB0aGUgbmV3IHJldmlzaW9uIGF0IG9uY2UsIGFzIHNvb24gYXMgaXQncyByZWFkeSAodGhlIGRlZmF1bHQpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbGxBdE9uY2UoKTogV2ViRnVuY3Rpb25EZXBsb3ltZW50IHtcbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uRGVwbG95bWVudCgnYWxsQXRPbmNlJywgWzEwMF0sIDAsIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHJldmlzaW9uIGZpcnN0IGdldHMgYHBlcmNlbnRgIG9mIHRoZSB0cmFmZmljIGZvciBgYmFrZWAsIHRoZW4gYWxsIG9mIGl0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjYW5hcnkob3B0aW9uczogV2ViRnVuY3Rpb25DYW5hcnlEZXBsb3ltZW50T3B0aW9ucyk6IFdlYkZ1bmN0aW9uRGVwbG95bWVudCB7XG4gICAgY29uc3QgcGVyY2VudCA9IHdob2xlUGVyY2VudCgnY2FuYXJ5JywgJ3BlcmNlbnQnLCBvcHRpb25zLnBlcmNlbnQsIDEsIDk5KTtcbiAgICBjb25zdCBiYWtlID0gbWludXRlcygnY2FuYXJ5JywgJ2Jha2UnLCBvcHRpb25zLmJha2UsIE1BWF9UT1RBTF9XQUlUX01JTlVURVMpO1xuICAgIHJldHVybiBuZXcgV2ViRnVuY3Rpb25EZXBsb3ltZW50KCdjYW5hcnknLCBbcGVyY2VudCwgMTAwXSwgYmFrZS50b1NlY29uZHMoKSwgb3B0aW9ucy5hbGFybXMgPz8gW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcmV2aXNpb24gZ2V0cyBgcGVyY2VudGAgbW9yZSBvZiB0aGUgdHJhZmZpYyBldmVyeSBgaW50ZXJ2YWxgIHVudGlsIGl0IGhhcyBhbGwgb2YgaXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxpbmVhcihvcHRpb25zOiBXZWJGdW5jdGlvbkxpbmVhckRlcGxveW1lbnRPcHRpb25zKTogV2ViRnVuY3Rpb25EZXBsb3ltZW50IHtcbiAgICBjb25zdCBwZXJjZW50ID0gd2hvbGVQZXJjZW50KCdsaW5lYXInLCAncGVyY2VudCcsIG9wdGlvbnMucGVyY2VudCwgMTAwIC8gTUFYX1NURVBTLCA1MCk7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBtaW51dGVzKCdsaW5lYXInLCAnaW50ZXJ2YWwnLCBvcHRpb25zLmludGVydmFsLCBNQVhfVE9UQUxfV0FJVF9NSU5VVEVTKTtcbiAgICBjb25zdCBzdGVwczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBwID0gcGVyY2VudDsgcCA8IDEwMDsgcCArPSBwZXJjZW50KSBzdGVwcy5wdXNoKHApO1xuICAgIHN0ZXBzLnB1c2goMTAwKTtcbiAgICBjb25zdCB0b3RhbCA9IGludGVydmFsLnRvU2Vjb25kcygpICogKHN0ZXBzLmxlbmd0aCAtIDEpO1xuICAgIGlmICh0b3RhbCA+IE1BWF9UT1RBTF9XQUlUX01JTlVURVMgKiA2MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXZWJGdW5jdGlvbkRlcGxveW1lbnQubGluZWFyOiAke3N0ZXBzLmxlbmd0aCAtIDF9IGludGVydmFscyBvZiAke2ludGVydmFsLnRvSHVtYW5TdHJpbmcoKX0gdGFrZSAke3RvdGFsIC8gNjB9IG1pbnV0ZXM7IGF0IG1vc3QgJHtNQVhfVE9UQUxfV0FJVF9NSU5VVEVTfSBhcmUgYWxsb3dlZGApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uRGVwbG95bWVudCgnbGluZWFyJywgc3RlcHMsIGludGVydmFsLnRvU2Vjb25kcygpLCBvcHRpb25zLmFsYXJtcyA/PyBbXSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5ldyByZXZpc2lvbidzIHNoYXJlIG9mIHRyYWZmaWMgYXQgZWFjaCBzdGVwLCBpbiBwZXJjZW50OyB0aGUgbGFzdCBpcyAxMDAuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9zdGVwczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFNlY29uZHMgZWFjaCBzdGVwIHNlcnZlcyBiZWZvcmUgdGhlIG5leHQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF93YWl0U2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9hbGFybXM6IGNsb3Vkd2F0Y2guSUFsYXJtW107XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGtpbmQ6IHN0cmluZywgc3RlcHM6IG51bWJlcltdLCB3YWl0U2Vjb25kczogbnVtYmVyLCBhbGFybXM6IGNsb3Vkd2F0Y2guSUFsYXJtW10pIHtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdGVwcyA9IHN0ZXBzO1xuICAgIHRoaXMuX3dhaXRTZWNvbmRzID0gd2FpdFNlY29uZHM7XG4gICAgdGhpcy5fYWxhcm1zID0gYWxhcm1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdHJhZmZpYyBtb3ZlcyBpbiBzdGVwcyAoY2FuYXJ5IG9yIGxpbmVhcikgcmF0aGVyIHRoYW4gYWxsIGF0IG9uY2UuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGdldCBfZ3JhZHVhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcHMubGVuZ3RoID4gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3aG9sZVBlcmNlbnQoa2luZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2ViRnVuY3Rpb25EZXBsb3ltZW50LiR7a2luZH06ICR7bmFtZX0gbXVzdCBiZSBhIHdob2xlIG51bWJlciBmcm9tICR7TWF0aC5jZWlsKG1pbil9IHRvICR7bWF4fSwgZ290ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBtaW51dGVzKGtpbmQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogRHVyYXRpb24sIG1heE1pbnV0ZXM6IG51bWJlcik6IER1cmF0aW9uIHtcbiAgY29uc3Qgc2Vjb25kcyA9IHZhbHVlLnRvU2Vjb25kcygpO1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHNlY29uZHMpIHx8IHNlY29uZHMgPCA2MCB8fCBzZWNvbmRzID4gbWF4TWludXRlcyAqIDYwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZWJGdW5jdGlvbkRlcGxveW1lbnQuJHtraW5kfTogJHtuYW1lfSBtdXN0IGJlIGZyb20gMSB0byAke21heE1pbnV0ZXN9IG1pbnV0ZXMsIGdvdCAke1Rva2VuLmlzVW5yZXNvbHZlZChzZWNvbmRzKSA/ICdhIHRva2VuJyA6IHZhbHVlLnRvSHVtYW5TdHJpbmcoKX1gKTtcbiAgfVxuICByZXR1cm4gRHVyYXRpb24uc2Vjb25kcyhzZWNvbmRzKTtcbn1cbiJdfQ==
|
|
97
|
+
function rollbackOn(kind, options) {
|
|
98
|
+
if (options === undefined)
|
|
99
|
+
return undefined;
|
|
100
|
+
const fail = (message) => {
|
|
101
|
+
throw new Error(`WebFunctionDeployment.${kind}: rollbackOn.${message}`);
|
|
102
|
+
};
|
|
103
|
+
if (options.serverErrorRate === undefined && options.clientErrorRate === undefined) {
|
|
104
|
+
fail('serverErrorRate or rollbackOn.clientErrorRate is required');
|
|
105
|
+
}
|
|
106
|
+
for (const [name, rate] of [['serverErrorRate', options.serverErrorRate], ['clientErrorRate', options.clientErrorRate]]) {
|
|
107
|
+
if (rate !== undefined && (aws_cdk_lib_1.Token.isUnresolved(rate) || !(rate >= 0 && rate < 100)))
|
|
108
|
+
fail(`${name} must be a percentage from 0 to below 100, got ${rate}`);
|
|
109
|
+
}
|
|
110
|
+
const minimumRequests = options.minimumRequests ?? 10;
|
|
111
|
+
if (aws_cdk_lib_1.Token.isUnresolved(minimumRequests) || !Number.isInteger(minimumRequests) || minimumRequests < 1) {
|
|
112
|
+
fail(`minimumRequests must be a whole number from 1, got ${minimumRequests}`);
|
|
113
|
+
}
|
|
114
|
+
const period = options.period ?? aws_cdk_lib_1.Duration.minutes(1);
|
|
115
|
+
const seconds = period.toSeconds();
|
|
116
|
+
if (aws_cdk_lib_1.Token.isUnresolved(seconds) || seconds < 60 || seconds % 60 !== 0) {
|
|
117
|
+
fail(`period must be whole minutes, at least 1, got ${aws_cdk_lib_1.Token.isUnresolved(seconds) ? 'a token' : period.toHumanString()}`);
|
|
118
|
+
}
|
|
119
|
+
const evaluationPeriods = options.evaluationPeriods ?? 2;
|
|
120
|
+
if (aws_cdk_lib_1.Token.isUnresolved(evaluationPeriods) || !Number.isInteger(evaluationPeriods) || evaluationPeriods < 1) {
|
|
121
|
+
fail(`evaluationPeriods must be a whole number from 1, got ${evaluationPeriods}`);
|
|
122
|
+
}
|
|
123
|
+
return { serverErrorRate: options.serverErrorRate, clientErrorRate: options.clientErrorRate, minimumRequests, period, evaluationPeriods };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWZ1bmN0aW9uLWRlcGxveW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2ViLWZ1bmN0aW9uLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUE4QztBQUk5QyxnSUFBZ0k7QUFDaEksTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsMEZBQTBGO0FBQzFGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQXVIckI7O0dBRUc7QUFDSCxNQUFhLHFCQUFxQjs7SUFDaEM7O09BRUc7SUFDSSxNQUFNLENBQUMsU0FBUztRQUNyQixPQUFPLElBQUkscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQTJDO1FBQzlELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUkscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQy9JLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBMkM7UUFDOUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFB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LGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDNUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkUm9sbGJhY2tPcHRpb25zIH0gZnJvbSAnLi9wcml2YXRlL3JvbGxiYWNrJztcblxuLyoqIExvbmdlc3QgdG90YWwgd2FpdCBvZiBhIGRlcGxveW1lbnQ6IHRoZSBkZXBsb3ltZW50IHN0ZXAgbXVzdCBmaW5pc2ggd2l0aGluIENsb3VkRm9ybWF0aW9uJ3MgMS1ob3VyIGN1c3RvbSByZXNvdXJjZSBsaW1pdC4gKi9cbmNvbnN0IE1BWF9UT1RBTF9XQUlUX01JTlVURVMgPSA0NTtcbi8qKiBNb3N0IHRyYWZmaWMgc3RlcHM6IGVhY2ggb25lIGFsc28gd2FpdHMgZm9yIHRoZSBlbmRwb2ludCB0byB1cGRhdGUgaW4gZXZlcnkgcmVnaW9uLiAqL1xuY29uc3QgTUFYX1NURVBTID0gMjA7XG5cbi8qKlxuICogQWxhcm1zIGFuIGVuZHBvaW50IGNyZWF0ZXMgb24gaXRzIG93biBtZXRyaWNzIHRvIHN0b3AgYSBjYW5hcnkgb3IgbGluZWFyIGRlcGxveW1lbnQuXG4gKlxuICogVGhlIGVuZHBvaW50IGNyZWF0ZXMgb25lIGFsYXJtIHBlciB0aHJlc2hvbGQgaW4gZXZlcnkgcmVnaW9uIGl0IHNlcnZlcyBmcm9tIChtZXRyaWNzIGFyZSBwdWJsaXNoZWRcbiAqIGluIHRoZSByZWdpb24gdGhhdCBzZXJ2ZWQgdGhlIHJlcXVlc3QsIGFuZCBhbiBhbGFybSBjYW4gb25seSB3YXRjaCBtZXRyaWNzIGluIGl0cyBvd24gcmVnaW9uKS5cbiAqIExhbWJkYSBXZWIgRnVuY3Rpb24gbWV0cmljcyBoYXZlIG5vIHJldmlzaW9uIGRpbWVuc2lvbiwgc28gdGhlIGFsYXJtcyB3YXRjaCB0aGUgd2hvbGUgZW5kcG9pbnQ6IHdoaWxlXG4gKiB0aGUgbmV3IHJldmlzaW9uIGdldHMgMTAlIG9mIHRoZSB0cmFmZmljLCBpdHMgZXJyb3JzIGFyZSBhYm91dCBhIHRlbnRoIG9mIHRoZSBlbmRwb2ludCdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uUm9sbGJhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJvbGwgYmFjayB3aGVuIG1vcmUgdGhhbiB0aGlzIHBlcmNlbnQgb2YgdGhlIGVuZHBvaW50J3MgcmVxdWVzdHMgZ2V0IGEgNVhYIHJlc3BvbnNlICgwLTEwMCkuXG4gICAqXG4gICAqIDVYWCBpbmNsdWRlcyB0aGUgcGxhdGZvcm0ncyA1MDNzIHdoaWxlIGFuIGVuZHBvaW50IHNjYWxlcyB1cCBmb3IgYSBzdWRkZW4gYnVyc3QsIG5vdCBvbmx5IHlvdXIgYXBwbGljYXRpb24ncyBlcnJvcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VydmVyIGVycm9yIGFsYXJtXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJFcnJvclJhdGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJvbGwgYmFjayB3aGVuIG1vcmUgdGhhbiB0aGlzIHBlcmNlbnQgb2YgdGhlIGVuZHBvaW50J3MgcmVxdWVzdHMgZ2V0IGEgNFhYIHJlc3BvbnNlICgwLTEwMCkuXG4gICAqIFJlcXVlc3RzIG92ZXIgYHJhdGVMaW1pdGAgb3IgYG1heEVudmlyb25tZW50c2AgZ2V0IDQyOSwgd2hpY2ggY291bnRzIGhlcmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpZW50IGVycm9yIGFsYXJtXG4gICAqL1xuICByZWFkb25seSBjbGllbnRFcnJvclJhdGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlcmlvZHMgd2l0aCBmZXdlciByZXF1ZXN0cyB0aGFuIHRoaXMgZG9uJ3QgY291bnQsIHNvIG9uZSBmYWlsZWQgcmVxdWVzdCBvdXQgb2YgdHdvIGRvZXNuJ3Qgcm9sbCBiYWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlcXVlc3RzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyaW9kIGVhY2ggcmF0ZSBpcyBtZWFzdXJlZCBvdmVyIChhdCBsZWFzdCAxIG1pbnV0ZSwgaW4gd2hvbGUgbWludXRlcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMSlcbiAgICovXG4gIHJlYWRvbmx5IHBlcmlvZD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBwZXJpb2RzIG11c3QgYnJlYWNoIGEgdGhyZXNob2xkIGJlZm9yZSB0aGUgZGVwbG95bWVudCByb2xscyBiYWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0aW9uUGVyaW9kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIGNhbmFyeSBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkZ1bmN0aW9uQ2FuYXJ5RGVwbG95bWVudE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNoYXJlIG9mIHRyYWZmaWMsIGluIHdob2xlIHBlcmNlbnQgKDEtOTkpLCB0aGF0IHRoZSBuZXcgcmV2aXNpb24gZ2V0cyBmaXJzdC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcmNlbnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IGxvbmcgdGhlIG5ldyByZXZpc2lvbiBzZXJ2ZXMgYHBlcmNlbnRgIGJlZm9yZSBpdCBnZXRzIGFsbCB0cmFmZmljICgxLTQ1IG1pbnV0ZXMpLlxuICAgKiBNYWtlIGl0IGxvbmdlciB0aGFuIHRoZSB0aW1lIHlvdXIgYWxhcm1zIG5lZWQgdG8gZmlyZSAocGVyaW9kIMOXIGV2YWx1YXRpb24gcGVyaW9kcykuXG4gICAqL1xuICByZWFkb25seSBiYWtlOiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQWxhcm1zIHRoYXQgc3RvcCB0aGUgZGVwbG95bWVudDogaWYgb25lIGlzIGluIEFMQVJNLCB0aGUgZW5kcG9pbnQgZ29lcyBiYWNrIHRvIHRoZSBwcmV2aW91c1xuICAgKiByZXZpc2lvbiBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMsIHNvIENsb3VkRm9ybWF0aW9uIHJvbGxzIHRoZSBzdGFjayBiYWNrLlxuICAgKlxuICAgKiBUaGV5J3JlIGNoZWNrZWQgYmVmb3JlIHRyYWZmaWMgbW92ZXMsIGR1cmluZyB0aGUgYmFrZSwgYW5kIG9uY2UgdGhlIG5ldyByZXZpc2lvbiBoYXMgYWxsIHRyYWZmaWMuXG4gICAqIFVzZSBhbGFybXMgaW4gYW55IHJlZ2lvbiAoYnkgQVJOKSwgaW5jbHVkaW5nIGNvbXBvc2l0ZSBhbGFybXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWxhcm1zOiB0cmFmZmljIG1vdmVzIG9uIGEgdGltZXJcbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtcz86IGNsb3Vkd2F0Y2guSUFsYXJtW107XG5cbiAgLyoqXG4gICAqIEFsYXJtcyBvbiB0aGUgZW5kcG9pbnQncyBvd24gZXJyb3IgcmF0ZXMsIGNyZWF0ZWQgYnkgdGhlIGVuZHBvaW50IGluIGV2ZXJ5IHJlZ2lvbiBpdCBzZXJ2ZXMgZnJvbS5cbiAgICogVGhleSBzdG9wIHRoZSBkZXBsb3ltZW50IGxpa2UgYGFsYXJtc2AgKGJvdGggY2FuIGJlIHVzZWQgdG9nZXRoZXIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVuZHBvaW50IGFsYXJtc1xuICAgKi9cbiAgcmVhZG9ubHkgcm9sbGJhY2tPbj86IFdlYkZ1bmN0aW9uUm9sbGJhY2tPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgbGluZWFyIGRlcGxveW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViRnVuY3Rpb25MaW5lYXJEZXBsb3ltZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmUgb2YgdHJhZmZpYywgaW4gd2hvbGUgcGVyY2VudCAoNS01MCksIHRoYXQgbW92ZXMgdG8gdGhlIG5ldyByZXZpc2lvbiBhdCBlYWNoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBwZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIGVhY2ggc3RlcCBzZXJ2ZXMgYmVmb3JlIHRoZSBuZXh0IG9uZSAoYXQgbGVhc3QgMSBtaW51dGUsIGFuZCBhdCBtb3N0IDQ1IG1pbnV0ZXMgaW4gdG90YWwpLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw6IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBbGFybXMgdGhhdCBzdG9wIHRoZSBkZXBsb3ltZW50OiBpZiBvbmUgaXMgaW4gQUxBUk0sIHRoZSBlbmRwb2ludCBnb2VzIGJhY2sgdG8gdGhlIHByZXZpb3VzXG4gICAqIHJldmlzaW9uIGFuZCB0aGUgZGVwbG95bWVudCBmYWlscywgc28gQ2xvdWRGb3JtYXRpb24gcm9sbHMgdGhlIHN0YWNrIGJhY2suXG4gICAqXG4gICAqIFRoZXkncmUgY2hlY2tlZCBiZWZvcmUgdHJhZmZpYyBtb3ZlcywgZHVyaW5nIGV2ZXJ5IHN0ZXAsIGFuZCBvbmNlIHRoZSBuZXcgcmV2aXNpb24gaGFzIGFsbCB0cmFmZmljLlxuICAgKiBVc2UgYWxhcm1zIGluIGFueSByZWdpb24gKGJ5IEFSTiksIGluY2x1ZGluZyBjb21wb3NpdGUgYWxhcm1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFsYXJtczogdHJhZmZpYyBtb3ZlcyBvbiBhIHRpbWVyXG4gICAqL1xuICByZWFkb25seSBhbGFybXM/OiBjbG91ZHdhdGNoLklBbGFybVtdO1xuXG4gIC8qKlxuICAgKiBBbGFybXMgb24gdGhlIGVuZHBvaW50J3Mgb3duIGVycm9yIHJhdGVzLCBjcmVhdGVkIGJ5IHRoZSBlbmRwb2ludCBpbiBldmVyeSByZWdpb24gaXQgc2VydmVzIGZyb20uXG4gICAqIFRoZXkgc3RvcCB0aGUgZGVwbG95bWVudCBsaWtlIGBhbGFybXNgIChib3RoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbmRwb2ludCBhbGFybXNcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrT24/OiBXZWJGdW5jdGlvblJvbGxiYWNrT3B0aW9ucztcbn1cblxuLyoqXG4gKiBIb3cgYW4gZW5kcG9pbnQgbW92ZXMgaXRzIHRyYWZmaWMgdG8gYSBuZXcgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJGdW5jdGlvbkRlcGxveW1lbnQge1xuICAvKipcbiAgICogQWxsIHRyYWZmaWMgbW92ZXMgdG8gdGhlIG5ldyByZXZpc2lvbiBhdCBvbmNlLCBhcyBzb29uIGFzIGl0J3MgcmVhZHkgKHRoZSBkZWZhdWx0KS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWxsQXRPbmNlKCk6IFdlYkZ1bmN0aW9uRGVwbG95bWVudCB7XG4gICAgcmV0dXJuIG5ldyBXZWJGdW5jdGlvbkRlcGxveW1lbnQoJ2FsbEF0T25jZScsIFsxMDBdLCAwLCBbXSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHJldmlzaW9uIGZpcnN0IGdldHMgYHBlcmNlbnRgIG9mIHRoZSB0cmFmZmljIGZvciBgYmFrZWAsIHRoZW4gYWxsIG9mIGl0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjYW5hcnkob3B0aW9uczogV2ViRnVuY3Rpb25DYW5hcnlEZXBsb3ltZW50T3B0aW9ucyk6IFdlYkZ1bmN0aW9uRGVwbG95bWVudCB7XG4gICAgY29uc3QgcGVyY2VudCA9IHdob2xlUGVyY2VudCgnY2FuYXJ5JywgJ3BlcmNlbnQnLCBvcHRpb25zLnBlcmNlbnQsIDEsIDk5KTtcbiAgICBjb25zdCBiYWtlID0gbWludXRlcygnY2FuYXJ5JywgJ2Jha2UnLCBvcHRpb25zLmJha2UsIE1BWF9UT1RBTF9XQUlUX01JTlVURVMpO1xuICAgIHJldHVybiBuZXcgV2ViRnVuY3Rpb25EZXBsb3ltZW50KCdjYW5hcnknLCBbcGVyY2VudCwgMTAwXSwgYmFrZS50b1NlY29uZHMoKSwgb3B0aW9ucy5hbGFybXMgPz8gW10sIHJvbGxiYWNrT24oJ2NhbmFyeScsIG9wdGlvbnMucm9sbGJhY2tPbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcmV2aXNpb24gZ2V0cyBgcGVyY2VudGAgbW9yZSBvZiB0aGUgdHJhZmZpYyBldmVyeSBgaW50ZXJ2YWxgIHVudGlsIGl0IGhhcyBhbGwgb2YgaXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxpbmVhcihvcHRpb25zOiBXZWJGdW5jdGlvbkxpbmVhckRlcGxveW1lbnRPcHRpb25zKTogV2ViRnVuY3Rpb25EZXBsb3ltZW50IHtcbiAgICBjb25zdCBwZXJjZW50ID0gd2hvbGVQZXJjZW50KCdsaW5lYXInLCAncGVyY2VudCcsIG9wdGlvbnMucGVyY2VudCwgMTAwIC8gTUFYX1NURVBTLCA1MCk7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBtaW51dGVzKCdsaW5lYXInLCAnaW50ZXJ2YWwnLCBvcHRpb25zLmludGVydmFsLCBNQVhfVE9UQUxfV0FJVF9NSU5VVEVTKTtcbiAgICBjb25zdCBzdGVwczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBwID0gcGVyY2VudDsgcCA8IDEwMDsgcCArPSBwZXJjZW50KSBzdGVwcy5wdXNoKHApO1xuICAgIHN0ZXBzLnB1c2goMTAwKTtcbiAgICBjb25zdCB0b3RhbCA9IGludGVydmFsLnRvU2Vjb25kcygpICogKHN0ZXBzLmxlbmd0aCAtIDEpO1xuICAgIGlmICh0b3RhbCA+IE1BWF9UT1RBTF9XQUlUX01JTlVURVMgKiA2MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXZWJGdW5jdGlvbkRlcGxveW1lbnQubGluZWFyOiAke3N0ZXBzLmxlbmd0aCAtIDF9IGludGVydmFscyBvZiAke2ludGVydmFsLnRvSHVtYW5TdHJpbmcoKX0gdGFrZSAke3RvdGFsIC8gNjB9IG1pbnV0ZXM7IGF0IG1vc3QgJHtNQVhfVE9UQUxfV0FJVF9NSU5VVEVTfSBhcmUgYWxsb3dlZGApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdlYkZ1bmN0aW9uRGVwbG95bWVudCgnbGluZWFyJywgc3RlcHMsIGludGVydmFsLnRvU2Vjb25kcygpLCBvcHRpb25zLmFsYXJtcyA/PyBbXSwgcm9sbGJhY2tPbignbGluZWFyJywgb3B0aW9ucy5yb2xsYmFja09uKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5ldyByZXZpc2lvbidzIHNoYXJlIG9mIHRyYWZmaWMgYXQgZWFjaCBzdGVwLCBpbiBwZXJjZW50OyB0aGUgbGFzdCBpcyAxMDAuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9zdGVwczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFNlY29uZHMgZWFjaCBzdGVwIHNlcnZlcyBiZWZvcmUgdGhlIG5leHQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF93YWl0U2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9hbGFybXM6IGNsb3Vkd2F0Y2guSUFsYXJtW107XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhyZXNob2xkcyBmb3IgdGhlIGFsYXJtcyB0aGUgZW5kcG9pbnQgY3JlYXRlcywgd2l0aCBkZWZhdWx0cyBhcHBsaWVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBfcm9sbGJhY2tPbj86IFJlc29sdmVkUm9sbGJhY2tPcHRpb25zO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAga2luZDogc3RyaW5nLCBzdGVwczogbnVtYmVyW10sIHdhaXRTZWNvbmRzOiBudW1iZXIsIGFsYXJtczogY2xvdWR3YXRjaC5JQWxhcm1bXSwgcm9sbGJhY2s6IFJlc29sdmVkUm9sbGJhY2tPcHRpb25zIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdGVwcyA9IHN0ZXBzO1xuICAgIHRoaXMuX3dhaXRTZWNvbmRzID0gd2FpdFNlY29uZHM7XG4gICAgdGhpcy5fYWxhcm1zID0gYWxhcm1zO1xuICAgIHRoaXMuX3JvbGxiYWNrT24gPSByb2xsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRyYWZmaWMgbW92ZXMgaW4gc3RlcHMgKGNhbmFyeSBvciBsaW5lYXIpIHJhdGhlciB0aGFuIGFsbCBhdCBvbmNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgX2dyYWR1YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0ZXBzLmxlbmd0aCA+IDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2hvbGVQZXJjZW50KGtpbmQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlYkZ1bmN0aW9uRGVwbG95bWVudC4ke2tpbmR9OiAke25hbWV9IG11c3QgYmUgYSB3aG9sZSBudW1iZXIgZnJvbSAke01hdGguY2VpbChtaW4pfSB0byAke21heH0sIGdvdCAke3ZhbHVlfWApO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gbWludXRlcyhraW5kOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IER1cmF0aW9uLCBtYXhNaW51dGVzOiBudW1iZXIpOiBEdXJhdGlvbiB7XG4gIGNvbnN0IHNlY29uZHMgPSB2YWx1ZS50b1NlY29uZHMoKTtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzZWNvbmRzKSB8fCBzZWNvbmRzIDwgNjAgfHwgc2Vjb25kcyA+IG1heE1pbnV0ZXMgKiA2MCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2ViRnVuY3Rpb25EZXBsb3ltZW50LiR7a2luZH06ICR7bmFtZX0gbXVzdCBiZSBmcm9tIDEgdG8gJHttYXhNaW51dGVzfSBtaW51dGVzLCBnb3QgJHtUb2tlbi5pc1VucmVzb2x2ZWQoc2Vjb25kcykgPyAnYSB0b2tlbicgOiB2YWx1ZS50b0h1bWFuU3RyaW5nKCl9YCk7XG4gIH1cbiAgcmV0dXJuIER1cmF0aW9uLnNlY29uZHMoc2Vjb25kcyk7XG59XG5cbmZ1bmN0aW9uIHJvbGxiYWNrT24oa2luZDogc3RyaW5nLCBvcHRpb25zOiBXZWJGdW5jdGlvblJvbGxiYWNrT3B0aW9ucyB8IHVuZGVmaW5lZCk6IFJlc29sdmVkUm9sbGJhY2tPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbCA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlYkZ1bmN0aW9uRGVwbG95bWVudC4ke2tpbmR9OiByb2xsYmFja09uLiR7bWVzc2FnZX1gKTtcbiAgfTtcbiAgaWYgKG9wdGlvbnMuc2VydmVyRXJyb3JSYXRlID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5jbGllbnRFcnJvclJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGZhaWwoJ3NlcnZlckVycm9yUmF0ZSBvciByb2xsYmFja09uLmNsaWVudEVycm9yUmF0ZSBpcyByZXF1aXJlZCcpO1xuICB9XG4gIGZvciAoY29uc3QgW25hbWUsIHJhdGVdIG9mIFtbJ3NlcnZlckVycm9yUmF0ZScsIG9wdGlvbnMuc2VydmVyRXJyb3JSYXRlXSwgWydjbGllbnRFcnJvclJhdGUnLCBvcHRpb25zLmNsaWVudEVycm9yUmF0ZV1dIGFzIGNvbnN0KSB7XG4gICAgaWYgKHJhdGUgIT09IHVuZGVmaW5lZCAmJiAoVG9rZW4uaXNVbnJlc29sdmVkKHJhdGUpIHx8ICEocmF0ZSA+PSAwICYmIHJhdGUgPCAxMDApKSkgZmFpbChgJHtuYW1lfSBtdXN0IGJlIGEgcGVyY2VudGFnZSBmcm9tIDAgdG8gYmVsb3cgMTAwLCBnb3QgJHtyYXRlfWApO1xuICB9XG4gIGNvbnN0IG1pbmltdW1SZXF1ZXN0cyA9IG9wdGlvbnMubWluaW11bVJlcXVlc3RzID8/IDEwO1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1pbmltdW1SZXF1ZXN0cykgfHwgIU51bWJlci5pc0ludGVnZXIobWluaW11bVJlcXVlc3RzKSB8fCBtaW5pbXVtUmVxdWVzdHMgPCAxKSB7XG4gICAgZmFpbChgbWluaW11bVJlcXVlc3RzIG11c3QgYmUgYSB3aG9sZSBudW1iZXIgZnJvbSAxLCBnb3QgJHttaW5pbXVtUmVxdWVzdHN9YCk7XG4gIH1cbiAgY29uc3QgcGVyaW9kID0gb3B0aW9ucy5wZXJpb2QgPz8gRHVyYXRpb24ubWludXRlcygxKTtcbiAgY29uc3Qgc2Vjb25kcyA9IHBlcmlvZC50b1NlY29uZHMoKTtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzZWNvbmRzKSB8fCBzZWNvbmRzIDwgNjAgfHwgc2Vjb25kcyAlIDYwICE9PSAwKSB7XG4gICAgZmFpbChgcGVyaW9kIG11c3QgYmUgd2hvbGUgbWludXRlcywgYXQgbGVhc3QgMSwgZ290ICR7VG9rZW4uaXNVbnJlc29sdmVkKHNlY29uZHMpID8gJ2EgdG9rZW4nIDogcGVyaW9kLnRvSHVtYW5TdHJpbmcoKX1gKTtcbiAgfVxuICBjb25zdCBldmFsdWF0aW9uUGVyaW9kcyA9IG9wdGlvbnMuZXZhbHVhdGlvblBlcmlvZHMgPz8gMjtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChldmFsdWF0aW9uUGVyaW9kcykgfHwgIU51bWJlci5pc0ludGVnZXIoZXZhbHVhdGlvblBlcmlvZHMpIHx8IGV2YWx1YXRpb25QZXJpb2RzIDwgMSkge1xuICAgIGZhaWwoYGV2YWx1YXRpb25QZXJpb2RzIG11c3QgYmUgYSB3aG9sZSBudW1iZXIgZnJvbSAxLCBnb3QgJHtldmFsdWF0aW9uUGVyaW9kc31gKTtcbiAgfVxuICByZXR1cm4geyBzZXJ2ZXJFcnJvclJhdGU6IG9wdGlvbnMuc2VydmVyRXJyb3JSYXRlLCBjbGllbnRFcnJvclJhdGU6IG9wdGlvbnMuY2xpZW50RXJyb3JSYXRlLCBtaW5pbXVtUmVxdWVzdHMsIHBlcmlvZCwgZXZhbHVhdGlvblBlcmlvZHMgfTtcbn1cbiJdfQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
|
|
1
2
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
2
3
|
import { Construct } from 'constructs';
|
|
3
4
|
import { WebFunctionAuthType, WebFunctionEndpointType } from './enums';
|
|
@@ -151,6 +152,11 @@ export declare class WebFunctionEndpoint extends Construct {
|
|
|
151
152
|
readonly url: string;
|
|
152
153
|
/** Grants on this endpoint (e.g. `grants.invoke(principal)`). */
|
|
153
154
|
readonly grants: WebFunctionGrants;
|
|
155
|
+
/**
|
|
156
|
+
* The alarms this endpoint created for its deployment's `rollbackOn`, one per threshold in every region it serves from
|
|
157
|
+
* (the home region's first). Empty without `rollbackOn`.
|
|
158
|
+
*/
|
|
159
|
+
readonly rollbackAlarms: cloudwatch.IAlarm[];
|
|
154
160
|
private readonly homeRegion;
|
|
155
161
|
private readonly webFunction;
|
|
156
162
|
private readonly resource;
|
|
@@ -181,10 +187,50 @@ export declare class WebFunctionEndpoint extends Construct {
|
|
|
181
187
|
* @internal
|
|
182
188
|
*/
|
|
183
189
|
_revisionIds(): string[];
|
|
190
|
+
/**
|
|
191
|
+
* A metric of this endpoint in `AWS/Lambda/Web` (dimensions `FunctionName` and `EndpointName`).
|
|
192
|
+
*
|
|
193
|
+
* Metrics are published in the region that served the request: pass `region` for one of the endpoint's
|
|
194
|
+
* other regions. An alarm can only use metrics from its own stack's region.
|
|
195
|
+
*
|
|
196
|
+
* @default - sum over 1 minute, in the home region
|
|
197
|
+
*/
|
|
198
|
+
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
199
|
+
/** Requests the endpoint served (`ExecutedRequests`). There's no separate count of successful (2XX) responses. */
|
|
200
|
+
metricRequests(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
201
|
+
/**
|
|
202
|
+
* Requests answered with a 4XX status (`HTTPResponseStatusClass4XX`), including 429s from `rateLimit` and `maxEnvironments`.
|
|
203
|
+
* The metric only exists once it's non-zero, so alarms should treat missing data as not breaching.
|
|
204
|
+
*/
|
|
205
|
+
metricClientErrors(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
206
|
+
/**
|
|
207
|
+
* Requests answered with a 5XX status (`HTTPResponseStatusClass5XX`). Includes the platform's 503s while the endpoint
|
|
208
|
+
* scales up for a sudden burst, not only your application's errors. The metric only exists once it's non-zero.
|
|
209
|
+
*/
|
|
210
|
+
metricServerErrors(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
211
|
+
/** The percentage of requests answered with a 4XX status (math expression; periods with no 4XX count as 0). */
|
|
212
|
+
metricClientErrorRate(props?: cloudwatch.MetricOptions): cloudwatch.MathExpression;
|
|
213
|
+
/** The percentage of requests answered with a 5XX status (math expression; periods with no 5XX count as 0). */
|
|
214
|
+
metricServerErrorRate(props?: cloudwatch.MetricOptions): cloudwatch.MathExpression;
|
|
215
|
+
/**
|
|
216
|
+
* Execution environments serving the endpoint (`EndpointActiveEnvironments`), to compare with `maxEnvironments`.
|
|
217
|
+
*
|
|
218
|
+
* @default - maximum over 1 minute, in the home region
|
|
219
|
+
*/
|
|
220
|
+
metricActiveEnvironments(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
221
|
+
/** Requests rejected with 429 because the endpoint reached its `rateLimit` (`EndpointRequestThrottles`). */
|
|
222
|
+
metricRequestThrottles(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
223
|
+
/** Requests rejected with 429 because the endpoint reached `maxEnvironments` (`EndpointActiveEnvironmentThrottles`). */
|
|
224
|
+
metricEnvironmentThrottles(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
184
225
|
/**
|
|
185
226
|
* Allows `grantee` to call this endpoint. Shortcut for `grants.invoke(grantee)`.
|
|
186
227
|
* [disable-awslint:no-grants]
|
|
187
228
|
*/
|
|
188
229
|
grantInvoke(grantee: iam.IGrantable): iam.Grant;
|
|
230
|
+
private metricIds;
|
|
231
|
+
private rate;
|
|
232
|
+
private usageMetric;
|
|
233
|
+
/** One alarm per threshold in every serving region: a CloudFormation alarm at home, a custom resource elsewhere. Returns their ARNs. */
|
|
234
|
+
private createRollbackAlarms;
|
|
189
235
|
}
|
|
190
236
|
export {};
|