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.
Files changed (288) hide show
  1. package/.jsii +104400 -90067
  2. package/go.mod +2 -1
  3. package/go.sum +2 -0
  4. package/lib/aws/arn.js +1 -1
  5. package/lib/aws/aws-construct.js +1 -1
  6. package/lib/aws/aws-stack.js +1 -1
  7. package/lib/aws/aws-tags.js +2 -2
  8. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  9. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  10. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  13. package/lib/aws/cloudwatch/alarm.js +4 -5
  14. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  15. package/lib/aws/cloudwatch/dashboard.js +1 -1
  16. package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
  17. package/lib/aws/cloudwatch/graph.js +8 -8
  18. package/lib/aws/cloudwatch/layout.js +3 -3
  19. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  20. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  21. package/lib/aws/cloudwatch/log-group.js +3 -3
  22. package/lib/aws/cloudwatch/log-query.js +1 -1
  23. package/lib/aws/cloudwatch/log-stream.js +1 -1
  24. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  25. package/lib/aws/cloudwatch/metric.js +4 -4
  26. package/lib/aws/cloudwatch/pattern.js +3 -3
  27. package/lib/aws/cloudwatch/policy.js +1 -1
  28. package/lib/aws/cloudwatch/private/metric-util.js +1 -2
  29. package/lib/aws/cloudwatch/query-definition.js +2 -2
  30. package/lib/aws/cloudwatch/stats.js +1 -1
  31. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  32. package/lib/aws/cloudwatch/text.js +1 -1
  33. package/lib/aws/cloudwatch/variable.js +3 -3
  34. package/lib/aws/cloudwatch/widget.js +1 -1
  35. package/lib/aws/compute/activity.js +1 -1
  36. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  37. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  38. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  39. package/lib/aws/compute/alb/application-listener.js +2 -4
  40. package/lib/aws/compute/alb/application-load-balancer.js +2 -4
  41. package/lib/aws/compute/alb/application-target-group.js +1 -1
  42. package/lib/aws/compute/alb/conditions.js +1 -1
  43. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  44. package/lib/aws/compute/alb/trust-store.js +1 -1
  45. package/lib/aws/compute/architecture.js +1 -1
  46. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  47. package/lib/aws/compute/autoscaling-common/index.d.ts +3 -0
  48. package/lib/aws/compute/autoscaling-common/index.js +21 -0
  49. package/lib/aws/compute/autoscaling-common/interval-utils.d.ts +21 -0
  50. package/lib/aws/compute/autoscaling-common/interval-utils.js +213 -0
  51. package/lib/aws/compute/autoscaling-common/test-utils.d.ts +21 -0
  52. package/lib/aws/compute/autoscaling-common/test-utils.js +94 -0
  53. package/lib/aws/compute/autoscaling-common/types.d.ts +34 -0
  54. package/lib/aws/compute/autoscaling-common/types.js +3 -0
  55. package/lib/aws/compute/base-scalable-attribute.d.ts +74 -0
  56. package/lib/aws/compute/base-scalable-attribute.js +58 -0
  57. package/lib/aws/compute/bastion-host.js +1 -1
  58. package/lib/aws/compute/chain.js +1 -1
  59. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  60. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  61. package/lib/aws/compute/client-vpn-route.js +2 -2
  62. package/lib/aws/compute/condition.js +1 -1
  63. package/lib/aws/compute/connections.js +1 -1
  64. package/lib/aws/compute/ec2-util.js +1 -4
  65. package/lib/aws/compute/event-invoke-config.js +1 -1
  66. package/lib/aws/compute/event-source-filter.js +2 -2
  67. package/lib/aws/compute/event-source-mapping.js +3 -3
  68. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  69. package/lib/aws/compute/event-sources/s3.js +1 -1
  70. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  71. package/lib/aws/compute/event-sources/sqs.js +1 -1
  72. package/lib/aws/compute/fields.js +4 -4
  73. package/lib/aws/compute/function-alias.js +1 -1
  74. package/lib/aws/compute/function-base.js +7 -8
  75. package/lib/aws/compute/function-destinations/event-bridge.js +3 -3
  76. package/lib/aws/compute/function-destinations/function.js +1 -1
  77. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  78. package/lib/aws/compute/function-nodejs.js +1 -1
  79. package/lib/aws/compute/function-url.js +1 -1
  80. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  81. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  82. package/lib/aws/compute/function.js +1 -1
  83. package/lib/aws/compute/index.d.ts +7 -0
  84. package/lib/aws/compute/index.js +11 -2
  85. package/lib/aws/compute/instance-types.js +1 -1
  86. package/lib/aws/compute/instance.js +1 -1
  87. package/lib/aws/compute/ip-addresses.js +2 -2
  88. package/lib/aws/compute/ipam.js +1 -1
  89. package/lib/aws/compute/key-pair.js +1 -1
  90. package/lib/aws/compute/launch-template.js +2 -2
  91. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  92. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  93. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  94. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +31 -31
  95. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  96. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +4 -4
  97. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  98. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  99. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  100. package/lib/aws/compute/lb-shared/util.js +1 -2
  101. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  102. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  103. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  104. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  105. package/lib/aws/compute/load-balancer.js +3 -3
  106. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  107. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  108. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  109. package/lib/aws/compute/machine-image/common.js +1 -1
  110. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  111. package/lib/aws/compute/machine-image/utils.js +6 -6
  112. package/lib/aws/compute/nat.js +5 -5
  113. package/lib/aws/compute/network-acl-types.js +2 -2
  114. package/lib/aws/compute/network-acl.js +3 -3
  115. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  116. package/lib/aws/compute/nlb/network-listener.js +2 -3
  117. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  118. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  119. package/lib/aws/compute/peer.js +1 -1
  120. package/lib/aws/compute/placement-group.js +1 -1
  121. package/lib/aws/compute/port.js +1 -1
  122. package/lib/aws/compute/prefix-list.js +1 -1
  123. package/lib/aws/compute/private/context-stub.js +2 -2
  124. package/lib/aws/compute/route.js +11 -11
  125. package/lib/aws/compute/scalable-target.d.ts +197 -0
  126. package/lib/aws/compute/scalable-target.js +168 -0
  127. package/lib/aws/compute/schedule.d.ts +81 -0
  128. package/lib/aws/compute/schedule.js +145 -0
  129. package/lib/aws/compute/security-group.js +4 -4
  130. package/lib/aws/compute/state-graph.js +1 -1
  131. package/lib/aws/compute/state-machine-fragment.js +1 -1
  132. package/lib/aws/compute/state-machine.js +4 -4
  133. package/lib/aws/compute/states/choice.js +1 -1
  134. package/lib/aws/compute/states/custom-state.js +1 -1
  135. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  136. package/lib/aws/compute/states/distributed-map/item-reader.js +7 -7
  137. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  138. package/lib/aws/compute/states/distributed-map.js +4 -4
  139. package/lib/aws/compute/states/fail.js +1 -1
  140. package/lib/aws/compute/states/map-base.js +1 -1
  141. package/lib/aws/compute/states/map.js +1 -1
  142. package/lib/aws/compute/states/parallel.js +1 -1
  143. package/lib/aws/compute/states/pass.js +2 -2
  144. package/lib/aws/compute/states/state.js +1 -1
  145. package/lib/aws/compute/states/succeed.js +1 -1
  146. package/lib/aws/compute/states/task-base.js +2 -2
  147. package/lib/aws/compute/states/task.js +1 -1
  148. package/lib/aws/compute/states/wait.js +2 -2
  149. package/lib/aws/compute/step-scaling-action.d.ts +148 -0
  150. package/lib/aws/compute/step-scaling-action.js +109 -0
  151. package/lib/aws/compute/step-scaling-policy.d.ts +132 -0
  152. package/lib/aws/compute/step-scaling-policy.js +153 -0
  153. package/lib/aws/compute/subnet-v2.js +2 -2
  154. package/lib/aws/compute/subnet.js +1 -1
  155. package/lib/aws/compute/target-tracking-scaling-policy.d.ts +262 -0
  156. package/lib/aws/compute/target-tracking-scaling-policy.js +234 -0
  157. package/lib/aws/compute/task-credentials.js +1 -1
  158. package/lib/aws/compute/task-input.js +1 -1
  159. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  160. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  161. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  162. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  163. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  164. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  165. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  166. package/lib/aws/compute/types.js +1 -1
  167. package/lib/aws/compute/user-data.js +3 -3
  168. package/lib/aws/compute/volume.js +2 -2
  169. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  170. package/lib/aws/compute/vpc-endpoint.js +6 -6
  171. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  172. package/lib/aws/compute/vpc-v2-base.js +1 -1
  173. package/lib/aws/compute/vpc-v2.js +2 -2
  174. package/lib/aws/compute/vpc.d.ts +1 -1
  175. package/lib/aws/compute/vpc.js +10 -16
  176. package/lib/aws/compute/vpn.js +4 -7
  177. package/lib/aws/compute/windows-versions.js +1 -2
  178. package/lib/aws/edge/certificate.js +1 -1
  179. package/lib/aws/edge/distribution.js +4 -5
  180. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  181. package/lib/aws/edge/dns-record.js +13 -13
  182. package/lib/aws/edge/dns-zone.js +1 -1
  183. package/lib/aws/edge/function.js +2 -2
  184. package/lib/aws/edge/key-value-store.js +4 -4
  185. package/lib/aws/edge/origin.js +3 -3
  186. package/lib/aws/edge/response-headers-policy.js +1 -1
  187. package/lib/aws/encryption/alias.js +1 -1
  188. package/lib/aws/encryption/key.js +1 -1
  189. package/lib/aws/encryption/via-service-principal.js +1 -1
  190. package/lib/aws/iam/grant.js +3 -4
  191. package/lib/aws/iam/group.js +1 -1
  192. package/lib/aws/iam/instance-profile.js +1 -1
  193. package/lib/aws/iam/managed-policy.js +1 -1
  194. package/lib/aws/iam/oidc-provider.js +3 -3
  195. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  196. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  197. package/lib/aws/iam/policy-document.js +1 -1
  198. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  199. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  200. package/lib/aws/iam/policy-statement.js +1 -1
  201. package/lib/aws/iam/policy.js +1 -1
  202. package/lib/aws/iam/principals.js +20 -20
  203. package/lib/aws/iam/role.js +1 -1
  204. package/lib/aws/iam/saml-provider.js +2 -2
  205. package/lib/aws/iam/unknown-principal.js +1 -1
  206. package/lib/aws/iam/user.js +1 -1
  207. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  208. package/lib/aws/network/subnet-group.js +3 -3
  209. package/lib/aws/network/subnet.js +4 -4
  210. package/lib/aws/notify/archive.js +1 -1
  211. package/lib/aws/notify/connection.js +7 -7
  212. package/lib/aws/notify/event-bus.js +3 -3
  213. package/lib/aws/notify/event-pattern.js +1 -1
  214. package/lib/aws/notify/input.js +2 -2
  215. package/lib/aws/notify/kinesis-stream.js +1 -1
  216. package/lib/aws/notify/notification-rule.js +1 -1
  217. package/lib/aws/notify/policy.js +1 -1
  218. package/lib/aws/notify/queue-config.generated.d.ts +12 -12
  219. package/lib/aws/notify/queue-config.generated.js +1 -1
  220. package/lib/aws/notify/queue-policy.js +1 -1
  221. package/lib/aws/notify/queue.js +1 -1
  222. package/lib/aws/notify/resource-policy.js +1 -1
  223. package/lib/aws/notify/rule.js +1 -1
  224. package/lib/aws/notify/schedule.js +1 -1
  225. package/lib/aws/notify/subscription-filter.js +1 -1
  226. package/lib/aws/notify/subscription.js +4 -4
  227. package/lib/aws/notify/subscriptions/email.js +1 -1
  228. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  229. package/lib/aws/notify/subscriptions/sms.js +1 -1
  230. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  231. package/lib/aws/notify/subscriptions/url.js +1 -1
  232. package/lib/aws/notify/targets/event-bus.js +1 -1
  233. package/lib/aws/notify/targets/function.js +1 -1
  234. package/lib/aws/notify/targets/log-group.js +2 -2
  235. package/lib/aws/notify/targets/sqs.js +3 -3
  236. package/lib/aws/notify/targets/state-machine.js +1 -1
  237. package/lib/aws/notify/targets/util.js +2 -2
  238. package/lib/aws/notify/topic-base.js +1 -1
  239. package/lib/aws/notify/topic.js +1 -1
  240. package/lib/aws/provider-config.generated.d.ts +33 -33
  241. package/lib/aws/provider-config.generated.js +1 -1
  242. package/lib/aws/storage/billing.d.ts +62 -0
  243. package/lib/aws/storage/billing.js +49 -0
  244. package/lib/aws/storage/bucket-notifications.js +1 -1
  245. package/lib/aws/storage/bucket-policy.js +1 -1
  246. package/lib/aws/storage/bucket-source.js +3 -3
  247. package/lib/aws/storage/bucket.js +2 -2
  248. package/lib/aws/storage/capacity.d.ts +96 -0
  249. package/lib/aws/storage/capacity.js +103 -0
  250. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  251. package/lib/aws/storage/cors-config.generated.js +1 -1
  252. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  253. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  254. package/lib/aws/storage/dynamodb-canned-metrics.generated.d.ts +493 -0
  255. package/lib/aws/storage/dynamodb-canned-metrics.generated.js +263 -0
  256. package/lib/aws/storage/dynamodb-perms.d.ts +8 -0
  257. package/lib/aws/storage/dynamodb-perms.js +45 -0
  258. package/lib/aws/storage/encryption.d.ts +54 -0
  259. package/lib/aws/storage/encryption.js +116 -0
  260. package/lib/aws/storage/index.d.ts +6 -0
  261. package/lib/aws/storage/index.js +10 -1
  262. package/lib/aws/storage/lifecycle-config.generated.d.ts +7 -7
  263. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  264. package/lib/aws/storage/notification-targets/function.js +1 -1
  265. package/lib/aws/storage/notification-targets/queue.js +1 -1
  266. package/lib/aws/storage/origin-access-identity.js +1 -1
  267. package/lib/aws/storage/parameter.js +2 -2
  268. package/lib/aws/storage/scalable-attribute-api.d.ts +36 -0
  269. package/lib/aws/storage/scalable-attribute-api.js +3 -0
  270. package/lib/aws/storage/scalable-table-attribute.d.ts +32 -0
  271. package/lib/aws/storage/scalable-table-attribute.js +48 -0
  272. package/lib/aws/storage/shared.d.ts +419 -0
  273. package/lib/aws/storage/shared.js +161 -0
  274. package/lib/aws/storage/table.d.ts +536 -0
  275. package/lib/aws/storage/table.js +1054 -0
  276. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  277. package/lib/aws/storage/website-config.generated.js +1 -1
  278. package/lib/construct-base.js +2 -2
  279. package/lib/duration.js +1 -1
  280. package/lib/expiration.js +1 -1
  281. package/lib/index.d.ts +1 -0
  282. package/lib/index.js +2 -1
  283. package/lib/size.js +1 -1
  284. package/lib/stack-base.js +1 -1
  285. package/lib/terra-func.js +1 -1
  286. package/lib/time-zone.d.ts +724 -0
  287. package/lib/time-zone.js +737 -0
  288. 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.22" };
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.22" };
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.22" };
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
  */