terraconstructs 0.0.22 → 0.0.24
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 +104400 -90067
- package/go.mod +2 -1
- package/go.sum +2 -0
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.js +1 -1
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +4 -5
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +3 -3
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +4 -4
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/private/metric-util.js +1 -2
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +2 -4
- package/lib/aws/compute/alb/application-load-balancer.js +2 -4
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/autoscaling-common/index.d.ts +3 -0
- package/lib/aws/compute/autoscaling-common/index.js +21 -0
- package/lib/aws/compute/autoscaling-common/interval-utils.d.ts +21 -0
- package/lib/aws/compute/autoscaling-common/interval-utils.js +213 -0
- package/lib/aws/compute/autoscaling-common/test-utils.d.ts +21 -0
- package/lib/aws/compute/autoscaling-common/test-utils.js +94 -0
- package/lib/aws/compute/autoscaling-common/types.d.ts +34 -0
- package/lib/aws/compute/autoscaling-common/types.js +3 -0
- package/lib/aws/compute/base-scalable-attribute.d.ts +74 -0
- package/lib/aws/compute/base-scalable-attribute.js +58 -0
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/ec2-util.js +1 -4
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +3 -3
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +7 -8
- package/lib/aws/compute/function-destinations/event-bridge.js +3 -3
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.js +1 -1
- package/lib/aws/compute/index.d.ts +7 -0
- package/lib/aws/compute/index.js +11 -2
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +31 -31
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +4 -4
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-shared/util.js +1 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/machine-image/utils.js +6 -6
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +2 -3
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/private/context-stub.js +2 -2
- package/lib/aws/compute/route.js +11 -11
- package/lib/aws/compute/scalable-target.d.ts +197 -0
- package/lib/aws/compute/scalable-target.js +168 -0
- package/lib/aws/compute/schedule.d.ts +81 -0
- package/lib/aws/compute/schedule.js +145 -0
- package/lib/aws/compute/security-group.js +4 -4
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +7 -7
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +4 -4
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.d.ts +148 -0
- package/lib/aws/compute/step-scaling-action.js +109 -0
- package/lib/aws/compute/step-scaling-policy.d.ts +132 -0
- package/lib/aws/compute/step-scaling-policy.js +153 -0
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.d.ts +262 -0
- package/lib/aws/compute/target-tracking-scaling-policy.js +234 -0
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.d.ts +1 -1
- package/lib/aws/compute/vpc.js +10 -16
- package/lib/aws/compute/vpn.js +4 -7
- package/lib/aws/compute/windows-versions.js +1 -2
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +4 -5
- package/lib/aws/edge/dns-alias-record-targets.js +3 -3
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -4
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +3 -3
- package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +7 -7
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.js +1 -1
- package/lib/aws/notify/policy.js +1 -1
- package/lib/aws/notify/queue-config.generated.d.ts +12 -12
- package/lib/aws/notify/queue-config.generated.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +3 -3
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.js +2 -2
- package/lib/aws/notify/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +1 -1
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/storage/billing.d.ts +62 -0
- package/lib/aws/storage/billing.js +49 -0
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +3 -3
- package/lib/aws/storage/bucket.js +2 -2
- package/lib/aws/storage/capacity.d.ts +96 -0
- package/lib/aws/storage/capacity.js +103 -0
- package/lib/aws/storage/cors-config.generated.d.ts +3 -3
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/dynamodb-canned-metrics.generated.d.ts +493 -0
- package/lib/aws/storage/dynamodb-canned-metrics.generated.js +263 -0
- package/lib/aws/storage/dynamodb-perms.d.ts +8 -0
- package/lib/aws/storage/dynamodb-perms.js +45 -0
- package/lib/aws/storage/encryption.d.ts +54 -0
- package/lib/aws/storage/encryption.js +116 -0
- package/lib/aws/storage/index.d.ts +6 -0
- package/lib/aws/storage/index.js +10 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +7 -7
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/scalable-attribute-api.d.ts +36 -0
- package/lib/aws/storage/scalable-attribute-api.js +3 -0
- package/lib/aws/storage/scalable-table-attribute.d.ts +32 -0
- package/lib/aws/storage/scalable-table-attribute.js +48 -0
- package/lib/aws/storage/shared.d.ts +419 -0
- package/lib/aws/storage/shared.js +161 -0
- package/lib/aws/storage/table.d.ts +536 -0
- package/lib/aws/storage/table.js +1054 -0
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +1 -1
- package/lib/time-zone.d.ts +724 -0
- package/lib/time-zone.js +737 -0
- package/package.json +14 -13
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { IScalableTarget } from "./scalable-target";
|
|
3
|
+
import { Duration } from "../../duration";
|
|
4
|
+
import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
|
|
5
|
+
/**
|
|
6
|
+
* Properties for a scaling policy
|
|
7
|
+
*/
|
|
8
|
+
export interface StepScalingActionProps extends AwsConstructProps {
|
|
9
|
+
/**
|
|
10
|
+
* The scalable target
|
|
11
|
+
*/
|
|
12
|
+
readonly scalingTarget: IScalableTarget;
|
|
13
|
+
/**
|
|
14
|
+
* A name for the scaling policy
|
|
15
|
+
*
|
|
16
|
+
* @default - The friendly name of this construct.
|
|
17
|
+
*/
|
|
18
|
+
readonly policyName?: string;
|
|
19
|
+
/**
|
|
20
|
+
* How the adjustment numbers are interpreted
|
|
21
|
+
*
|
|
22
|
+
* @default ChangeInCapacity
|
|
23
|
+
*/
|
|
24
|
+
readonly adjustmentType?: AdjustmentType;
|
|
25
|
+
/**
|
|
26
|
+
* Grace period after scaling activity.
|
|
27
|
+
*
|
|
28
|
+
* For scale out policies, multiple scale outs during the cooldown period are
|
|
29
|
+
* squashed so that only the biggest scale out happens.
|
|
30
|
+
*
|
|
31
|
+
* For scale in policies, subsequent scale ins during the cooldown period are
|
|
32
|
+
* ignored.
|
|
33
|
+
*
|
|
34
|
+
* @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_StepScalingPolicyConfiguration.html
|
|
35
|
+
* @default No cooldown period
|
|
36
|
+
*/
|
|
37
|
+
readonly cooldown?: Duration;
|
|
38
|
+
/**
|
|
39
|
+
* Minimum absolute number to adjust capacity with as result of percentage scaling.
|
|
40
|
+
*
|
|
41
|
+
* Only when using AdjustmentType = PercentChangeInCapacity, this number controls
|
|
42
|
+
* the minimum absolute effect size.
|
|
43
|
+
*
|
|
44
|
+
* @default No minimum scaling effect
|
|
45
|
+
*/
|
|
46
|
+
readonly minAdjustmentMagnitude?: number;
|
|
47
|
+
/**
|
|
48
|
+
* The aggregation type for the CloudWatch metrics.
|
|
49
|
+
*
|
|
50
|
+
* @default Average
|
|
51
|
+
*/
|
|
52
|
+
readonly metricAggregationType?: MetricAggregationType;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Define a step scaling action
|
|
56
|
+
*
|
|
57
|
+
* This kind of scaling policy adjusts the target capacity in configurable
|
|
58
|
+
* steps. The size of the step is configurable based on the metric's distance
|
|
59
|
+
* to its alarm threshold.
|
|
60
|
+
*
|
|
61
|
+
* This Action must be used as the target of a CloudWatch alarm to take effect.
|
|
62
|
+
*/
|
|
63
|
+
export declare class StepScalingAction extends AwsConstructBase {
|
|
64
|
+
/**
|
|
65
|
+
* ARN of the scaling policy
|
|
66
|
+
*/
|
|
67
|
+
readonly scalingPolicyArn: string;
|
|
68
|
+
private readonly resource;
|
|
69
|
+
private readonly adjustments;
|
|
70
|
+
get outputs(): Record<string, any>;
|
|
71
|
+
constructor(scope: Construct, id: string, props: StepScalingActionProps);
|
|
72
|
+
/**
|
|
73
|
+
* Add an adjusment interval to the ScalingAction
|
|
74
|
+
*/
|
|
75
|
+
addAdjustment(adjustment: AdjustmentTier): void;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* How adjustment numbers are interpreted
|
|
79
|
+
*/
|
|
80
|
+
export declare enum AdjustmentType {
|
|
81
|
+
/**
|
|
82
|
+
* Add the adjustment number to the current capacity.
|
|
83
|
+
*
|
|
84
|
+
* A positive number increases capacity, a negative number decreases capacity.
|
|
85
|
+
*/
|
|
86
|
+
CHANGE_IN_CAPACITY = "ChangeInCapacity",
|
|
87
|
+
/**
|
|
88
|
+
* Add this percentage of the current capacity to itself.
|
|
89
|
+
*
|
|
90
|
+
* The number must be between -100 and 100; a positive number increases
|
|
91
|
+
* capacity and a negative number decreases it.
|
|
92
|
+
*/
|
|
93
|
+
PERCENT_CHANGE_IN_CAPACITY = "PercentChangeInCapacity",
|
|
94
|
+
/**
|
|
95
|
+
* Make the capacity equal to the exact number given.
|
|
96
|
+
*/
|
|
97
|
+
EXACT_CAPACITY = "ExactCapacity"
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* How the scaling metric is going to be aggregated
|
|
101
|
+
*/
|
|
102
|
+
export declare enum MetricAggregationType {
|
|
103
|
+
/**
|
|
104
|
+
* Average
|
|
105
|
+
*/
|
|
106
|
+
AVERAGE = "Average",
|
|
107
|
+
/**
|
|
108
|
+
* Minimum
|
|
109
|
+
*/
|
|
110
|
+
MINIMUM = "Minimum",
|
|
111
|
+
/**
|
|
112
|
+
* Maximum
|
|
113
|
+
*/
|
|
114
|
+
MAXIMUM = "Maximum"
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* An adjustment
|
|
118
|
+
*/
|
|
119
|
+
export interface AdjustmentTier {
|
|
120
|
+
/**
|
|
121
|
+
* What number to adjust the capacity with
|
|
122
|
+
*
|
|
123
|
+
* The number is interpeted as an added capacity, a new fixed capacity or an
|
|
124
|
+
* added percentage depending on the AdjustmentType value of the
|
|
125
|
+
* StepScalingPolicy.
|
|
126
|
+
*
|
|
127
|
+
* Can be positive or negative.
|
|
128
|
+
*/
|
|
129
|
+
readonly adjustment: number;
|
|
130
|
+
/**
|
|
131
|
+
* Lower bound where this scaling tier applies.
|
|
132
|
+
*
|
|
133
|
+
* The scaling tier applies if the difference between the metric
|
|
134
|
+
* value and its alarm threshold is higher than this value.
|
|
135
|
+
*
|
|
136
|
+
* @default -Infinity if this is the first tier, otherwise the upperBound of the previous tier
|
|
137
|
+
*/
|
|
138
|
+
readonly lowerBound?: number;
|
|
139
|
+
/**
|
|
140
|
+
* Upper bound where this scaling tier applies
|
|
141
|
+
*
|
|
142
|
+
* The scaling tier applies if the difference between the metric
|
|
143
|
+
* value and its alarm threshold is lower than this value.
|
|
144
|
+
*
|
|
145
|
+
* @default +Infinity
|
|
146
|
+
*/
|
|
147
|
+
readonly upperBound?: number;
|
|
148
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.MetricAggregationType = exports.AdjustmentType = exports.StepScalingAction = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.168.0/packages/aws-cdk-lib/aws-applicationautoscaling/lib/step-scaling-action.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
/**
|
|
11
|
+
* Define a step scaling action
|
|
12
|
+
*
|
|
13
|
+
* This kind of scaling policy adjusts the target capacity in configurable
|
|
14
|
+
* steps. The size of the step is configurable based on the metric's distance
|
|
15
|
+
* to its alarm threshold.
|
|
16
|
+
*
|
|
17
|
+
* This Action must be used as the target of a CloudWatch alarm to take effect.
|
|
18
|
+
*/
|
|
19
|
+
class StepScalingAction extends aws_construct_1.AwsConstructBase {
|
|
20
|
+
get outputs() {
|
|
21
|
+
return {
|
|
22
|
+
scalingPolicyArn: this.scalingPolicyArn,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
constructor(scope, id, props) {
|
|
26
|
+
super(scope, id, props);
|
|
27
|
+
this.adjustments = new Array();
|
|
28
|
+
const policyName = props.policyName ||
|
|
29
|
+
this.stack.uniqueResourceName(this, {
|
|
30
|
+
prefix: this.gridUUID,
|
|
31
|
+
});
|
|
32
|
+
this.resource = new provider_aws_1.appautoscalingPolicy.AppautoscalingPolicy(this, "Resource", {
|
|
33
|
+
name: policyName,
|
|
34
|
+
policyType: "StepScaling",
|
|
35
|
+
resourceId: props.scalingTarget.resourceId,
|
|
36
|
+
scalableDimension: props.scalingTarget.scalableDimension,
|
|
37
|
+
serviceNamespace: props.scalingTarget.serviceNamespace,
|
|
38
|
+
stepScalingPolicyConfiguration: {
|
|
39
|
+
adjustmentType: props.adjustmentType ?? AdjustmentType.CHANGE_IN_CAPACITY,
|
|
40
|
+
cooldown: props.cooldown?.toSeconds(),
|
|
41
|
+
minAdjustmentMagnitude: props.minAdjustmentMagnitude,
|
|
42
|
+
metricAggregationType: props.metricAggregationType ?? MetricAggregationType.AVERAGE,
|
|
43
|
+
stepAdjustment: cdktf_1.Lazy.anyValue({
|
|
44
|
+
produce: () => this.adjustments.map(provider_aws_1.appautoscalingPolicy.appautoscalingPolicyStepScalingPolicyConfigurationStepAdjustmentToTerraform),
|
|
45
|
+
}),
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
this.scalingPolicyArn = this.resource.arn;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Add an adjusment interval to the ScalingAction
|
|
52
|
+
*/
|
|
53
|
+
addAdjustment(adjustment) {
|
|
54
|
+
if (adjustment.lowerBound === undefined &&
|
|
55
|
+
adjustment.upperBound === undefined) {
|
|
56
|
+
throw new Error("At least one of lowerBound or upperBound is required");
|
|
57
|
+
}
|
|
58
|
+
this.adjustments.push({
|
|
59
|
+
metricIntervalLowerBound: adjustment.lowerBound?.toString(),
|
|
60
|
+
metricIntervalUpperBound: adjustment.upperBound?.toString(),
|
|
61
|
+
scalingAdjustment: adjustment.adjustment,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.StepScalingAction = StepScalingAction;
|
|
66
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
67
|
+
StepScalingAction[_a] = { fqn: "terraconstructs.aws.compute.StepScalingAction", version: "0.0.24" };
|
|
68
|
+
/**
|
|
69
|
+
* How adjustment numbers are interpreted
|
|
70
|
+
*/
|
|
71
|
+
var AdjustmentType;
|
|
72
|
+
(function (AdjustmentType) {
|
|
73
|
+
/**
|
|
74
|
+
* Add the adjustment number to the current capacity.
|
|
75
|
+
*
|
|
76
|
+
* A positive number increases capacity, a negative number decreases capacity.
|
|
77
|
+
*/
|
|
78
|
+
AdjustmentType["CHANGE_IN_CAPACITY"] = "ChangeInCapacity";
|
|
79
|
+
/**
|
|
80
|
+
* Add this percentage of the current capacity to itself.
|
|
81
|
+
*
|
|
82
|
+
* The number must be between -100 and 100; a positive number increases
|
|
83
|
+
* capacity and a negative number decreases it.
|
|
84
|
+
*/
|
|
85
|
+
AdjustmentType["PERCENT_CHANGE_IN_CAPACITY"] = "PercentChangeInCapacity";
|
|
86
|
+
/**
|
|
87
|
+
* Make the capacity equal to the exact number given.
|
|
88
|
+
*/
|
|
89
|
+
AdjustmentType["EXACT_CAPACITY"] = "ExactCapacity";
|
|
90
|
+
})(AdjustmentType || (exports.AdjustmentType = AdjustmentType = {}));
|
|
91
|
+
/**
|
|
92
|
+
* How the scaling metric is going to be aggregated
|
|
93
|
+
*/
|
|
94
|
+
var MetricAggregationType;
|
|
95
|
+
(function (MetricAggregationType) {
|
|
96
|
+
/**
|
|
97
|
+
* Average
|
|
98
|
+
*/
|
|
99
|
+
MetricAggregationType["AVERAGE"] = "Average";
|
|
100
|
+
/**
|
|
101
|
+
* Minimum
|
|
102
|
+
*/
|
|
103
|
+
MetricAggregationType["MINIMUM"] = "Minimum";
|
|
104
|
+
/**
|
|
105
|
+
* Maximum
|
|
106
|
+
*/
|
|
107
|
+
MetricAggregationType["MAXIMUM"] = "Maximum";
|
|
108
|
+
})(MetricAggregationType || (exports.MetricAggregationType = MetricAggregationType = {}));
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zY2FsaW5nLWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9zdGVwLXNjYWxpbmctYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMEhBQTBIO0FBRTFILHNEQUEyRDtBQUMzRCxpQ0FBNkI7QUFJN0Isb0RBQXVFO0FBeUR2RTs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsZ0NBQWdCO0lBVXJELElBQVcsT0FBTztRQUNoQixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFWVCxnQkFBVyxHQUMxQixJQUFJLEtBQUssRUFBeUYsQ0FBQztRQVVuRyxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsVUFBVTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtnQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxtQ0FBb0IsQ0FBQyxvQkFBb0IsQ0FDM0QsSUFBSSxFQUNKLFVBQVUsRUFDVjtZQUNFLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLFVBQVUsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDMUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUI7WUFDeEQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7WUFDdEQsOEJBQThCLEVBQUU7Z0JBQzlCLGNBQWMsRUFDWixLQUFLLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0I7Z0JBQzNELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRTtnQkFDckMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtnQkFDcEQscUJBQXFCLEVBQ25CLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPO2dCQUM5RCxjQUFjLEVBQUUsWUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUNsQixtQ0FBb0IsQ0FBQywyRUFBMkUsQ0FDakc7aUJBQ0osQ0FBQzthQUNIO1NBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxVQUEwQjtRQUM3QyxJQUNFLFVBQVUsQ0FBQyxVQUFVLEtBQUssU0FBUztZQUNuQyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFDbkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUU7WUFDM0Qsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUU7WUFDM0QsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLFVBQVU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFwRUgsOENBcUVDOzs7QUFFRDs7R0FFRztBQUNILElBQVksY0FvQlg7QUFwQkQsV0FBWSxjQUFjO0lBQ3hCOzs7O09BSUc7SUFDSCx5REFBdUMsQ0FBQTtJQUV2Qzs7Ozs7T0FLRztJQUNILHdFQUFzRCxDQUFBO0lBRXREOztPQUVHO0lBQ0gsa0RBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQXBCVyxjQUFjLDhCQUFkLGNBQWMsUUFvQnpCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLHFCQWVYO0FBZkQsV0FBWSxxQkFBcUI7SUFDL0I7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDRDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsNENBQW1CLENBQUE7QUFDckIsQ0FBQyxFQWZXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBZWhDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTY4LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmcvbGliL3N0ZXAtc2NhbGluZy1hY3Rpb24udHNcblxuaW1wb3J0IHsgYXBwYXV0b3NjYWxpbmdQb2xpY3kgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElTY2FsYWJsZVRhcmdldCB9IGZyb20gXCIuL3NjYWxhYmxlLXRhcmdldFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UsIEF3c0NvbnN0cnVjdFByb3BzIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIHNjYWxpbmcgcG9saWN5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFNjYWxpbmdBY3Rpb25Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzY2FsYWJsZSB0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHNjYWxpbmdUYXJnZXQ6IElTY2FsYWJsZVRhcmdldDtcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB0aGUgc2NhbGluZyBwb2xpY3lcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgZnJpZW5kbHkgbmFtZSBvZiB0aGlzIGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgYWRqdXN0bWVudCBudW1iZXJzIGFyZSBpbnRlcnByZXRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBDaGFuZ2VJbkNhcGFjaXR5XG4gICAqL1xuICByZWFkb25seSBhZGp1c3RtZW50VHlwZT86IEFkanVzdG1lbnRUeXBlO1xuXG4gIC8qKlxuICAgKiBHcmFjZSBwZXJpb2QgYWZ0ZXIgc2NhbGluZyBhY3Rpdml0eS5cbiAgICpcbiAgICogRm9yIHNjYWxlIG91dCBwb2xpY2llcywgbXVsdGlwbGUgc2NhbGUgb3V0cyBkdXJpbmcgdGhlIGNvb2xkb3duIHBlcmlvZCBhcmVcbiAgICogc3F1YXNoZWQgc28gdGhhdCBvbmx5IHRoZSBiaWdnZXN0IHNjYWxlIG91dCBoYXBwZW5zLlxuICAgKlxuICAgKiBGb3Igc2NhbGUgaW4gcG9saWNpZXMsIHN1YnNlcXVlbnQgc2NhbGUgaW5zIGR1cmluZyB0aGUgY29vbGRvd24gcGVyaW9kIGFyZVxuICAgKiBpZ25vcmVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9hcHBsaWNhdGlvbi9BUElSZWZlcmVuY2UvQVBJX1N0ZXBTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvbi5odG1sXG4gICAqIEBkZWZhdWx0IE5vIGNvb2xkb3duIHBlcmlvZFxuICAgKi9cbiAgcmVhZG9ubHkgY29vbGRvd24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWluaW11bSBhYnNvbHV0ZSBudW1iZXIgdG8gYWRqdXN0IGNhcGFjaXR5IHdpdGggYXMgcmVzdWx0IG9mIHBlcmNlbnRhZ2Ugc2NhbGluZy5cbiAgICpcbiAgICogT25seSB3aGVuIHVzaW5nIEFkanVzdG1lbnRUeXBlID0gUGVyY2VudENoYW5nZUluQ2FwYWNpdHksIHRoaXMgbnVtYmVyIGNvbnRyb2xzXG4gICAqIHRoZSBtaW5pbXVtIGFic29sdXRlIGVmZmVjdCBzaXplLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBtaW5pbXVtIHNjYWxpbmcgZWZmZWN0XG4gICAqL1xuICByZWFkb25seSBtaW5BZGp1c3RtZW50TWFnbml0dWRlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWdncmVnYXRpb24gdHlwZSBmb3IgdGhlIENsb3VkV2F0Y2ggbWV0cmljcy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXZlcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljQWdncmVnYXRpb25UeXBlPzogTWV0cmljQWdncmVnYXRpb25UeXBlO1xufVxuXG4vKipcbiAqIERlZmluZSBhIHN0ZXAgc2NhbGluZyBhY3Rpb25cbiAqXG4gKiBUaGlzIGtpbmQgb2Ygc2NhbGluZyBwb2xpY3kgYWRqdXN0cyB0aGUgdGFyZ2V0IGNhcGFjaXR5IGluIGNvbmZpZ3VyYWJsZVxuICogc3RlcHMuIFRoZSBzaXplIG9mIHRoZSBzdGVwIGlzIGNvbmZpZ3VyYWJsZSBiYXNlZCBvbiB0aGUgbWV0cmljJ3MgZGlzdGFuY2VcbiAqIHRvIGl0cyBhbGFybSB0aHJlc2hvbGQuXG4gKlxuICogVGhpcyBBY3Rpb24gbXVzdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgYSBDbG91ZFdhdGNoIGFsYXJtIHRvIHRha2UgZWZmZWN0LlxuICovXG5leHBvcnQgY2xhc3MgU3RlcFNjYWxpbmdBY3Rpb24gZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgc2NhbGluZyBwb2xpY3lcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2FsaW5nUG9saWN5QXJuOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogYXBwYXV0b3NjYWxpbmdQb2xpY3kuQXBwYXV0b3NjYWxpbmdQb2xpY3k7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRqdXN0bWVudHMgPVxuICAgIG5ldyBBcnJheTxhcHBhdXRvc2NhbGluZ1BvbGljeS5BcHBhdXRvc2NhbGluZ1BvbGljeVN0ZXBTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvblN0ZXBBZGp1c3RtZW50PigpO1xuXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGluZ1BvbGljeUFybjogdGhpcy5zY2FsaW5nUG9saWN5QXJuLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RlcFNjYWxpbmdBY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHBvbGljeU5hbWUgPVxuICAgICAgcHJvcHMucG9saWN5TmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgYXBwYXV0b3NjYWxpbmdQb2xpY3kuQXBwYXV0b3NjYWxpbmdQb2xpY3koXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBuYW1lOiBwb2xpY3lOYW1lLFxuICAgICAgICBwb2xpY3lUeXBlOiBcIlN0ZXBTY2FsaW5nXCIsXG4gICAgICAgIHJlc291cmNlSWQ6IHByb3BzLnNjYWxpbmdUYXJnZXQucmVzb3VyY2VJZCxcbiAgICAgICAgc2NhbGFibGVEaW1lbnNpb246IHByb3BzLnNjYWxpbmdUYXJnZXQuc2NhbGFibGVEaW1lbnNpb24sXG4gICAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IHByb3BzLnNjYWxpbmdUYXJnZXQuc2VydmljZU5hbWVzcGFjZSxcbiAgICAgICAgc3RlcFNjYWxpbmdQb2xpY3lDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgYWRqdXN0bWVudFR5cGU6XG4gICAgICAgICAgICBwcm9wcy5hZGp1c3RtZW50VHlwZSA/PyBBZGp1c3RtZW50VHlwZS5DSEFOR0VfSU5fQ0FQQUNJVFksXG4gICAgICAgICAgY29vbGRvd246IHByb3BzLmNvb2xkb3duPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBtaW5BZGp1c3RtZW50TWFnbml0dWRlOiBwcm9wcy5taW5BZGp1c3RtZW50TWFnbml0dWRlLFxuICAgICAgICAgIG1ldHJpY0FnZ3JlZ2F0aW9uVHlwZTpcbiAgICAgICAgICAgIHByb3BzLm1ldHJpY0FnZ3JlZ2F0aW9uVHlwZSA/PyBNZXRyaWNBZ2dyZWdhdGlvblR5cGUuQVZFUkFHRSxcbiAgICAgICAgICBzdGVwQWRqdXN0bWVudDogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmFkanVzdG1lbnRzLm1hcChcbiAgICAgICAgICAgICAgICBhcHBhdXRvc2NhbGluZ1BvbGljeS5hcHBhdXRvc2NhbGluZ1BvbGljeVN0ZXBTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvblN0ZXBBZGp1c3RtZW50VG9UZXJyYWZvcm0sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnNjYWxpbmdQb2xpY3lBcm4gPSB0aGlzLnJlc291cmNlLmFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYWRqdXNtZW50IGludGVydmFsIHRvIHRoZSBTY2FsaW5nQWN0aW9uXG4gICAqL1xuICBwdWJsaWMgYWRkQWRqdXN0bWVudChhZGp1c3RtZW50OiBBZGp1c3RtZW50VGllcikge1xuICAgIGlmIChcbiAgICAgIGFkanVzdG1lbnQubG93ZXJCb3VuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBhZGp1c3RtZW50LnVwcGVyQm91bmQgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIG9mIGxvd2VyQm91bmQgb3IgdXBwZXJCb3VuZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgdGhpcy5hZGp1c3RtZW50cy5wdXNoKHtcbiAgICAgIG1ldHJpY0ludGVydmFsTG93ZXJCb3VuZDogYWRqdXN0bWVudC5sb3dlckJvdW5kPy50b1N0cmluZygpLFxuICAgICAgbWV0cmljSW50ZXJ2YWxVcHBlckJvdW5kOiBhZGp1c3RtZW50LnVwcGVyQm91bmQ/LnRvU3RyaW5nKCksXG4gICAgICBzY2FsaW5nQWRqdXN0bWVudDogYWRqdXN0bWVudC5hZGp1c3RtZW50LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogSG93IGFkanVzdG1lbnQgbnVtYmVycyBhcmUgaW50ZXJwcmV0ZWRcbiAqL1xuZXhwb3J0IGVudW0gQWRqdXN0bWVudFR5cGUge1xuICAvKipcbiAgICogQWRkIHRoZSBhZGp1c3RtZW50IG51bWJlciB0byB0aGUgY3VycmVudCBjYXBhY2l0eS5cbiAgICpcbiAgICogQSBwb3NpdGl2ZSBudW1iZXIgaW5jcmVhc2VzIGNhcGFjaXR5LCBhIG5lZ2F0aXZlIG51bWJlciBkZWNyZWFzZXMgY2FwYWNpdHkuXG4gICAqL1xuICBDSEFOR0VfSU5fQ0FQQUNJVFkgPSBcIkNoYW5nZUluQ2FwYWNpdHlcIixcblxuICAvKipcbiAgICogQWRkIHRoaXMgcGVyY2VudGFnZSBvZiB0aGUgY3VycmVudCBjYXBhY2l0eSB0byBpdHNlbGYuXG4gICAqXG4gICAqIFRoZSBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIC0xMDAgYW5kIDEwMDsgYSBwb3NpdGl2ZSBudW1iZXIgaW5jcmVhc2VzXG4gICAqIGNhcGFjaXR5IGFuZCBhIG5lZ2F0aXZlIG51bWJlciBkZWNyZWFzZXMgaXQuXG4gICAqL1xuICBQRVJDRU5UX0NIQU5HRV9JTl9DQVBBQ0lUWSA9IFwiUGVyY2VudENoYW5nZUluQ2FwYWNpdHlcIixcblxuICAvKipcbiAgICogTWFrZSB0aGUgY2FwYWNpdHkgZXF1YWwgdG8gdGhlIGV4YWN0IG51bWJlciBnaXZlbi5cbiAgICovXG4gIEVYQUNUX0NBUEFDSVRZID0gXCJFeGFjdENhcGFjaXR5XCIsXG59XG5cbi8qKlxuICogSG93IHRoZSBzY2FsaW5nIG1ldHJpYyBpcyBnb2luZyB0byBiZSBhZ2dyZWdhdGVkXG4gKi9cbmV4cG9ydCBlbnVtIE1ldHJpY0FnZ3JlZ2F0aW9uVHlwZSB7XG4gIC8qKlxuICAgKiBBdmVyYWdlXG4gICAqL1xuICBBVkVSQUdFID0gXCJBdmVyYWdlXCIsXG5cbiAgLyoqXG4gICAqIE1pbmltdW1cbiAgICovXG4gIE1JTklNVU0gPSBcIk1pbmltdW1cIixcblxuICAvKipcbiAgICogTWF4aW11bVxuICAgKi9cbiAgTUFYSU1VTSA9IFwiTWF4aW11bVwiLFxufVxuXG4vKipcbiAqIEFuIGFkanVzdG1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGp1c3RtZW50VGllciB7XG4gIC8qKlxuICAgKiBXaGF0IG51bWJlciB0byBhZGp1c3QgdGhlIGNhcGFjaXR5IHdpdGhcbiAgICpcbiAgICogVGhlIG51bWJlciBpcyBpbnRlcnBldGVkIGFzIGFuIGFkZGVkIGNhcGFjaXR5LCBhIG5ldyBmaXhlZCBjYXBhY2l0eSBvciBhblxuICAgKiBhZGRlZCBwZXJjZW50YWdlIGRlcGVuZGluZyBvbiB0aGUgQWRqdXN0bWVudFR5cGUgdmFsdWUgb2YgdGhlXG4gICAqIFN0ZXBTY2FsaW5nUG9saWN5LlxuICAgKlxuICAgKiBDYW4gYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuXG4gICAqL1xuICByZWFkb25seSBhZGp1c3RtZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExvd2VyIGJvdW5kIHdoZXJlIHRoaXMgc2NhbGluZyB0aWVyIGFwcGxpZXMuXG4gICAqXG4gICAqIFRoZSBzY2FsaW5nIHRpZXIgYXBwbGllcyBpZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtZXRyaWNcbiAgICogdmFsdWUgYW5kIGl0cyBhbGFybSB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLUluZmluaXR5IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpZXIsIG90aGVyd2lzZSB0aGUgdXBwZXJCb3VuZCBvZiB0aGUgcHJldmlvdXMgdGllclxuICAgKi9cbiAgcmVhZG9ubHkgbG93ZXJCb3VuZD86IG51bWJlcjtcblxuICAvKipcbiAgICogVXBwZXIgYm91bmQgd2hlcmUgdGhpcyBzY2FsaW5nIHRpZXIgYXBwbGllc1xuICAgKlxuICAgKiBUaGUgc2NhbGluZyB0aWVyIGFwcGxpZXMgaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWV0cmljXG4gICAqIHZhbHVlIGFuZCBpdHMgYWxhcm0gdGhyZXNob2xkIGlzIGxvd2VyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgK0luZmluaXR5XG4gICAqL1xuICByZWFkb25seSB1cHBlckJvdW5kPzogbnVtYmVyO1xufVxuIl19
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { IScalableTarget } from "./scalable-target";
|
|
3
|
+
import { AdjustmentType, MetricAggregationType, StepScalingAction } from "./step-scaling-action";
|
|
4
|
+
import { Duration } from "../../duration";
|
|
5
|
+
import * as cloudwatch from "../cloudwatch";
|
|
6
|
+
export interface BasicStepScalingPolicyProps {
|
|
7
|
+
/**
|
|
8
|
+
* Metric to scale on.
|
|
9
|
+
*/
|
|
10
|
+
readonly metric: cloudwatch.IMetric;
|
|
11
|
+
/**
|
|
12
|
+
* The intervals for scaling.
|
|
13
|
+
*
|
|
14
|
+
* Maps a range of metric values to a particular scaling behavior.
|
|
15
|
+
*
|
|
16
|
+
* Must be between 2 and 40 steps.
|
|
17
|
+
*/
|
|
18
|
+
readonly scalingSteps: ScalingInterval[];
|
|
19
|
+
/**
|
|
20
|
+
* How the adjustment numbers inside 'intervals' are interpreted.
|
|
21
|
+
*
|
|
22
|
+
* @default ChangeInCapacity
|
|
23
|
+
*/
|
|
24
|
+
readonly adjustmentType?: AdjustmentType;
|
|
25
|
+
/**
|
|
26
|
+
* Grace period after scaling activity.
|
|
27
|
+
*
|
|
28
|
+
* Subsequent scale outs during the cooldown period are squashed so that only
|
|
29
|
+
* the biggest scale out happens.
|
|
30
|
+
*
|
|
31
|
+
* Subsequent scale ins during the cooldown period are ignored.
|
|
32
|
+
*
|
|
33
|
+
* @see https://docs.aws.amazon.com/autoscaling/application/APIReference/API_StepScalingPolicyConfiguration.html
|
|
34
|
+
* @default No cooldown period
|
|
35
|
+
*/
|
|
36
|
+
readonly cooldown?: Duration;
|
|
37
|
+
/**
|
|
38
|
+
* Minimum absolute number to adjust capacity with as result of percentage scaling.
|
|
39
|
+
*
|
|
40
|
+
* Only when using AdjustmentType = PercentChangeInCapacity, this number controls
|
|
41
|
+
* the minimum absolute effect size.
|
|
42
|
+
*
|
|
43
|
+
* @default No minimum scaling effect
|
|
44
|
+
*/
|
|
45
|
+
readonly minAdjustmentMagnitude?: number;
|
|
46
|
+
/**
|
|
47
|
+
* How many evaluation periods of the metric to wait before triggering a scaling action
|
|
48
|
+
*
|
|
49
|
+
* Raising this value can be used to smooth out the metric, at the expense
|
|
50
|
+
* of slower response times.
|
|
51
|
+
*
|
|
52
|
+
* If `datapointsToAlarm` is not set, then all data points in the evaluation period
|
|
53
|
+
* must meet the criteria to trigger a scaling action.
|
|
54
|
+
*
|
|
55
|
+
* @default 1
|
|
56
|
+
*/
|
|
57
|
+
readonly evaluationPeriods?: number;
|
|
58
|
+
/**
|
|
59
|
+
* The number of data points out of the evaluation periods that must be breaching to
|
|
60
|
+
* trigger a scaling action
|
|
61
|
+
*
|
|
62
|
+
* Creates an "M out of N" alarm, where this property is the M and the value set for
|
|
63
|
+
* `evaluationPeriods` is the N value.
|
|
64
|
+
*
|
|
65
|
+
* Only has meaning if `evaluationPeriods != 1`.
|
|
66
|
+
*
|
|
67
|
+
* @default - Same as `evaluationPeriods`
|
|
68
|
+
*/
|
|
69
|
+
readonly datapointsToAlarm?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Aggregation to apply to all data points over the evaluation periods
|
|
72
|
+
*
|
|
73
|
+
* Only has meaning if `evaluationPeriods != 1`.
|
|
74
|
+
*
|
|
75
|
+
* @default - The statistic from the metric if applicable (MIN, MAX, AVERAGE), otherwise AVERAGE.
|
|
76
|
+
*/
|
|
77
|
+
readonly metricAggregationType?: MetricAggregationType;
|
|
78
|
+
}
|
|
79
|
+
export interface StepScalingPolicyProps extends BasicStepScalingPolicyProps {
|
|
80
|
+
/**
|
|
81
|
+
* The scaling target
|
|
82
|
+
*/
|
|
83
|
+
readonly scalingTarget: IScalableTarget;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Define a scaling strategy which scales depending on absolute values of some metric.
|
|
87
|
+
*
|
|
88
|
+
* You can specify the scaling behavior for various values of the metric.
|
|
89
|
+
*
|
|
90
|
+
* Implemented using one or more CloudWatch alarms and Step Scaling Policies.
|
|
91
|
+
*/
|
|
92
|
+
export declare class StepScalingPolicy extends Construct {
|
|
93
|
+
readonly lowerAlarm?: cloudwatch.Alarm;
|
|
94
|
+
readonly lowerAction?: StepScalingAction;
|
|
95
|
+
readonly upperAlarm?: cloudwatch.Alarm;
|
|
96
|
+
readonly upperAction?: StepScalingAction;
|
|
97
|
+
constructor(scope: Construct, id: string, props: StepScalingPolicyProps);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* A range of metric values in which to apply a certain scaling operation
|
|
101
|
+
*/
|
|
102
|
+
export interface ScalingInterval {
|
|
103
|
+
/**
|
|
104
|
+
* The lower bound of the interval.
|
|
105
|
+
*
|
|
106
|
+
* The scaling adjustment will be applied if the metric is higher than this value.
|
|
107
|
+
*
|
|
108
|
+
* @default Threshold automatically derived from neighbouring intervals
|
|
109
|
+
*/
|
|
110
|
+
readonly lower?: number;
|
|
111
|
+
/**
|
|
112
|
+
* The upper bound of the interval.
|
|
113
|
+
*
|
|
114
|
+
* The scaling adjustment will be applied if the metric is lower than this value.
|
|
115
|
+
*
|
|
116
|
+
* @default Threshold automatically derived from neighbouring intervals
|
|
117
|
+
*/
|
|
118
|
+
readonly upper?: number;
|
|
119
|
+
/**
|
|
120
|
+
* The capacity adjustment to apply in this interval
|
|
121
|
+
*
|
|
122
|
+
* The number is interpreted differently based on AdjustmentType:
|
|
123
|
+
*
|
|
124
|
+
* - ChangeInCapacity: add the adjustment to the current capacity.
|
|
125
|
+
* The number can be positive or negative.
|
|
126
|
+
* - PercentChangeInCapacity: add or remove the given percentage of the current
|
|
127
|
+
* capacity to itself. The number can be in the range [-100..100].
|
|
128
|
+
* - ExactCapacity: set the capacity to this number. The number must
|
|
129
|
+
* be positive.
|
|
130
|
+
*/
|
|
131
|
+
readonly change: number;
|
|
132
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.StepScalingPolicy = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-applicationautoscaling/lib/step-scaling-policy.ts
|
|
7
|
+
const cdktf_1 = require("cdktf");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const interval_utils_1 = require("./autoscaling-common/interval-utils");
|
|
10
|
+
const step_scaling_action_1 = require("./step-scaling-action");
|
|
11
|
+
const cloudwatch = require("../cloudwatch");
|
|
12
|
+
/**
|
|
13
|
+
* Define a scaling strategy which scales depending on absolute values of some metric.
|
|
14
|
+
*
|
|
15
|
+
* You can specify the scaling behavior for various values of the metric.
|
|
16
|
+
*
|
|
17
|
+
* Implemented using one or more CloudWatch alarms and Step Scaling Policies.
|
|
18
|
+
*/
|
|
19
|
+
class StepScalingPolicy extends constructs_1.Construct {
|
|
20
|
+
constructor(scope, id, props) {
|
|
21
|
+
super(scope, id);
|
|
22
|
+
if (props.scalingSteps.length < 2) {
|
|
23
|
+
// throw new ValidationError(
|
|
24
|
+
throw new Error("You must supply at least 2 intervals for autoscaling");
|
|
25
|
+
}
|
|
26
|
+
if (props.scalingSteps.length > 40) {
|
|
27
|
+
// throw new ValidationError(
|
|
28
|
+
throw new Error(`'scalingSteps' can have at most 40 steps, got ${props.scalingSteps.length}`);
|
|
29
|
+
}
|
|
30
|
+
if (props.evaluationPeriods !== undefined &&
|
|
31
|
+
!cdktf_1.Token.isUnresolved(props.evaluationPeriods) &&
|
|
32
|
+
props.evaluationPeriods < 1) {
|
|
33
|
+
// throw new ValidationError(
|
|
34
|
+
throw new Error(`evaluationPeriods cannot be less than 1, got: ${props.evaluationPeriods}`);
|
|
35
|
+
}
|
|
36
|
+
if (props.datapointsToAlarm !== undefined) {
|
|
37
|
+
if (props.evaluationPeriods === undefined) {
|
|
38
|
+
// throw new ValidationError(
|
|
39
|
+
throw new Error("evaluationPeriods must be set if datapointsToAlarm is set");
|
|
40
|
+
}
|
|
41
|
+
if (!cdktf_1.Token.isUnresolved(props.datapointsToAlarm) &&
|
|
42
|
+
props.datapointsToAlarm < 1) {
|
|
43
|
+
// throw new ValidationError(
|
|
44
|
+
throw new Error(`datapointsToAlarm cannot be less than 1, got: ${props.datapointsToAlarm}`);
|
|
45
|
+
}
|
|
46
|
+
if (!cdktf_1.Token.isUnresolved(props.datapointsToAlarm) &&
|
|
47
|
+
!cdktf_1.Token.isUnresolved(props.evaluationPeriods) &&
|
|
48
|
+
props.evaluationPeriods < props.datapointsToAlarm) {
|
|
49
|
+
// throw new ValidationError(
|
|
50
|
+
throw new Error(`datapointsToAlarm must be less than or equal to evaluationPeriods, got datapointsToAlarm: ${props.datapointsToAlarm}, evaluationPeriods: ${props.evaluationPeriods}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const adjustmentType = props.adjustmentType || step_scaling_action_1.AdjustmentType.CHANGE_IN_CAPACITY;
|
|
54
|
+
const changesAreAbsolute = adjustmentType === step_scaling_action_1.AdjustmentType.EXACT_CAPACITY;
|
|
55
|
+
const intervals = (0, interval_utils_1.normalizeIntervals)(props.scalingSteps, changesAreAbsolute);
|
|
56
|
+
const alarms = (0, interval_utils_1.findAlarmThresholds)(intervals);
|
|
57
|
+
if (alarms.lowerAlarmIntervalIndex !== undefined) {
|
|
58
|
+
const threshold = intervals[alarms.lowerAlarmIntervalIndex].upper;
|
|
59
|
+
this.lowerAction = new step_scaling_action_1.StepScalingAction(this, "LowerPolicy", {
|
|
60
|
+
adjustmentType,
|
|
61
|
+
cooldown: props.cooldown,
|
|
62
|
+
metricAggregationType: props.metricAggregationType ??
|
|
63
|
+
aggregationTypeFromMetric(props.metric),
|
|
64
|
+
minAdjustmentMagnitude: props.minAdjustmentMagnitude,
|
|
65
|
+
scalingTarget: props.scalingTarget,
|
|
66
|
+
});
|
|
67
|
+
for (let i = alarms.lowerAlarmIntervalIndex; i >= 0; i--) {
|
|
68
|
+
this.lowerAction.addAdjustment({
|
|
69
|
+
adjustment: intervals[i].change,
|
|
70
|
+
lowerBound: i !== 0 ? intervals[i].lower - threshold : undefined, // Extend last interval to -infinity
|
|
71
|
+
upperBound: intervals[i].upper - threshold,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
this.lowerAlarm = new cloudwatch.Alarm(this, "LowerAlarm", {
|
|
75
|
+
// Recommended by AutoScaling
|
|
76
|
+
metric: props.metric,
|
|
77
|
+
alarmDescription: "Lower threshold scaling alarm",
|
|
78
|
+
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
79
|
+
evaluationPeriods: props.evaluationPeriods ?? 1,
|
|
80
|
+
datapointsToAlarm: props.datapointsToAlarm,
|
|
81
|
+
threshold,
|
|
82
|
+
});
|
|
83
|
+
this.lowerAlarm.addAlarmAction(new StepScalingAlarmAction(this.lowerAction));
|
|
84
|
+
}
|
|
85
|
+
if (alarms.upperAlarmIntervalIndex !== undefined) {
|
|
86
|
+
const threshold = intervals[alarms.upperAlarmIntervalIndex].lower;
|
|
87
|
+
this.upperAction = new step_scaling_action_1.StepScalingAction(this, "UpperPolicy", {
|
|
88
|
+
adjustmentType,
|
|
89
|
+
cooldown: props.cooldown,
|
|
90
|
+
metricAggregationType: props.metricAggregationType ??
|
|
91
|
+
aggregationTypeFromMetric(props.metric),
|
|
92
|
+
minAdjustmentMagnitude: props.minAdjustmentMagnitude,
|
|
93
|
+
scalingTarget: props.scalingTarget,
|
|
94
|
+
});
|
|
95
|
+
for (let i = alarms.upperAlarmIntervalIndex; i < intervals.length; i++) {
|
|
96
|
+
this.upperAction.addAdjustment({
|
|
97
|
+
adjustment: intervals[i].change,
|
|
98
|
+
lowerBound: intervals[i].lower - threshold,
|
|
99
|
+
upperBound: i !== intervals.length - 1
|
|
100
|
+
? intervals[i].upper - threshold
|
|
101
|
+
: undefined, // Extend last interval to +infinity
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.upperAlarm = new cloudwatch.Alarm(this, "UpperAlarm", {
|
|
105
|
+
// Recommended by AutoScaling
|
|
106
|
+
metric: props.metric,
|
|
107
|
+
alarmDescription: "Upper threshold scaling alarm",
|
|
108
|
+
comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
109
|
+
evaluationPeriods: props.evaluationPeriods ?? 1,
|
|
110
|
+
datapointsToAlarm: props.datapointsToAlarm,
|
|
111
|
+
threshold,
|
|
112
|
+
});
|
|
113
|
+
this.upperAlarm.addAlarmAction(new StepScalingAlarmAction(this.upperAction));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.StepScalingPolicy = StepScalingPolicy;
|
|
118
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
119
|
+
StepScalingPolicy[_a] = { fqn: "terraconstructs.aws.compute.StepScalingPolicy", version: "0.0.24" };
|
|
120
|
+
function aggregationTypeFromMetric(metric) {
|
|
121
|
+
const statistic = metric.toMetricConfig().metricStat?.statistic;
|
|
122
|
+
if (statistic == null) {
|
|
123
|
+
return undefined;
|
|
124
|
+
} // Math expression, don't know aggregation, leave default
|
|
125
|
+
switch (statistic) {
|
|
126
|
+
case "Average":
|
|
127
|
+
return step_scaling_action_1.MetricAggregationType.AVERAGE;
|
|
128
|
+
case "Minimum":
|
|
129
|
+
return step_scaling_action_1.MetricAggregationType.MINIMUM;
|
|
130
|
+
case "Maximum":
|
|
131
|
+
return step_scaling_action_1.MetricAggregationType.MAXIMUM;
|
|
132
|
+
default:
|
|
133
|
+
return step_scaling_action_1.MetricAggregationType.AVERAGE;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Use a StepScalingAction as an Alarm Action
|
|
138
|
+
*
|
|
139
|
+
* This class is here and not in aws-cloudwatch-actions because this library
|
|
140
|
+
* needs to use the class, and otherwise we'd have a circular dependency:
|
|
141
|
+
*
|
|
142
|
+
* aws-autoscaling -> aws-cloudwatch-actions (for using the Action)
|
|
143
|
+
* aws-cloudwatch-actions -> aws-autoscaling (for the definition of IStepScalingAction)
|
|
144
|
+
*/
|
|
145
|
+
class StepScalingAlarmAction {
|
|
146
|
+
constructor(stepScalingAction) {
|
|
147
|
+
this.stepScalingAction = stepScalingAction;
|
|
148
|
+
}
|
|
149
|
+
bind(_scope, _alarm) {
|
|
150
|
+
return { alarmActionArn: this.stepScalingAction.scalingPolicyArn };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zY2FsaW5nLXBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9zdGVwLXNjYWxpbmctcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMEhBQTBIO0FBRTFILGlDQUE4QjtBQUM5QiwyQ0FBdUM7QUFDdkMsd0VBRzZDO0FBRTdDLCtEQUkrQjtBQUUvQiw0Q0FBNEM7QUE4RjVDOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsc0JBQVM7SUFNOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsNkJBQTZCO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELENBRXZELENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNuQyw2QkFBNkI7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixpREFBaUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FFN0UsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUNFLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTO1lBQ3JDLENBQUMsYUFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDNUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFDM0IsQ0FBQztZQUNELDZCQUE2QjtZQUM3QixNQUFNLElBQUksS0FBSyxDQUNiLGlEQUFpRCxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FFM0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMx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QUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sc0JBQXNCO0lBQzFCLFlBQTZCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUU5RCxJQUFJLENBQ1QsTUFBaUIsRUFDakIsTUFBeUI7UUFFekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xODYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtYXBwbGljYXRpb25hdXRvc2NhbGluZy9saWIvc3RlcC1zY2FsaW5nLXBvbGljeS50c1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIGZpbmRBbGFybVRocmVzaG9sZHMsXG4gIG5vcm1hbGl6ZUludGVydmFscyxcbn0gZnJvbSBcIi4vYXV0b3NjYWxpbmctY29tbW9uL2ludGVydmFsLXV0aWxzXCI7XG5pbXBvcnQgeyBJU2NhbGFibGVUYXJnZXQgfSBmcm9tIFwiLi9zY2FsYWJsZS10YXJnZXRcIjtcbmltcG9ydCB7XG4gIEFkanVzdG1lbnRUeXBlLFxuICBNZXRyaWNBZ2dyZWdhdGlvblR5cGUsXG4gIFN0ZXBTY2FsaW5nQWN0aW9uLFxufSBmcm9tIFwiLi9zdGVwLXNjYWxpbmctYWN0aW9uXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiLi4vY2xvdWR3YXRjaFwiO1xuLy8gVE9ETyBBZHVwdCBWYWxpZGF0aW9uRXJyb3IgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHN0YW5kYXJkIEVycm9yXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzMzMzgyL1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzA0NVxuLy8gaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyB7XG4gIC8qKlxuICAgKiBNZXRyaWMgdG8gc2NhbGUgb24uXG4gICAqL1xuICByZWFkb25seSBtZXRyaWM6IGNsb3Vkd2F0Y2guSU1ldHJpYztcblxuICAvKipcbiAgICogVGhlIGludGVydmFscyBmb3Igc2NhbGluZy5cbiAgICpcbiAgICogTWFwcyBhIHJhbmdlIG9mIG1ldHJpYyB2YWx1ZXMgdG8gYSBwYXJ0aWN1bGFyIHNjYWxpbmcgYmVoYXZpb3IuXG4gICAqXG4gICAqIE11c3QgYmUgYmV0d2VlbiAyIGFuZCA0MCBzdGVwcy5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxpbmdTdGVwczogU2NhbGluZ0ludGVydmFsW107XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgYWRqdXN0bWVudCBudW1iZXJzIGluc2lkZSAnaW50ZXJ2YWxzJyBhcmUgaW50ZXJwcmV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IENoYW5nZUluQ2FwYWNpdHlcbiAgICovXG4gIHJlYWRvbmx5IGFkanVzdG1lbnRUeXBlPzogQWRqdXN0bWVudFR5cGU7XG5cbiAgLyoqXG4gICAqIEdyYWNlIHBlcmlvZCBhZnRlciBzY2FsaW5nIGFjdGl2aXR5LlxuICAgKlxuICAgKiBTdWJzZXF1ZW50IHNjYWxlIG91dHMgZHVyaW5nIHRoZSBjb29sZG93biBwZXJpb2QgYXJlIHNxdWFzaGVkIHNvIHRoYXQgb25seVxuICAgKiB0aGUgYmlnZ2VzdCBzY2FsZSBvdXQgaGFwcGVucy5cbiAgICpcbiAgICogU3Vic2VxdWVudCBzY2FsZSBpbnMgZHVyaW5nIHRoZSBjb29sZG93biBwZXJpb2QgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL0FQSVJlZmVyZW5jZS9BUElfU3RlcFNjYWxpbmdQb2xpY3lDb25maWd1cmF0aW9uLmh0bWxcbiAgICogQGRlZmF1bHQgTm8gY29vbGRvd24gcGVyaW9kXG4gICAqL1xuICByZWFkb25seSBjb29sZG93bj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGFic29sdXRlIG51bWJlciB0byBhZGp1c3QgY2FwYWNpdHkgd2l0aCBhcyByZXN1bHQgb2YgcGVyY2VudGFnZSBzY2FsaW5nLlxuICAgKlxuICAgKiBPbmx5IHdoZW4gdXNpbmcgQWRqdXN0bWVudFR5cGUgPSBQZXJjZW50Q2hhbmdlSW5DYXBhY2l0eSwgdGhpcyBudW1iZXIgY29udHJvbHNcbiAgICogdGhlIG1pbmltdW0gYWJzb2x1dGUgZWZmZWN0IHNpemUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG1pbmltdW0gc2NhbGluZyBlZmZlY3RcbiAgICovXG4gIHJlYWRvbmx5IG1pbkFkanVzdG1lbnRNYWduaXR1ZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IGV2YWx1YXRpb24gcGVyaW9kcyBvZiB0aGUgbWV0cmljIHRvIHdhaXQgYmVmb3JlIHRyaWdnZXJpbmcgYSBzY2FsaW5nIGFjdGlvblxuICAgKlxuICAgKiBSYWlzaW5nIHRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgdG8gc21vb3RoIG91dCB0aGUgbWV0cmljLCBhdCB0aGUgZXhwZW5zZVxuICAgKiBvZiBzbG93ZXIgcmVzcG9uc2UgdGltZXMuXG4gICAqXG4gICAqIElmIGBkYXRhcG9pbnRzVG9BbGFybWAgaXMgbm90IHNldCwgdGhlbiBhbGwgZGF0YSBwb2ludHMgaW4gdGhlIGV2YWx1YXRpb24gcGVyaW9kXG4gICAqIG11c3QgbWVldCB0aGUgY3JpdGVyaWEgdG8gdHJpZ2dlciBhIHNjYWxpbmcgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0aW9uUGVyaW9kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBvdXQgb2YgdGhlIGV2YWx1YXRpb24gcGVyaW9kcyB0aGF0IG11c3QgYmUgYnJlYWNoaW5nIHRvXG4gICAqIHRyaWdnZXIgYSBzY2FsaW5nIGFjdGlvblxuICAgKlxuICAgKiBDcmVhdGVzIGFuIFwiTSBvdXQgb2YgTlwiIGFsYXJtLCB3aGVyZSB0aGlzIHByb3BlcnR5IGlzIHRoZSBNIGFuZCB0aGUgdmFsdWUgc2V0IGZvclxuICAgKiBgZXZhbHVhdGlvblBlcmlvZHNgIGlzIHRoZSBOIHZhbHVlLlxuICAgKlxuICAgKiBPbmx5IGhhcyBtZWFuaW5nIGlmIGBldmFsdWF0aW9uUGVyaW9kcyAhPSAxYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTYW1lIGFzIGBldmFsdWF0aW9uUGVyaW9kc2BcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFwb2ludHNUb0FsYXJtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGlvbiB0byBhcHBseSB0byBhbGwgZGF0YSBwb2ludHMgb3ZlciB0aGUgZXZhbHVhdGlvbiBwZXJpb2RzXG4gICAqXG4gICAqIE9ubHkgaGFzIG1lYW5pbmcgaWYgYGV2YWx1YXRpb25QZXJpb2RzICE9IDFgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBzdGF0aXN0aWMgZnJvbSB0aGUgbWV0cmljIGlmIGFwcGxpY2FibGUgKE1JTiwgTUFYLCBBVkVSQUdFKSwgb3RoZXJ3aXNlIEFWRVJBR0UuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNBZ2dyZWdhdGlvblR5cGU/OiBNZXRyaWNBZ2dyZWdhdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyBleHRlbmRzIEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc2NhbGluZyB0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHNjYWxpbmdUYXJnZXQ6IElTY2FsYWJsZVRhcmdldDtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBzY2FsaW5nIHN0cmF0ZWd5IHdoaWNoIHNjYWxlcyBkZXBlbmRpbmcgb24gYWJzb2x1dGUgdmFsdWVzIG9mIHNvbWUgbWV0cmljLlxuICpcbiAqIFlvdSBjYW4gc3BlY2lmeSB0aGUgc2NhbGluZyBiZWhhdmlvciBmb3IgdmFyaW91cyB2YWx1ZXMgb2YgdGhlIG1ldHJpYy5cbiAqXG4gKiBJbXBsZW1lbnRlZCB1c2luZyBvbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtcyBhbmQgU3RlcCBTY2FsaW5nIFBvbGljaWVzLlxuICovXG5leHBvcnQgY2xhc3MgU3RlcFNjYWxpbmdQb2xpY3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbG93ZXJBbGFybT86IGNsb3Vkd2F0Y2guQWxhcm07XG4gIHB1YmxpYyByZWFkb25seSBsb3dlckFjdGlvbj86IFN0ZXBTY2FsaW5nQWN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBwZXJBbGFybT86IGNsb3Vkd2F0Y2guQWxhcm07XG4gIHB1YmxpYyByZWFkb25seSB1cHBlckFjdGlvbj86IFN0ZXBTY2FsaW5nQWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGVwU2NhbGluZ1BvbGljeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5zY2FsaW5nU3RlcHMubGVuZ3RoIDwgMikge1xuICAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgbXVzdCBzdXBwbHkgYXQgbGVhc3QgMiBpbnRlcnZhbHMgZm9yIGF1dG9zY2FsaW5nXCIsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2NhbGluZ1N0ZXBzLmxlbmd0aCA+IDQwKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJ3NjYWxpbmdTdGVwcycgY2FuIGhhdmUgYXQgbW9zdCA0MCBzdGVwcywgZ290ICR7cHJvcHMuc2NhbGluZ1N0ZXBzLmxlbmd0aH1gLFxuICAgICAgICAvLyBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuZXZhbHVhdGlvblBlcmlvZHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5ldmFsdWF0aW9uUGVyaW9kcykgJiZcbiAgICAgIHByb3BzLmV2YWx1YXRpb25QZXJpb2RzIDwgMVxuICAgICkge1xuICAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGV2YWx1YXRpb25QZXJpb2RzIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSwgZ290OiAke3Byb3BzLmV2YWx1YXRpb25QZXJpb2RzfWAsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRhdGFwb2ludHNUb0FsYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcm9wcy5ldmFsdWF0aW9uUGVyaW9kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImV2YWx1YXRpb25QZXJpb2RzIG11c3QgYmUgc2V0IGlmIGRhdGFwb2ludHNUb0FsYXJtIGlzIHNldFwiLFxuICAgICAgICAgIC8vIHNjb3BlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRhdGFwb2ludHNUb0FsYXJtKSAmJlxuICAgICAgICBwcm9wcy5kYXRhcG9pbnRzVG9BbGFybSA8IDFcbiAgICAgICkge1xuICAgICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRhdGFwb2ludHNUb0FsYXJtIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSwgZ290OiAke3Byb3BzLmRhdGFwb2ludHNUb0FsYXJtfWAsXG4gICAgICAgICAgLy8gc2NvcGUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZGF0YXBvaW50c1RvQWxhcm0pICYmXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZXZhbHVhdGlvblBlcmlvZHMpICYmXG4gICAgICAgIHByb3BzLmV2YWx1YXRpb25QZXJpb2RzIDwgcHJvcHMuZGF0YXBvaW50c1RvQWxhcm1cbiAgICAgICkge1xuICAgICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRhdGFwb2ludHNUb0FsYXJtIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGV2YWx1YXRpb25QZXJpb2RzLCBnb3QgZGF0YXBvaW50c1RvQWxhcm06ICR7cHJvcHMuZGF0YXBvaW50c1RvQWxhcm19LCBldmFsdWF0aW9uUGVyaW9kczogJHtwcm9wcy5ldmFsdWF0aW9uUGVyaW9kc31gLFxuICAgICAgICAgIC8vIHNjb3BlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkanVzdG1lbnRUeXBlID1cbiAgICAgIHByb3BzLmFkanVzdG1lbnRUeXBlIHx8IEFkanVzdG1lbnRUeXBlLkNIQU5HRV9JTl9DQVBBQ0lUWTtcbiAgICBjb25zdCBjaGFuZ2VzQXJlQWJzb2x1dGUgPSBhZGp1c3RtZW50VHlwZSA9PT0gQWRqdXN0bWVudFR5cGUuRVhBQ1RfQ0FQQUNJVFk7XG5cbiAgICBjb25zdCBpbnRlcnZhbHMgPSBub3JtYWxpemVJbnRlcnZhbHMoXG4gICAgICBwcm9wcy5zY2FsaW5nU3RlcHMsXG4gICAgICBjaGFuZ2VzQXJlQWJzb2x1dGUsXG4gICAgKTtcbiAgICBjb25zdCBhbGFybXMgPSBmaW5kQWxhcm1UaHJlc2hvbGRzKGludGVydmFscyk7XG5cbiAgICBpZiAoYWxhcm1zLmxvd2VyQWxhcm1JbnRlcnZhbEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IGludGVydmFsc1thbGFybXMubG93ZXJBbGFybUludGVydmFsSW5kZXhdLnVwcGVyO1xuXG4gICAgICB0aGlzLmxvd2VyQWN0aW9uID0gbmV3IFN0ZXBTY2FsaW5nQWN0aW9uKHRoaXMsIFwiTG93ZXJQb2xpY3lcIiwge1xuICAgICAgICBhZGp1c3RtZW50VHlwZSxcbiAgICAgICAgY29vbGRvd246IHByb3BzLmNvb2xkb3duLFxuICAgICAgICBtZXRyaWNBZ2dyZWdhdGlvblR5cGU6XG4gICAgICAgICAgcHJvcHMubWV0cmljQWdncmVnYXRpb25UeXBlID8/XG4gICAgICAgICAgYWdncmVnYXRpb25UeXBlRnJvbU1ldHJpYyhwcm9wcy5tZXRyaWMpLFxuICAgICAgICBtaW5BZGp1c3RtZW50TWFnbml0dWRlOiBwcm9wcy5taW5BZGp1c3RtZW50TWFnbml0dWRlLFxuICAgICAgICBzY2FsaW5nVGFyZ2V0OiBwcm9wcy5zY2FsaW5nVGFyZ2V0LFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSBhbGFybXMubG93ZXJBbGFybUludGVydmFsSW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMubG93ZXJBY3Rpb24uYWRkQWRqdXN0bWVudCh7XG4gICAgICAgICAgYWRqdXN0bWVudDogaW50ZXJ2YWxzW2ldLmNoYW5nZSEsXG4gICAgICAgICAgbG93ZXJCb3VuZDogaSAhPT0gMCA/IGludGVydmFsc1tpXS5sb3dlciAtIHRocmVzaG9sZCA6IHVuZGVmaW5lZCwgLy8gRXh0ZW5kIGxhc3QgaW50ZXJ2YWwgdG8gLWluZmluaXR5XG4gICAgICAgICAgdXBwZXJCb3VuZDogaW50ZXJ2YWxzW2ldLnVwcGVyIC0gdGhyZXNob2xkLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb3dlckFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgXCJMb3dlckFsYXJtXCIsIHtcbiAgICAgICAgLy8gUmVjb21tZW5kZWQgYnkgQXV0b1NjYWxpbmdcbiAgICAgICAgbWV0cmljOiBwcm9wcy5tZXRyaWMsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFwiTG93ZXIgdGhyZXNob2xkIHNjYWxpbmcgYWxhcm1cIixcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBwcm9wcy5ldmFsdWF0aW9uUGVyaW9kcyA/PyAxLFxuICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogcHJvcHMuZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICAgIHRocmVzaG9sZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb3dlckFsYXJtLmFkZEFsYXJtQWN0aW9uKFxuICAgICAgICBuZXcgU3RlcFNjYWxpbmdBbGFybUFjdGlvbih0aGlzLmxvd2VyQWN0aW9uKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFsYXJtcy51cHBlckFsYXJtSW50ZXJ2YWxJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSBpbnRlcnZhbHNbYWxhcm1zLnVwcGVyQWxhcm1JbnRlcnZhbEluZGV4XS5sb3dlcjtcblxuICAgICAgdGhpcy51cHBlckFjdGlvbiA9IG5ldyBTdGVwU2NhbGluZ0FjdGlvbih0aGlzLCBcIlVwcGVyUG9saWN5XCIsIHtcbiAgICAgICAgYWRqdXN0bWVudFR5cGUsXG4gICAgICAgIGNvb2xkb3duOiBwcm9wcy5jb29sZG93bixcbiAgICAgICAgbWV0cmljQWdncmVnYXRpb25UeXBlOlxuICAgICAgICAgIHByb3BzLm1ldHJpY0FnZ3JlZ2F0aW9uVHlwZSA/P1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uVHlwZUZyb21NZXRyaWMocHJvcHMubWV0cmljKSxcbiAgICAgICAgbWluQWRqdXN0bWVudE1hZ25pdHVkZTogcHJvcHMubWluQWRqdXN0bWVudE1hZ25pdHVkZSxcbiAgICAgICAgc2NhbGluZ1RhcmdldDogcHJvcHMuc2NhbGluZ1RhcmdldCxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBpID0gYWxhcm1zLnVwcGVyQWxhcm1JbnRlcnZhbEluZGV4OyBpIDwgaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMudXBwZXJBY3Rpb24uYWRkQWRqdXN0bWVudCh7XG4gICAgICAgICAgYWRqdXN0bWVudDogaW50ZXJ2YWxzW2ldLmNoYW5nZSEsXG4gICAgICAgICAgbG93ZXJCb3VuZDogaW50ZXJ2YWxzW2ldLmxvd2VyIC0gdGhyZXNob2xkLFxuICAgICAgICAgIHVwcGVyQm91bmQ6XG4gICAgICAgICAgICBpICE9PSBpbnRlcnZhbHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICA/IGludGVydmFsc1tpXS51cHBlciAtIHRocmVzaG9sZFxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCwgLy8gRXh0ZW5kIGxhc3QgaW50ZXJ2YWwgdG8gK2luZmluaXR5XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwcGVyQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCBcIlVwcGVyQWxhcm1cIiwge1xuICAgICAgICAvLyBSZWNvbW1lbmRlZCBieSBBdXRvU2NhbGluZ1xuICAgICAgICBtZXRyaWM6IHByb3BzLm1ldHJpYyxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogXCJVcHBlciB0aHJlc2hvbGQgc2NhbGluZyBhbGFybVwiLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzLmV2YWx1YXRpb25QZXJpb2RzID8/IDEsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBwcm9wcy5kYXRhcG9pbnRzVG9BbGFybSxcbiAgICAgICAgdGhyZXNob2xkLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwcGVyQWxhcm0uYWRkQWxhcm1BY3Rpb24oXG4gICAgICAgIG5ldyBTdGVwU2NhbGluZ0FsYXJtQWN0aW9uKHRoaXMudXBwZXJBY3Rpb24pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJhbmdlIG9mIG1ldHJpYyB2YWx1ZXMgaW4gd2hpY2ggdG8gYXBwbHkgYSBjZXJ0YWluIHNjYWxpbmcgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGluZ0ludGVydmFsIHtcbiAgLyoqXG4gICAqIFRoZSBsb3dlciBib3VuZCBvZiB0aGUgaW50ZXJ2YWwuXG4gICAqXG4gICAqIFRoZSBzY2FsaW5nIGFkanVzdG1lbnQgd2lsbCBiZSBhcHBsaWVkIGlmIHRoZSBtZXRyaWMgaXMgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhyZXNob2xkIGF1dG9tYXRpY2FsbHkgZGVyaXZlZCBmcm9tIG5laWdoYm91cmluZyBpbnRlcnZhbHNcbiAgICovXG4gIHJlYWRvbmx5IGxvd2VyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdXBwZXIgYm91bmQgb2YgdGhlIGludGVydmFsLlxuICAgKlxuICAgKiBUaGUgc2NhbGluZyBhZGp1c3RtZW50IHdpbGwgYmUgYXBwbGllZCBpZiB0aGUgbWV0cmljIGlzIGxvd2VyIHRoYW4gdGhpcyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhyZXNob2xkIGF1dG9tYXRpY2FsbHkgZGVyaXZlZCBmcm9tIG5laWdoYm91cmluZyBpbnRlcnZhbHNcbiAgICovXG4gIHJlYWRvbmx5IHVwcGVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FwYWNpdHkgYWRqdXN0bWVudCB0byBhcHBseSBpbiB0aGlzIGludGVydmFsXG4gICAqXG4gICAqIFRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYmFzZWQgb24gQWRqdXN0bWVudFR5cGU6XG4gICAqXG4gICAqIC0gQ2hhbmdlSW5DYXBhY2l0eTogYWRkIHRoZSBhZGp1c3RtZW50IHRvIHRoZSBjdXJyZW50IGNhcGFjaXR5LlxuICAgKiAgVGhlIG51bWJlciBjYW4gYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuXG4gICAqIC0gUGVyY2VudENoYW5nZUluQ2FwYWNpdHk6IGFkZCBvciByZW1vdmUgdGhlIGdpdmVuIHBlcmNlbnRhZ2Ugb2YgdGhlIGN1cnJlbnRcbiAgICogICBjYXBhY2l0eSB0byBpdHNlbGYuIFRoZSBudW1iZXIgY2FuIGJlIGluIHRoZSByYW5nZSBbLTEwMC4uMTAwXS5cbiAgICogLSBFeGFjdENhcGFjaXR5OiBzZXQgdGhlIGNhcGFjaXR5IHRvIHRoaXMgbnVtYmVyLiBUaGUgbnVtYmVyIG11c3RcbiAgICogICBiZSBwb3NpdGl2ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBhZ2dyZWdhdGlvblR5cGVGcm9tTWV0cmljKFxuICBtZXRyaWM6IGNsb3Vkd2F0Y2guSU1ldHJpYyxcbik6IE1ldHJpY0FnZ3JlZ2F0aW9uVHlwZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0YXRpc3RpYyA9IG1ldHJpYy50b01ldHJpY0NvbmZpZygpLm1ldHJpY1N0YXQ/LnN0YXRpc3RpYztcbiAgaWYgKHN0YXRpc3RpYyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBNYXRoIGV4cHJlc3Npb24sIGRvbid0IGtub3cgYWdncmVnYXRpb24sIGxlYXZlIGRlZmF1bHRcblxuICBzd2l0Y2ggKHN0YXRpc3RpYykge1xuICAgIGNhc2UgXCJBdmVyYWdlXCI6XG4gICAgICByZXR1cm4gTWV0cmljQWdncmVnYXRpb25UeXBlLkFWRVJBR0U7XG4gICAgY2FzZSBcIk1pbmltdW1cIjpcbiAgICAgIHJldHVybiBNZXRyaWNBZ2dyZWdhdGlvblR5cGUuTUlOSU1VTTtcbiAgICBjYXNlIFwiTWF4aW11bVwiOlxuICAgICAgcmV0dXJuIE1ldHJpY0FnZ3JlZ2F0aW9uVHlwZS5NQVhJTVVNO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gTWV0cmljQWdncmVnYXRpb25UeXBlLkFWRVJBR0U7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2UgYSBTdGVwU2NhbGluZ0FjdGlvbiBhcyBhbiBBbGFybSBBY3Rpb25cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGhlcmUgYW5kIG5vdCBpbiBhd3MtY2xvdWR3YXRjaC1hY3Rpb25zIGJlY2F1c2UgdGhpcyBsaWJyYXJ5XG4gKiBuZWVkcyB0byB1c2UgdGhlIGNsYXNzLCBhbmQgb3RoZXJ3aXNlIHdlJ2QgaGF2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKlxuICogYXdzLWF1dG9zY2FsaW5nIC0+IGF3cy1jbG91ZHdhdGNoLWFjdGlvbnMgKGZvciB1c2luZyB0aGUgQWN0aW9uKVxuICogYXdzLWNsb3Vkd2F0Y2gtYWN0aW9ucyAtPiBhd3MtYXV0b3NjYWxpbmcgKGZvciB0aGUgZGVmaW5pdGlvbiBvZiBJU3RlcFNjYWxpbmdBY3Rpb24pXG4gKi9cbmNsYXNzIFN0ZXBTY2FsaW5nQWxhcm1BY3Rpb24gaW1wbGVtZW50cyBjbG91ZHdhdGNoLklBbGFybUFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RlcFNjYWxpbmdBY3Rpb246IFN0ZXBTY2FsaW5nQWN0aW9uKSB7fVxuXG4gIHB1YmxpYyBiaW5kKFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIF9hbGFybTogY2xvdWR3YXRjaC5JQWxhcm0sXG4gICk6IGNsb3Vkd2F0Y2guQWxhcm1BY3Rpb25Db25maWcge1xuICAgIHJldHVybiB7IGFsYXJtQWN0aW9uQXJuOiB0aGlzLnN0ZXBTY2FsaW5nQWN0aW9uLnNjYWxpbmdQb2xpY3lBcm4gfTtcbiAgfVxufVxuIl19
|
|
@@ -26,7 +26,7 @@ class IpCidr {
|
|
|
26
26
|
}
|
|
27
27
|
exports.IpCidr = IpCidr;
|
|
28
28
|
_a = JSII_RTTI_SYMBOL_1;
|
|
29
|
-
IpCidr[_a] = { fqn: "terraconstructs.aws.compute.alpha.IpCidr", version: "0.0.
|
|
29
|
+
IpCidr[_a] = { fqn: "terraconstructs.aws.compute.alpha.IpCidr", version: "0.0.24" };
|
|
30
30
|
/**
|
|
31
31
|
* Name tag constant
|
|
32
32
|
*/
|
|
@@ -247,7 +247,7 @@ class SubnetV2 extends aws_construct_1.AwsConstructBase {
|
|
|
247
247
|
}
|
|
248
248
|
exports.SubnetV2 = SubnetV2;
|
|
249
249
|
_b = JSII_RTTI_SYMBOL_1;
|
|
250
|
-
SubnetV2[_b] = { fqn: "terraconstructs.aws.compute.alpha.SubnetV2", version: "0.0.
|
|
250
|
+
SubnetV2[_b] = { fqn: "terraconstructs.aws.compute.alpha.SubnetV2", version: "0.0.24" };
|
|
251
251
|
const subnetTypeMap = {
|
|
252
252
|
[vpc_1.SubnetType.PRIVATE_ISOLATED]: (vpc, subnet) => vpc.isolatedSubnets.push(subnet),
|
|
253
253
|
[vpc_1.SubnetType.PUBLIC]: (vpc, subnet) => vpc.publicSubnets.push(subnet),
|
|
@@ -58,7 +58,7 @@ class SubnetFilter {
|
|
|
58
58
|
}
|
|
59
59
|
exports.SubnetFilter = SubnetFilter;
|
|
60
60
|
_a = JSII_RTTI_SYMBOL_1;
|
|
61
|
-
SubnetFilter[_a] = { fqn: "terraconstructs.aws.compute.SubnetFilter", version: "0.0.
|
|
61
|
+
SubnetFilter[_a] = { fqn: "terraconstructs.aws.compute.SubnetFilter", version: "0.0.24" };
|
|
62
62
|
/**
|
|
63
63
|
* Chooses subnets which are in one of the given availability zones.
|
|
64
64
|
*/
|