terraconstructs 0.0.10 → 0.0.12
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 +104486 -34582
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.d.ts +1 -1
- package/lib/aws/aws-construct.js +28 -2
- package/lib/aws/aws-stack.d.ts +2 -4
- package/lib/aws/aws-stack.js +21 -8
- package/lib/aws/aws-tags.d.ts +58 -0
- package/lib/aws/aws-tags.js +77 -0
- 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 +1 -1
- 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 +3 -3
- 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 +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +4 -4
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
- package/lib/aws/cloudwatch/private/metric-util.js +4 -5
- package/lib/aws/cloudwatch/private/object.js +2 -3
- package/lib/aws/cloudwatch/private/rendering.js +3 -3
- package/lib/aws/cloudwatch/private/statistic.js +6 -7
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +4 -4
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.d.ts +1 -1
- package/lib/aws/cloudwatch/widget.js +4 -4
- package/lib/aws/compute/activity.js +3 -2
- package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
- package/lib/aws/compute/alb/application-listener-action.js +281 -0
- package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
- package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
- package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
- package/lib/aws/compute/alb/application-listener-rule.js +220 -0
- package/lib/aws/compute/alb/application-listener.d.ts +574 -0
- package/lib/aws/compute/alb/application-listener.js +538 -0
- package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
- package/lib/aws/compute/alb/application-load-balancer.js +780 -0
- package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
- package/lib/aws/compute/alb/application-target-group.js +427 -0
- package/lib/aws/compute/alb/conditions.d.ts +61 -0
- package/lib/aws/compute/alb/conditions.js +164 -0
- package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
- package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
- package/lib/aws/compute/alb/trust-store.d.ts +86 -0
- package/lib/aws/compute/alb/trust-store.js +79 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
- package/lib/aws/compute/bastion-host.d.ts +172 -0
- package/lib/aws/compute/bastion-host.js +114 -0
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/cidr-splits.d.ts +49 -0
- package/lib/aws/compute/cidr-splits.js +59 -0
- package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
- package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
- package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
- package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
- package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
- package/lib/aws/compute/client-vpn-endpoint.js +259 -0
- package/lib/aws/compute/client-vpn-route.d.ts +67 -0
- package/lib/aws/compute/client-vpn-route.js +57 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.d.ts +137 -0
- package/lib/aws/compute/connections.js +208 -0
- package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
- package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
- package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
- package/lib/aws/compute/ec2-util-v2.js +286 -0
- package/lib/aws/compute/ec2-util.d.ts +52 -0
- package/lib/aws/compute/ec2-util.js +138 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
- 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 +1 -1
- 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 +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- 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.d.ts +1 -1
- package/lib/aws/compute/function.js +5 -5
- package/lib/aws/compute/index-alpha.d.ts +5 -0
- package/lib/aws/compute/index-alpha.js +22 -0
- package/lib/aws/compute/index.d.ts +60 -0
- package/lib/aws/compute/index.js +70 -2
- package/lib/aws/compute/instance-types.d.ts +1354 -0
- package/lib/aws/compute/instance-types.js +1683 -0
- package/lib/aws/compute/instance.d.ts +436 -0
- package/lib/aws/compute/instance.js +262 -0
- package/lib/aws/compute/ip-addresses.d.ts +249 -0
- package/lib/aws/compute/ip-addresses.js +248 -0
- package/lib/aws/compute/ipam.d.ts +309 -0
- package/lib/aws/compute/ipam.js +306 -0
- package/lib/aws/compute/key-pair.d.ts +178 -0
- package/lib/aws/compute/key-pair.js +194 -0
- package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
- package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/launch-template.d.ts +540 -0
- package/lib/aws/compute/launch-template.js +468 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
- package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
- package/lib/aws/compute/lb-shared/base-listener.js +181 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
- package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
- package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
- package/lib/aws/compute/lb-shared/enums.js +301 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
- package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
- package/lib/aws/compute/lb-shared/imported.js +27 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
- package/lib/aws/compute/lb-shared/listener-action.js +4 -0
- package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
- package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
- package/lib/aws/compute/lb-shared/util.d.ts +113 -0
- package/lib/aws/compute/lb-shared/util.js +264 -0
- package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
- package/lib/aws/compute/lb-targets/alb-target.js +100 -0
- package/lib/aws/compute/lb-targets/index.d.ts +4 -0
- package/lib/aws/compute/lb-targets/index.js +22 -0
- package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
- package/lib/aws/compute/lb-targets/instance-target.js +67 -0
- package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
- package/lib/aws/compute/lb-targets/ip-target.js +79 -0
- package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
- package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
- package/lib/aws/compute/load-balancer.d.ts +336 -0
- package/lib/aws/compute/load-balancer.js +287 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
- package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
- package/lib/aws/compute/machine-image/common.d.ts +181 -0
- package/lib/aws/compute/machine-image/common.js +122 -0
- package/lib/aws/compute/machine-image/index.d.ts +5 -0
- package/lib/aws/compute/machine-image/index.js +22 -0
- package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
- package/lib/aws/compute/machine-image/machine-image.js +566 -0
- package/lib/aws/compute/machine-image/utils.d.ts +2 -0
- package/lib/aws/compute/machine-image/utils.js +17 -0
- package/lib/aws/compute/nat.d.ts +325 -0
- package/lib/aws/compute/nat.js +455 -0
- package/lib/aws/compute/network-acl-types.d.ts +152 -0
- package/lib/aws/compute/network-acl-types.js +156 -0
- package/lib/aws/compute/network-acl.d.ts +285 -0
- package/lib/aws/compute/network-acl.js +207 -0
- package/lib/aws/compute/network-util.d.ts +116 -0
- package/lib/aws/compute/network-util.js +241 -0
- package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
- package/lib/aws/compute/nlb/network-listener-action.js +146 -0
- package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
- package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
- package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
- package/lib/aws/compute/nlb/network-listener.js +217 -0
- package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
- package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
- package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
- package/lib/aws/compute/nlb/network-target-group.js +223 -0
- package/lib/aws/compute/peer.d.ts +64 -0
- package/lib/aws/compute/peer.js +235 -0
- package/lib/aws/compute/placement-group.d.ts +161 -0
- package/lib/aws/compute/placement-group.js +133 -0
- package/lib/aws/compute/port.d.ts +287 -0
- package/lib/aws/compute/port.js +390 -0
- package/lib/aws/compute/prefix-list.d.ts +131 -0
- package/lib/aws/compute/prefix-list.js +114 -0
- package/lib/aws/compute/private/context-stub.d.ts +7 -0
- package/lib/aws/compute/private/context-stub.js +43 -0
- package/lib/aws/compute/private/ebs-util.d.ts +14 -0
- package/lib/aws/compute/private/ebs-util.js +145 -0
- package/lib/aws/compute/private/intrinstics.js +2 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/private/util.js +2 -3
- package/lib/aws/compute/route.d.ts +547 -0
- package/lib/aws/compute/route.js +469 -0
- package/lib/aws/compute/security-group.d.ts +414 -0
- package/lib/aws/compute/security-group.js +538 -0
- 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.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +14 -12
- 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 +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- 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 +5 -5
- 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/stepfunctions-canned-metrics.generated.d.ts +83 -0
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
- package/lib/aws/compute/subnet-v2.d.ts +213 -0
- package/lib/aws/compute/subnet-v2.js +405 -0
- package/lib/aws/compute/subnet.d.ts +37 -0
- package/lib/aws/compute/subnet.js +181 -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/private/task-utils.js +3 -4
- package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
- 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 +2 -2
- package/lib/aws/compute/user-data.d.ts +270 -0
- package/lib/aws/compute/user-data.js +487 -0
- package/lib/aws/compute/util.d.ts +1 -1
- package/lib/aws/compute/util.js +4 -5
- package/lib/aws/compute/volume.d.ts +480 -0
- package/lib/aws/compute/volume.js +426 -0
- package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
- package/lib/aws/compute/vpc-endpoint-service.js +90 -0
- package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
- package/lib/aws/compute/vpc-endpoint.js +811 -0
- package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
- package/lib/aws/compute/vpc-flow-logs.js +693 -0
- package/lib/aws/compute/vpc-lookup.d.ts +73 -0
- package/lib/aws/compute/vpc-lookup.js +3 -0
- package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
- package/lib/aws/compute/vpc-v2-base.js +493 -0
- package/lib/aws/compute/vpc-v2.d.ts +385 -0
- package/lib/aws/compute/vpc-v2.js +408 -0
- package/lib/aws/compute/vpc.d.ts +1448 -0
- package/lib/aws/compute/vpc.js +1495 -0
- package/lib/aws/compute/vpn.d.ts +443 -0
- package/lib/aws/compute/vpn.js +397 -0
- package/lib/aws/compute/windows-versions.d.ts +418 -0
- package/lib/aws/compute/windows-versions.js +426 -0
- package/lib/aws/edge/certificate-base.d.ts +20 -0
- package/lib/aws/edge/certificate-base.js +28 -0
- package/lib/aws/edge/certificate.d.ts +23 -2
- package/lib/aws/edge/certificate.js +54 -4
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +2 -2
- package/lib/aws/edge/dns-record.js +16 -16
- package/lib/aws/edge/dns-zone.d.ts +20 -2
- package/lib/aws/edge/dns-zone.js +25 -10
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/index.d.ts +1 -0
- package/lib/aws/edge/index.js +2 -1
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +8 -6
- 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 +2 -2
- package/lib/aws/iam/index.d.ts +1 -0
- package/lib/aws/iam/index.js +2 -1
- package/lib/aws/iam/instance-profile.d.ts +155 -0
- package/lib/aws/iam/instance-profile.js +124 -0
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- 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 +9 -9
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +26 -26
- package/lib/aws/iam/private/assume-role-policy.js +2 -3
- package/lib/aws/iam/private/comparable-principal.js +2 -3
- package/lib/aws/iam/private/immutable-role.d.ts +2 -1
- package/lib/aws/iam/private/immutable-role.js +3 -3
- package/lib/aws/iam/private/imported-role.d.ts +1 -1
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/merge-statements.js +2 -3
- package/lib/aws/iam/private/util.js +4 -4
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/utils.js +2 -3
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +5 -5
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +7 -7
- package/lib/aws/notify/archive.js +3 -2
- package/lib/aws/notify/connection.js +5 -4
- package/lib/aws/notify/event-bus.js +5 -4
- package/lib/aws/notify/event-pattern.js +3 -3
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +4 -3
- package/lib/aws/notify/kinesis-stream.js +3 -2
- package/lib/aws/notify/on-event-options.js +2 -1
- package/lib/aws/notify/queue-config.generated.d.ts +18 -11
- 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 +3 -2
- package/lib/aws/notify/schedule.js +2 -2
- package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
- package/lib/aws/notify/target.js +2 -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 +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.d.ts +1 -1
- package/lib/aws/notify/targets/util.js +10 -11
- package/lib/aws/notify/util.js +4 -4
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.js +1 -1
- 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 +1 -1
- package/lib/aws/storage/bucket.d.ts +298 -65
- package/lib/aws/storage/bucket.js +548 -225
- 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/index.d.ts +1 -0
- package/lib/aws/storage/index.js +2 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +6 -6
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.d.ts +1 -1
- package/lib/aws/storage/origin-access-identity.js +5 -4
- package/lib/aws/storage/parameter-util.d.ts +12 -0
- package/lib/aws/storage/parameter-util.js +65 -0
- package/lib/aws/storage/parameter.d.ts +526 -0
- package/lib/aws/storage/parameter.js +606 -0
- package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
- package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
- package/lib/aws/storage/util.d.ts +25 -3
- package/lib/aws/storage/util.js +84 -17
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/aws/util.js +2 -3
- package/lib/construct-base.d.ts +10 -1
- package/lib/construct-base.js +9 -6
- package/lib/duration.js +1 -1
- package/lib/expiration.d.ts +48 -0
- package/lib/expiration.js +68 -0
- package/lib/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +7 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/private/md5.d.ts +4 -0
- package/lib/private/md5.js +14 -0
- package/lib/private/unique-resource-name.js +3 -4
- package/lib/size.js +2 -2
- package/lib/stack-base.d.ts +4 -23
- package/lib/stack-base.js +9 -30
- package/lib/terra-func.d.ts +103 -0
- package/lib/terra-func.js +170 -0
- package/lib/token.js +5 -5
- package/package.json +15 -8
- package/bun.lockb +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NetworkListener = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-listener.ts
|
|
7
|
+
const cdktf_1 = require("cdktf");
|
|
8
|
+
const network_listener_action_1 = require("./network-listener-action");
|
|
9
|
+
const network_listener_certificate_1 = require("./network-listener-certificate");
|
|
10
|
+
const network_target_group_1 = require("./network-target-group");
|
|
11
|
+
const duration_1 = require("../../../duration");
|
|
12
|
+
const aws_construct_1 = require("../../aws-construct");
|
|
13
|
+
const base_listener_1 = require("../lb-shared/base-listener");
|
|
14
|
+
const enums_1 = require("../lb-shared/enums");
|
|
15
|
+
const util_1 = require("../lb-shared/util");
|
|
16
|
+
/**
|
|
17
|
+
* Define a Network Listener
|
|
18
|
+
*
|
|
19
|
+
* @resource AWS::ElasticLoadBalancingV2::Listener
|
|
20
|
+
*/
|
|
21
|
+
class NetworkListener extends base_listener_1.BaseListener {
|
|
22
|
+
// TODO: Add Grid Lookup support
|
|
23
|
+
// /**
|
|
24
|
+
// * Looks up a network listener
|
|
25
|
+
// */
|
|
26
|
+
// public static fromLookup(
|
|
27
|
+
// scope: Construct,
|
|
28
|
+
// id: string,
|
|
29
|
+
// options: NetworkListenerLookupOptions,
|
|
30
|
+
// ): INetworkListener {
|
|
31
|
+
// let listenerProtocol: LoadBalancerListenerProtocol | undefined;
|
|
32
|
+
// if (options.listenerProtocol) {
|
|
33
|
+
// validateNetworkProtocol(options.listenerProtocol);
|
|
34
|
+
// switch (options.listenerProtocol) {
|
|
35
|
+
// case Protocol.TCP:
|
|
36
|
+
// listenerProtocol = LoadBalancerListenerProtocol.TCP;
|
|
37
|
+
// break;
|
|
38
|
+
// case Protocol.UDP:
|
|
39
|
+
// listenerProtocol = LoadBalancerListenerProtocol.UDP;
|
|
40
|
+
// break;
|
|
41
|
+
// case Protocol.TCP_UDP:
|
|
42
|
+
// listenerProtocol = LoadBalancerListenerProtocol.TCP_UDP;
|
|
43
|
+
// break;
|
|
44
|
+
// case Protocol.TLS:
|
|
45
|
+
// listenerProtocol = LoadBalancerListenerProtocol.TLS;
|
|
46
|
+
// break;
|
|
47
|
+
// }
|
|
48
|
+
// }
|
|
49
|
+
// const props = BaseListener._queryContextProvider(scope, {
|
|
50
|
+
// userOptions: options,
|
|
51
|
+
// listenerProtocol: listenerProtocol,
|
|
52
|
+
// loadBalancerType: LoadBalancerType.NETWORK,
|
|
53
|
+
// });
|
|
54
|
+
// class LookedUp extends AwsConstructBase implements INetworkListener {
|
|
55
|
+
// public listenerArn = props.listenerArn;
|
|
56
|
+
// }
|
|
57
|
+
// return new LookedUp(scope, id);
|
|
58
|
+
// }
|
|
59
|
+
/**
|
|
60
|
+
* Import an existing listener
|
|
61
|
+
*/
|
|
62
|
+
static fromNetworkListenerArn(scope, id, networkListenerArn) {
|
|
63
|
+
class Import extends aws_construct_1.AwsConstructBase {
|
|
64
|
+
constructor() {
|
|
65
|
+
super(...arguments);
|
|
66
|
+
this.listenerArn = networkListenerArn;
|
|
67
|
+
this.listenerOutputs = {
|
|
68
|
+
listenerArn: networkListenerArn,
|
|
69
|
+
};
|
|
70
|
+
this.outputs = {
|
|
71
|
+
listenerArn: networkListenerArn,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return new Import(scope, id);
|
|
76
|
+
}
|
|
77
|
+
constructor(scope, id, props) {
|
|
78
|
+
const certs = props.certificates || [];
|
|
79
|
+
const proto = props.protocol || (certs.length > 0 ? enums_1.LbProtocol.TLS : enums_1.LbProtocol.TCP);
|
|
80
|
+
(0, util_1.validateNetworkProtocol)(proto);
|
|
81
|
+
if (proto === enums_1.LbProtocol.TLS &&
|
|
82
|
+
certs.filter((v) => v != null).length === 0) {
|
|
83
|
+
throw new Error("When the protocol is set to TLS, you must specify certificates");
|
|
84
|
+
}
|
|
85
|
+
if (proto !== enums_1.LbProtocol.TLS && certs.length > 0) {
|
|
86
|
+
throw new Error("Protocol must be TLS when certificates have been specified");
|
|
87
|
+
}
|
|
88
|
+
if (proto !== enums_1.LbProtocol.TLS && props.alpnPolicy) {
|
|
89
|
+
throw new Error("Protocol must be TLS when alpnPolicy have been specified");
|
|
90
|
+
}
|
|
91
|
+
super(scope, id, {
|
|
92
|
+
loadBalancerArn: props.loadBalancer.loadBalancerArn,
|
|
93
|
+
protocol: proto,
|
|
94
|
+
port: props.port,
|
|
95
|
+
sslPolicy: props.sslPolicy,
|
|
96
|
+
certificateArn: cdktf_1.Lazy.stringValue({
|
|
97
|
+
produce: () => this.certificateArns.length > 0 ? this.certificateArns[0] : undefined,
|
|
98
|
+
}),
|
|
99
|
+
alpnPolicy: props.alpnPolicy ? props.alpnPolicy : undefined,
|
|
100
|
+
});
|
|
101
|
+
this.certificateArns = [];
|
|
102
|
+
this.loadBalancer = props.loadBalancer;
|
|
103
|
+
this.protocol = proto;
|
|
104
|
+
if (certs.length > 0) {
|
|
105
|
+
this.addCertificates("DefaultCertificates", certs);
|
|
106
|
+
}
|
|
107
|
+
if (props.defaultAction && props.defaultTargetGroups) {
|
|
108
|
+
throw new Error("Specify at most one of 'defaultAction' and 'defaultTargetGroups'");
|
|
109
|
+
}
|
|
110
|
+
if (props.defaultAction) {
|
|
111
|
+
this.setDefaultAction(props.defaultAction);
|
|
112
|
+
}
|
|
113
|
+
if (props.defaultTargetGroups) {
|
|
114
|
+
this.setDefaultAction(network_listener_action_1.NetworkListenerAction.forward(props.defaultTargetGroups));
|
|
115
|
+
}
|
|
116
|
+
if (props.tcpIdleTimeout !== undefined &&
|
|
117
|
+
!cdktf_1.Token.isUnresolved(props.tcpIdleTimeout)) {
|
|
118
|
+
if (props.tcpIdleTimeout.toMilliseconds() <
|
|
119
|
+
duration_1.Duration.seconds(1).toMilliseconds()) {
|
|
120
|
+
throw new Error(`\`tcpIdleTimeout\` must be between 60 and 6000 seconds, got ${props.tcpIdleTimeout.toMilliseconds()} milliseconds.`);
|
|
121
|
+
}
|
|
122
|
+
const tcpIdleTimeoutSeconds = props.tcpIdleTimeout.toSeconds();
|
|
123
|
+
if (proto === enums_1.LbProtocol.UDP) {
|
|
124
|
+
throw new Error("`tcpIdleTimeout` cannot be set when `protocol` is `Protocol.UDP`.");
|
|
125
|
+
}
|
|
126
|
+
if (tcpIdleTimeoutSeconds < 60 || tcpIdleTimeoutSeconds > 6000) {
|
|
127
|
+
throw new Error(`\`tcpIdleTimeout\` must be between 60 and 6000 seconds, got ${tcpIdleTimeoutSeconds} seconds.`);
|
|
128
|
+
}
|
|
129
|
+
this.setAttribute("tcp.idle_timeout.seconds", tcpIdleTimeoutSeconds.toString());
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Add one or more certificates to this listener.
|
|
134
|
+
*
|
|
135
|
+
* After the first certificate, this creates NetworkListenerCertificates
|
|
136
|
+
* resources since cloudformation requires the certificates array on the
|
|
137
|
+
* listener resource to have a length of 1.
|
|
138
|
+
*/
|
|
139
|
+
addCertificates(id, certificates) {
|
|
140
|
+
const additionalCerts = [...certificates];
|
|
141
|
+
if (this.certificateArns.length === 0 && additionalCerts.length > 0) {
|
|
142
|
+
const first = additionalCerts.splice(0, 1)[0];
|
|
143
|
+
this.certificateArns.push(first.certificateArn);
|
|
144
|
+
}
|
|
145
|
+
// Only one certificate can be specified per resource, even though
|
|
146
|
+
// `certificates` is of type Array
|
|
147
|
+
for (let i = 0; i < additionalCerts.length; i++) {
|
|
148
|
+
new network_listener_certificate_1.NetworkListenerCertificate(this, `${id}${i + 1}`, {
|
|
149
|
+
listener: this,
|
|
150
|
+
certificates: [additionalCerts[i]],
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Load balance incoming requests to the given target groups.
|
|
156
|
+
*
|
|
157
|
+
* All target groups will be load balanced to with equal weight and without
|
|
158
|
+
* stickiness. For a more complex configuration than that, use `addAction()`.
|
|
159
|
+
*/
|
|
160
|
+
addTargetGroups(_id, ...targetGroups) {
|
|
161
|
+
this.setDefaultAction(network_listener_action_1.NetworkListenerAction.forward(targetGroups));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Perform the given Action on incoming requests
|
|
165
|
+
*
|
|
166
|
+
* This allows full control of the default Action of the load balancer,
|
|
167
|
+
* including weighted forwarding. See the `NetworkListenerAction` class for
|
|
168
|
+
* all options.
|
|
169
|
+
*/
|
|
170
|
+
addAction(_id, props) {
|
|
171
|
+
this.setDefaultAction(props.action);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Load balance incoming requests to the given load balancing targets.
|
|
175
|
+
*
|
|
176
|
+
* This method implicitly creates a NetworkTargetGroup for the targets
|
|
177
|
+
* involved, and a 'forward' action to route traffic to the given TargetGroup.
|
|
178
|
+
*
|
|
179
|
+
* If you want more control over the precise setup, create the TargetGroup
|
|
180
|
+
* and use `addAction` yourself.
|
|
181
|
+
*
|
|
182
|
+
* It's possible to add conditions to the targets added in this way. At least
|
|
183
|
+
* one set of targets must be added without conditions.
|
|
184
|
+
*
|
|
185
|
+
* @returns The newly created target group
|
|
186
|
+
*/
|
|
187
|
+
addTargets(id, props) {
|
|
188
|
+
if (!this.loadBalancer.vpc) {
|
|
189
|
+
// eslint-disable-next-line max-len
|
|
190
|
+
throw new Error("Can only call addTargets() when using a constructed Load Balancer or imported Load Balancer with specified VPC; construct a new TargetGroup and use addTargetGroup");
|
|
191
|
+
}
|
|
192
|
+
const group = new network_target_group_1.NetworkTargetGroup(this, id + "Group", {
|
|
193
|
+
deregistrationDelay: props.deregistrationDelay,
|
|
194
|
+
healthCheck: props.healthCheck,
|
|
195
|
+
port: props.port,
|
|
196
|
+
protocol: props.protocol ?? this.protocol,
|
|
197
|
+
proxyProtocolV2: props.proxyProtocolV2,
|
|
198
|
+
preserveClientIp: props.preserveClientIp,
|
|
199
|
+
targetGroupName: props.targetGroupName,
|
|
200
|
+
targets: props.targets,
|
|
201
|
+
vpc: this.loadBalancer.vpc,
|
|
202
|
+
});
|
|
203
|
+
this.addTargetGroups(id, group);
|
|
204
|
+
return group;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Wrapper for _setDefaultAction which does a type-safe bind
|
|
208
|
+
*/
|
|
209
|
+
setDefaultAction(action) {
|
|
210
|
+
action.bind(this, this);
|
|
211
|
+
this._setDefaultAction(action);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.NetworkListener = NetworkListener;
|
|
215
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
216
|
+
NetworkListener[_a] = { fqn: "terraconstructs.aws.compute.NetworkListener", version: "0.0.12" };
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ubGIvbmV0d29yay1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJIQUEySDtBQUUzSCxpQ0FBb0M7QUFFcEMsdUVBQWtFO0FBQ2xFLGlGQUE0RTtBQUU1RSxpRUFJZ0M7QUFDaEMsZ0RBQTZDO0FBQzdDLHVEQUF1RDtBQUN2RCw4REFJb0M7QUFFcEMsOENBQXVFO0FBTXZFLDRDQUE0RDtBQTRHNUQ7Ozs7R0FJRztBQUNILE1BQWEsZUFBZ0IsU0FBUSw0QkFBWTtJQUMvQyxnQ0FBZ0M7SUFDaEMsTUFBTTtJQUNOLGlDQUFpQztJQUNqQyxNQUFNO0lBQ04sNEJBQTRCO0lBQzVCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsMkNBQTJDO0lBQzNDLHdCQUF3QjtJQUN4QixvRUFBb0U7SUFDcEUsb0NBQW9DO0lBQ3BDLHlEQUF5RDtJQUV6RCwwQ0FBMEM7SUFDMUMsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsK0JBQStCO0lBQy9CLG1FQUFtRTtJQUNuRSxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsUUFBUTtJQUNSLE1BQU07SUFFTiw4REFBOEQ7SUFDOUQsNEJBQTRCO0lBQzVCLDBDQUEwQztJQUMxQyxrREFBa0Q7SUFDbEQsUUFBUTtJQUVSLDBFQUEwRTtJQUMxRSw4Q0FBOEM7SUFDOUMsTUFBTTtJQUVOLG9DQUFvQztJQUNwQyxJQUFJO0lBRUo7O09BRUc7SUFDSSxNQUFNLENBQUMsc0JBQXNCLENBQ2xDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixrQkFBMEI7UUFFMUIsTUFBTSxNQUFPLFNBQVEsZ0NBQWdCO1lBQXJDOztnQkFDUyxnQkFBVyxH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UUFDSixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSx5Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUN2RCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQzlDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDekMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBNkI7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0FBcFJILDBDQXFSQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9ubGIvbmV0d29yay1saXN0ZW5lci50c1xuXG5pbXBvcnQgeyBMYXp5LCBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE5ldHdvcmtMaXN0ZW5lckFjdGlvbiB9IGZyb20gXCIuL25ldHdvcmstbGlzdGVuZXItYWN0aW9uXCI7XG5pbXBvcnQgeyBOZXR3b3JrTGlzdGVuZXJDZXJ0aWZpY2F0ZSB9IGZyb20gXCIuL25ldHdvcmstbGlzdGVuZXItY2VydGlmaWNhdGVcIjtcbmltcG9ydCB7IElOZXR3b3JrTG9hZEJhbGFuY2VyIH0gZnJvbSBcIi4vbmV0d29yay1sb2FkLWJhbGFuY2VyXCI7XG5pbXBvcnQge1xuICBJTmV0d29ya0xvYWRCYWxhbmNlclRhcmdldCxcbiAgSU5ldHdvcmtUYXJnZXRHcm91cCxcbiAgTmV0d29ya1RhcmdldEdyb3VwLFxufSBmcm9tIFwiLi9uZXR3b3JrLXRhcmdldC1ncm91cFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UgfSBmcm9tIFwiLi4vLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZUxpc3RlbmVyLFxuICBCYXNlTGlzdGVuZXJMb29rdXBPcHRpb25zLFxuICBJTGlzdGVuZXIsXG59IGZyb20gXCIuLi9sYi1zaGFyZWQvYmFzZS1saXN0ZW5lclwiO1xuaW1wb3J0IHsgSGVhbHRoQ2hlY2sgfSBmcm9tIFwiLi4vbGItc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwXCI7XG5pbXBvcnQgeyBBbHBuUG9saWN5LCBMYlByb3RvY29sLCBTc2xQb2xpY3kgfSBmcm9tIFwiLi4vbGItc2hhcmVkL2VudW1zXCI7XG4vLyBpbXBvcnQge1xuLy8gICBMb2FkQmFsYW5jZXJUeXBlLFxuLy8gICBMb2FkQmFsYW5jZXJMaXN0ZW5lclByb3RvY29sLFxuLy8gfSBmcm9tIFwiLi4vbGItc2hhcmVkL2dyaWQtbG9va3VwLXR5cGVzXCI7XG5pbXBvcnQgeyBJTGlzdGVuZXJDZXJ0aWZpY2F0ZSB9IGZyb20gXCIuLi9sYi1zaGFyZWQvbGlzdGVuZXItY2VydGlmaWNhdGVcIjtcbmltcG9ydCB7IHZhbGlkYXRlTmV0d29ya1Byb3RvY29sIH0gZnJvbSBcIi4uL2xiLXNoYXJlZC91dGlsXCI7XG5cbi8qKlxuICogQmFzaWMgcHJvcGVydGllcyBmb3IgYSBOZXR3b3JrIExpc3RlbmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU5ldHdvcmtMaXN0ZW5lclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwb3J0IG9uIHdoaWNoIHRoZSBsaXN0ZW5lciBsaXN0ZW5zIGZvciByZXF1ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCB0YXJnZXQgZ3JvdXBzIHRvIGxvYWQgYmFsYW5jZSB0b1xuICAgKlxuICAgKiBBbGwgdGFyZ2V0IGdyb3VwcyB3aWxsIGJlIGxvYWQgYmFsYW5jZWQgdG8gd2l0aCBlcXVhbCB3ZWlnaHQgYW5kIHdpdGhvdXRcbiAgICogc3RpY2tpbmVzcy4gRm9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gdGhhbiB0aGF0LCB1c2VcbiAgICogZWl0aGVyIGBkZWZhdWx0QWN0aW9uYCBvciBgYWRkQWN0aW9uKClgLlxuICAgKlxuICAgKiBDYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYGRlZmF1bHRBY3Rpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VGFyZ2V0R3JvdXBzPzogSU5ldHdvcmtUYXJnZXRHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbiB0byB0YWtlIGZvciByZXF1ZXN0cyB0byB0aGlzIGxpc3RlbmVyXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGZ1bGwgY29udHJvbCBvZiB0aGUgZGVmYXVsdCBBY3Rpb24gb2YgdGhlIGxvYWQgYmFsYW5jZXIsXG4gICAqIGluY2x1ZGluZyB3ZWlnaHRlZCBmb3J3YXJkaW5nLiBTZWUgdGhlIGBOZXR3b3JrTGlzdGVuZXJBY3Rpb25gIGNsYXNzIGZvclxuICAgKiBhbGwgb3B0aW9ucy5cbiAgICpcbiAgICogQ2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIGBkZWZhdWx0VGFyZ2V0R3JvdXBzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFjdGlvbj86IE5ldHdvcmtMaXN0ZW5lckFjdGlvbjtcblxuICAvKipcbiAgICogUHJvdG9jb2wgZm9yIGxpc3RlbmVyLCBleHBlY3RzIFRDUCwgVExTLCBVRFAsIG9yIFRDUF9VRFAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVExTIGlmIGNlcnRpZmljYXRlcyBhcmUgcHJvdmlkZWQuIFRDUCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IExiUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIGxpc3Qgb2YgQUNNIGNlcnQgQVJOcy4gWW91IG11c3QgcHJvdmlkZSBleGFjdGx5IG9uZSBjZXJ0aWZpY2F0ZSBpZiB0aGUgbGlzdGVuZXIgcHJvdG9jb2wgaXMgSFRUUFMgb3IgVExTLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNlcnRpZmljYXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlcz86IElMaXN0ZW5lckNlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIFNTTCBQb2xpY3lcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHByZWRlZmluZWQgc2VjdXJpdHkgcG9saWN5LlxuICAgKi9cbiAgcmVhZG9ubHkgc3NsUG9saWN5PzogU3NsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbi1MYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbiAoQUxQTikgaXMgYSBUTFMgZXh0ZW5zaW9uIHRoYXQgaXMgc2VudCBvbiB0aGUgaW5pdGlhbCBUTFMgaGFuZHNoYWtlIGhlbGxvIG1lc3NhZ2VzLlxuICAgKiBBTFBOIGVuYWJsZXMgdGhlIGFwcGxpY2F0aW9uIGxheWVyIHRvIG5lZ290aWF0ZSB3aGljaCBwcm90b2NvbHMgc2hvdWxkIGJlIHVzZWQgb3ZlciBhIHNlY3VyZSBjb25uZWN0aW9uLCBzdWNoIGFzIEhUVFAvMSBhbmQgSFRUUC8yLlxuICAgKlxuICAgKiBDYW4gb25seSBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBQcm90b2NvbCBUTFMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxwblBvbGljeT86IEFscG5Qb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkIGJhbGFuY2VyIFRDUCBpZGxlIHRpbWVvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzUwKVxuICAgKi9cbiAgcmVhZG9ubHkgdGNwSWRsZVRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhZGRpbmcgYSBjZXJ0aWZpY2F0ZSB0byBhIGxpc3RlbmVyXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgSUxpc3RlbmVyQ2VydGlmaWNhdGUgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElOZXR3b3JrTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzXG4gIGV4dGVuZHMgSUxpc3RlbmVyQ2VydGlmaWNhdGUge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIE5ldHdvcmsgTGlzdGVuZXIgYXR0YWNoZWQgdG8gYSBMb2FkIEJhbGFuY2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0xpc3RlbmVyUHJvcHMgZXh0ZW5kcyBCYXNlTmV0d29ya0xpc3RlbmVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGxvYWQgYmFsYW5jZXIgdG8gYXR0YWNoIHRoaXMgbGlzdGVuZXIgdG9cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbG9va2luZyB1cCBhIG5ldHdvcmsgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0xpc3RlbmVyTG9va3VwT3B0aW9uc1xuICBleHRlbmRzIEJhc2VMaXN0ZW5lckxvb2t1cE9wdGlvbnMge1xuICAvKipcbiAgICogUHJvdG9jb2wgb2YgdGhlIGxpc3RlbmVyIHBvcnRcbiAgICogQGRlZmF1bHQgLSBsaXN0ZW5lciBpcyBub3QgZmlsdGVyZWQgYnkgcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUHJvdG9jb2w/OiBMYlByb3RvY29sO1xufVxuXG4vKipcbiAqIERlZmluZSBhIE5ldHdvcmsgTGlzdGVuZXJcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0xpc3RlbmVyIGV4dGVuZHMgQmFzZUxpc3RlbmVyIGltcGxlbWVudHMgSU5ldHdvcmtMaXN0ZW5lciB7XG4gIC8vIFRPRE86IEFkZCBHcmlkIExvb2t1cCBzdXBwb3J0XG4gIC8vIC8qKlxuICAvLyAgKiBMb29rcyB1cCBhIG5ldHdvcmsgbGlzdGVuZXJcbiAgLy8gICovXG4gIC8vIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cChcbiAgLy8gICBzY29wZTogQ29uc3RydWN0LFxuICAvLyAgIGlkOiBzdHJpbmcsXG4gIC8vICAgb3B0aW9uczogTmV0d29ya0xpc3RlbmVyTG9va3VwT3B0aW9ucyxcbiAgLy8gKTogSU5ldHdvcmtMaXN0ZW5lciB7XG4gIC8vICAgbGV0IGxpc3RlbmVyUHJvdG9jb2w6IExvYWRCYWxhbmNlckxpc3RlbmVyUHJvdG9jb2wgfCB1bmRlZmluZWQ7XG4gIC8vICAgaWYgKG9wdGlvbnMubGlzdGVuZXJQcm90b2NvbCkge1xuICAvLyAgICAgdmFsaWRhdGVOZXR3b3JrUHJvdG9jb2wob3B0aW9ucy5saXN0ZW5lclByb3RvY29sKTtcblxuICAvLyAgICAgc3dpdGNoIChvcHRpb25zLmxpc3RlbmVyUHJvdG9jb2wpIHtcbiAgLy8gICAgICAgY2FzZSBQcm90b2NvbC5UQ1A6XG4gIC8vICAgICAgICAgbGlzdGVuZXJQcm90b2NvbCA9IExvYWRCYWxhbmNlckxpc3RlbmVyUHJvdG9jb2wuVENQO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICBjYXNlIFByb3RvY29sLlVEUDpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5VRFA7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIGNhc2UgUHJvdG9jb2wuVENQX1VEUDpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5UQ1BfVURQO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICBjYXNlIFByb3RvY29sLlRMUzpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5UTFM7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgcHJvcHMgPSBCYXNlTGlzdGVuZXIuX3F1ZXJ5Q29udGV4dFByb3ZpZGVyKHNjb3BlLCB7XG4gIC8vICAgICB1c2VyT3B0aW9uczogb3B0aW9ucyxcbiAgLy8gICAgIGxpc3RlbmVyUHJvdG9jb2w6IGxpc3RlbmVyUHJvdG9jb2wsXG4gIC8vICAgICBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlLk5FVFdPUkssXG4gIC8vICAgfSk7XG5cbiAgLy8gICBjbGFzcyBMb29rZWRVcCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTmV0d29ya0xpc3RlbmVyIHtcbiAgLy8gICAgIHB1YmxpYyBsaXN0ZW5lckFybiA9IHByb3BzLmxpc3RlbmVyQXJuO1xuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiBuZXcgTG9va2VkVXAoc2NvcGUsIGlkKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgbGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmtMaXN0ZW5lckFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmV0d29ya0xpc3RlbmVyQXJuOiBzdHJpbmcsXG4gICk6IElOZXR3b3JrTGlzdGVuZXIge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTmV0d29ya0xpc3RlbmVyIHtcbiAgICAgIHB1YmxpYyBsaXN0ZW5lckFybiA9IG5ldHdvcmtMaXN0ZW5lckFybjtcbiAgICAgIHB1YmxpYyBsaXN0ZW5lck91dHB1dHMgPSB7XG4gICAgICAgIGxpc3RlbmVyQXJuOiBuZXR3b3JrTGlzdGVuZXJBcm4sXG4gICAgICB9O1xuICAgICAgcHVibGljIG91dHB1dHMgPSB7XG4gICAgICAgIGxpc3RlbmVyQXJuOiBuZXR3b3JrTGlzdGVuZXJBcm4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxvYWQgYmFsYW5jZXIgdGhpcyBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG5cbiAgLyoqXG4gICAqIEFSTnMgb2YgY2VydGlmaWNhdGVzIGFkZGVkIHRvIHRoaXMgbGlzdGVuZXJcbiAgICpcbiAgICogVGhlIGZpcnN0IGNlcnRpZmljYXRlIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIHRoZSBwcm90b2NvbCBvZiB0aGUgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2w6IExiUHJvdG9jb2w7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldHdvcmtMaXN0ZW5lclByb3BzKSB7XG4gICAgY29uc3QgY2VydHMgPSBwcm9wcy5jZXJ0aWZpY2F0ZXMgfHwgW107XG4gICAgY29uc3QgcHJvdG8gPVxuICAgICAgcHJvcHMucHJvdG9jb2wgfHwgKGNlcnRzLmxlbmd0aCA+IDAgPyBMYlByb3RvY29sLlRMUyA6IExiUHJvdG9jb2wuVENQKTtcblxuICAgIHZhbGlkYXRlTmV0d29ya1Byb3RvY29sKHByb3RvKTtcblxuICAgIGlmIChcbiAgICAgIHByb3RvID09PSBMYlByb3RvY29sLlRMUyAmJlxuICAgICAgY2VydHMuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIldoZW4gdGhlIHByb3RvY29sIGlzIHNldCB0byBUTFMsIHlvdSBtdXN0IHNwZWNpZnkgY2VydGlmaWNhdGVzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm90byAhPT0gTGJQcm90b2NvbC5UTFMgJiYgY2VydHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlByb3RvY29sIG11c3QgYmUgVExTIHdoZW4gY2VydGlmaWNhdGVzIGhhdmUgYmVlbiBzcGVjaWZpZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3RvICE9PSBMYlByb3RvY29sLlRMUyAmJiBwcm9wcy5hbHBuUG9saWN5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUHJvdG9jb2wgbXVzdCBiZSBUTFMgd2hlbiBhbHBuUG9saWN5IGhhdmUgYmVlbiBzcGVjaWZpZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBsb2FkQmFsYW5jZXJBcm46IHByb3BzLmxvYWRCYWxhbmNlci5sb2FkQmFsYW5jZXJBcm4sXG4gICAgICBwcm90b2NvbDogcHJvdG8sXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgc3NsUG9saWN5OiBwcm9wcy5zc2xQb2xpY3ksXG4gICAgICBjZXJ0aWZpY2F0ZUFybjogTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUFybnMubGVuZ3RoID4gMCA/IHRoaXMuY2VydGlmaWNhdGVBcm5zWzBdIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgICBhbHBuUG9saWN5OiBwcm9wcy5hbHBuUG9saWN5ID8gcHJvcHMuYWxwblBvbGljeSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2VydGlmaWNhdGVBcm5zID0gW107XG4gICAgdGhpcy5sb2FkQmFsYW5jZXIgPSBwcm9wcy5sb2FkQmFsYW5jZXI7XG4gICAgdGhpcy5wcm90b2NvbCA9IHByb3RvO1xuXG4gICAgaWYgKGNlcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkQ2VydGlmaWNhdGVzKFwiRGVmYXVsdENlcnRpZmljYXRlc1wiLCBjZXJ0cyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5kZWZhdWx0QWN0aW9uICYmIHByb3BzLmRlZmF1bHRUYXJnZXRHcm91cHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJTcGVjaWZ5IGF0IG1vc3Qgb25lIG9mICdkZWZhdWx0QWN0aW9uJyBhbmQgJ2RlZmF1bHRUYXJnZXRHcm91cHMnXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0QWN0aW9uKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRBY3Rpb24ocHJvcHMuZGVmYXVsdEFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRUYXJnZXRHcm91cHMpIHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihcbiAgICAgICAgTmV0d29ya0xpc3RlbmVyQWN0aW9uLmZvcndhcmQocHJvcHMuZGVmYXVsdFRhcmdldEdyb3VwcyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLnRjcElkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMudGNwSWRsZVRpbWVvdXQpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnRjcElkbGVUaW1lb3V0LnRvTWlsbGlzZWNvbmRzKCkgPFxuICAgICAgICBEdXJhdGlvbi5zZWNvbmRzKDEpLnRvTWlsbGlzZWNvbmRzKClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFxcYHRjcElkbGVUaW1lb3V0XFxgIG11c3QgYmUgYmV0d2VlbiA2MCBhbmQgNjAwMCBzZWNvbmRzLCBnb3QgJHtwcm9wcy50Y3BJZGxlVGltZW91dC50b01pbGxpc2Vjb25kcygpfSBtaWxsaXNlY29uZHMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGNwSWRsZVRpbWVvdXRTZWNvbmRzID0gcHJvcHMudGNwSWRsZVRpbWVvdXQudG9TZWNvbmRzKCk7XG5cbiAgICAgIGlmIChwcm90byA9PT0gTGJQcm90b2NvbC5VRFApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiYHRjcElkbGVUaW1lb3V0YCBjYW5ub3QgYmUgc2V0IHdoZW4gYHByb3RvY29sYCBpcyBgUHJvdG9jb2wuVURQYC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRjcElkbGVUaW1lb3V0U2Vjb25kcyA8IDYwIHx8IHRjcElkbGVUaW1lb3V0U2Vjb25kcyA+IDYwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBcXGB0Y3BJZGxlVGltZW91dFxcYCBtdXN0IGJlIGJldHdlZW4gNjAgYW5kIDYwMDAgc2Vjb25kcywgZ290ICR7dGNwSWRsZVRpbWVvdXRTZWNvbmRzfSBzZWNvbmRzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInRjcC5pZGxlX3RpbWVvdXQuc2Vjb25kc1wiLFxuICAgICAgICB0Y3BJZGxlVGltZW91dFNlY29uZHMudG9TdHJpbmcoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8gdGhpcyBsaXN0ZW5lci5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGZpcnN0IGNlcnRpZmljYXRlLCB0aGlzIGNyZWF0ZXMgTmV0d29ya0xpc3RlbmVyQ2VydGlmaWNhdGVzXG4gICAqIHJlc291cmNlcyBzaW5jZSBjbG91ZGZvcm1hdGlvbiByZXF1aXJlcyB0aGUgY2VydGlmaWNhdGVzIGFycmF5IG9uIHRoZVxuICAgKiBsaXN0ZW5lciByZXNvdXJjZSB0byBoYXZlIGEgbGVuZ3RoIG9mIDEuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2VydGlmaWNhdGVzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY2VydGlmaWNhdGVzOiBJTGlzdGVuZXJDZXJ0aWZpY2F0ZVtdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsQ2VydHMgPSBbLi4uY2VydGlmaWNhdGVzXTtcbiAgICBpZiAodGhpcy5jZXJ0aWZpY2F0ZUFybnMubGVuZ3RoID09PSAwICYmIGFkZGl0aW9uYWxDZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IGFkZGl0aW9uYWxDZXJ0cy5zcGxpY2UoMCwgMSlbMF07XG4gICAgICB0aGlzLmNlcnRpZmljYXRlQXJucy5wdXNoKGZpcnN0LmNlcnRpZmljYXRlQXJuKTtcbiAgICB9XG4gICAgLy8gT25seSBvbmUgY2VydGlmaWNhdGUgY2FuIGJlIHNwZWNpZmllZCBwZXIgcmVzb3VyY2UsIGV2ZW4gdGhvdWdoXG4gICAgLy8gYGNlcnRpZmljYXRlc2AgaXMgb2YgdHlwZSBBcnJheVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkaXRpb25hbENlcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXcgTmV0d29ya0xpc3RlbmVyQ2VydGlmaWNhdGUodGhpcywgYCR7aWR9JHtpICsgMX1gLCB7XG4gICAgICAgIGxpc3RlbmVyOiB0aGlzLFxuICAgICAgICBjZXJ0aWZpY2F0ZXM6IFthZGRpdGlvbmFsQ2VydHNbaV1dLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgZ2l2ZW4gdGFyZ2V0IGdyb3Vwcy5cbiAgICpcbiAgICogQWxsIHRhcmdldCBncm91cHMgd2lsbCBiZSBsb2FkIGJhbGFuY2VkIHRvIHdpdGggZXF1YWwgd2VpZ2h0IGFuZCB3aXRob3V0XG4gICAqIHN0aWNraW5lc3MuIEZvciBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHRoYW4gdGhhdCwgdXNlIGBhZGRBY3Rpb24oKWAuXG4gICAqL1xuICBwdWJsaWMgYWRkVGFyZ2V0R3JvdXBzKFxuICAgIF9pZDogc3RyaW5nLFxuICAgIC4uLnRhcmdldEdyb3VwczogSU5ldHdvcmtUYXJnZXRHcm91cFtdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihOZXR3b3JrTGlzdGVuZXJBY3Rpb24uZm9yd2FyZCh0YXJnZXRHcm91cHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBnaXZlbiBBY3Rpb24gb24gaW5jb21pbmcgcmVxdWVzdHNcbiAgICpcbiAgICogVGhpcyBhbGxvd3MgZnVsbCBjb250cm9sIG9mIHRoZSBkZWZhdWx0IEFjdGlvbiBvZiB0aGUgbG9hZCBiYWxhbmNlcixcbiAgICogaW5jbHVkaW5nIHdlaWdodGVkIGZvcndhcmRpbmcuIFNlZSB0aGUgYE5ldHdvcmtMaXN0ZW5lckFjdGlvbmAgY2xhc3MgZm9yXG4gICAqIGFsbCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGFkZEFjdGlvbihfaWQ6IHN0cmluZywgcHJvcHM6IEFkZE5ldHdvcmtBY3Rpb25Qcm9wcyk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihwcm9wcy5hY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgZ2l2ZW4gbG9hZCBiYWxhbmNpbmcgdGFyZ2V0cy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW1wbGljaXRseSBjcmVhdGVzIGEgTmV0d29ya1RhcmdldEdyb3VwIGZvciB0aGUgdGFyZ2V0c1xuICAgKiBpbnZvbHZlZCwgYW5kIGEgJ2ZvcndhcmQnIGFjdGlvbiB0byByb3V0ZSB0cmFmZmljIHRvIHRoZSBnaXZlbiBUYXJnZXRHcm91cC5cbiAgICpcbiAgICogSWYgeW91IHdhbnQgbW9yZSBjb250cm9sIG92ZXIgdGhlIHByZWNpc2Ugc2V0dXAsIGNyZWF0ZSB0aGUgVGFyZ2V0R3JvdXBcbiAgICogYW5kIHVzZSBgYWRkQWN0aW9uYCB5b3Vyc2VsZi5cbiAgICpcbiAgICogSXQncyBwb3NzaWJsZSB0byBhZGQgY29uZGl0aW9ucyB0byB0aGUgdGFyZ2V0cyBhZGRlZCBpbiB0aGlzIHdheS4gQXQgbGVhc3RcbiAgICogb25lIHNldCBvZiB0YXJnZXRzIG11c3QgYmUgYWRkZWQgd2l0aG91dCBjb25kaXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhZGRUYXJnZXRzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZE5ldHdvcmtUYXJnZXRzUHJvcHMsXG4gICk6IE5ldHdvcmtUYXJnZXRHcm91cCB7XG4gICAgaWYgKCF0aGlzLmxvYWRCYWxhbmNlci52cGMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2FuIG9ubHkgY2FsbCBhZGRUYXJnZXRzKCkgd2hlbiB1c2luZyBhIGNvbnN0cnVjdGVkIExvYWQgQmFsYW5jZXIgb3IgaW1wb3J0ZWQgTG9hZCBCYWxhbmNlciB3aXRoIHNwZWNpZmllZCBWUEM7IGNvbnN0cnVjdCBhIG5ldyBUYXJnZXRHcm91cCBhbmQgdXNlIGFkZFRhcmdldEdyb3VwXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gbmV3IE5ldHdvcmtUYXJnZXRHcm91cCh0aGlzLCBpZCArIFwiR3JvdXBcIiwge1xuICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSxcbiAgICAgIGhlYWx0aENoZWNrOiBwcm9wcy5oZWFsdGhDaGVjayxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBwcm90b2NvbDogcHJvcHMucHJvdG9jb2wgPz8gdGhpcy5wcm90b2NvbCxcbiAgICAgIHByb3h5UHJvdG9jb2xWMjogcHJvcHMucHJveHlQcm90b2NvbFYyLFxuICAgICAgcHJlc2VydmVDbGllbnRJcDogcHJvcHMucHJlc2VydmVDbGllbnRJcCxcbiAgICAgIHRhcmdldEdyb3VwTmFtZTogcHJvcHMudGFyZ2V0R3JvdXBOYW1lLFxuICAgICAgdGFyZ2V0czogcHJvcHMudGFyZ2V0cyxcbiAgICAgIHZwYzogdGhpcy5sb2FkQmFsYW5jZXIudnBjLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXJnZXRHcm91cHMoaWQsIGdyb3VwKTtcblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZvciBfc2V0RGVmYXVsdEFjdGlvbiB3aGljaCBkb2VzIGEgdHlwZS1zYWZlIGJpbmRcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdEFjdGlvbihhY3Rpb246IE5ldHdvcmtMaXN0ZW5lckFjdGlvbikge1xuICAgIGFjdGlvbi5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIHRoaXMuX3NldERlZmF1bHRBY3Rpb24oYWN0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gcmVmZXJlbmNlIGFuIGV4aXN0aW5nIGxpc3RlbmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5ldHdvcmtMaXN0ZW5lciBleHRlbmRzIElMaXN0ZW5lciB7fVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIG5ldyBhY3Rpb24gdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE5ldHdvcmtBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdG8gcGVyZm9ybVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBOZXR3b3JrTGlzdGVuZXJBY3Rpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIG5ldyBuZXR3b3JrIHRhcmdldHMgdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE5ldHdvcmtUYXJnZXRzUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBvcnQgb24gd2hpY2ggdGhlIHRhcmdldCByZWNlaXZlcyB0cmFmZmljLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZXRlcm1pbmVkIGZyb20gcHJvdG9jb2wgaWYga25vd25cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUHJvdG9jb2wgZm9yIHRhcmdldCBncm91cCwgZXhwZWN0cyBUQ1AsIFRMUywgVURQLCBvciBUQ1BfVURQLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRzIHRoZSBwcm90b2NvbCBvZiB0aGUgbGlzdGVuZXJcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogTGJQcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIHRhcmdldHMgdG8gYWRkIHRvIHRoaXMgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBDYW4gYmUgYEluc3RhbmNlYCwgYElQQWRkcmVzc2AsIG9yIGFueSBzZWxmLXJlZ2lzdGVyaW5nIGxvYWQgYmFsYW5jaW5nXG4gICAqIHRhcmdldC4gSWYgeW91IHVzZSBlaXRoZXIgYEluc3RhbmNlYCBvciBgSVBBZGRyZXNzYCBhcyB0YXJnZXRzLCBhbGxcbiAgICogdGFyZ2V0IG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldHM/OiBJTmV0d29ya0xvYWRCYWxhbmNlclRhcmdldFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIHJlZ2lvbiBwZXIgYWNjb3VudCwgY2FuIGhhdmUgYSBtYXhpbXVtIG9mXG4gICAqIDMyIGNoYXJhY3RlcnMsIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGh5cGhlbnMsIGFuZFxuICAgKiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0b21hdGljYWxseSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIGZvciBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIHdhaXQgYmVmb3JlIGRlcmVnaXN0ZXJpbmcgYSB0YXJnZXQuXG4gICAqXG4gICAqIFRoZSByYW5nZSBpcyAwLTM2MDAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBQcm94eSBQcm90b2NvbCB2ZXJzaW9uIDIgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5UHJvdG9jb2xWMj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNsaWVudCBJUCBwcmVzZXJ2YXRpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgaWYgdGhlIHRhcmdldCBncm91cCB0eXBlIGlzIElQIGFkZHJlc3MgYW5kIHRoZVxuICAgKiB0YXJnZXQgZ3JvdXAgcHJvdG9jb2wgaXMgVENQIG9yIFRMUy4gT3RoZXJ3aXNlLCB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlc2VydmVDbGllbnRJcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHkgaW4gdGhpcyBjb25maWd1cmF0aW9uIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC5odG1sI2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLXByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrPzogSGVhbHRoQ2hlY2s7XG59XG4iXX0=
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { BaseNetworkListenerProps, NetworkListener } from "./network-listener";
|
|
3
|
+
import * as cloudwatch from "../../cloudwatch";
|
|
4
|
+
import { Connections, IConnectable } from "../connections";
|
|
5
|
+
import { BaseLoadBalancer, BaseLoadBalancerLookupOptions, BaseLoadBalancerProps, ILoadBalancerV2 } from "../lb-shared/base-load-balancer";
|
|
6
|
+
import { IpAddressType } from "../lb-shared/enums";
|
|
7
|
+
import { ISecurityGroup } from "../security-group";
|
|
8
|
+
import { IVpc } from "../vpc";
|
|
9
|
+
import { IVpcEndpointServiceLoadBalancer } from "../vpc-endpoint-service";
|
|
10
|
+
/**
|
|
11
|
+
* Indicates how traffic is distributed among the load balancer Availability Zones.
|
|
12
|
+
*
|
|
13
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
|
|
14
|
+
*/
|
|
15
|
+
export declare enum ClientRoutingPolicy {
|
|
16
|
+
/**
|
|
17
|
+
* 100 percent zonal affinity
|
|
18
|
+
*/
|
|
19
|
+
AVAILABILITY_ZONE_AFFINITY = "availability_zone_affinity",
|
|
20
|
+
/**
|
|
21
|
+
* 85 percent zonal affinity
|
|
22
|
+
*/
|
|
23
|
+
PARTIAL_AVAILABILITY_ZONE_AFFINITY = "partial_availability_zone_affinity",
|
|
24
|
+
/**
|
|
25
|
+
* No zonal affinity
|
|
26
|
+
*/
|
|
27
|
+
ANY_AVAILABILITY_ZONE = "any_availability_zone"
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Properties for a network load balancer
|
|
31
|
+
*/
|
|
32
|
+
export interface NetworkLoadBalancerProps extends BaseLoadBalancerProps {
|
|
33
|
+
/**
|
|
34
|
+
* Security groups to associate with this load balancer
|
|
35
|
+
*
|
|
36
|
+
* @default - No security groups associated with the load balancer.
|
|
37
|
+
*/
|
|
38
|
+
readonly securityGroups?: ISecurityGroup[];
|
|
39
|
+
/**
|
|
40
|
+
* The type of IP addresses to use
|
|
41
|
+
*
|
|
42
|
+
* If you want to add a UDP or TCP_UDP listener to the load balancer,
|
|
43
|
+
* you must choose IPv4.
|
|
44
|
+
*
|
|
45
|
+
* @default IpAddressType.IPV4
|
|
46
|
+
*/
|
|
47
|
+
readonly ipAddressType?: IpAddressType;
|
|
48
|
+
/**
|
|
49
|
+
* The AZ affinity routing policy
|
|
50
|
+
*
|
|
51
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
|
|
52
|
+
*
|
|
53
|
+
* @default - AZ affinity is disabled.
|
|
54
|
+
*/
|
|
55
|
+
readonly clientRoutingPolicy?: ClientRoutingPolicy;
|
|
56
|
+
/**
|
|
57
|
+
* Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink.
|
|
58
|
+
*
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Indicates whether zonal shift is enabled
|
|
64
|
+
*
|
|
65
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/zonal-shift.html
|
|
66
|
+
*
|
|
67
|
+
* @default false
|
|
68
|
+
*/
|
|
69
|
+
readonly zonalShift?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Properties to reference an existing load balancer
|
|
73
|
+
*/
|
|
74
|
+
export interface NetworkLoadBalancerAttributes {
|
|
75
|
+
/**
|
|
76
|
+
* ARN of the load balancer
|
|
77
|
+
*/
|
|
78
|
+
readonly loadBalancerArn: string;
|
|
79
|
+
/**
|
|
80
|
+
* The canonical hosted zone ID of this load balancer
|
|
81
|
+
*
|
|
82
|
+
* @default - Token via data source from loadBalancerArn.
|
|
83
|
+
*/
|
|
84
|
+
readonly loadBalancerCanonicalHostedZoneId?: string;
|
|
85
|
+
/**
|
|
86
|
+
* The DNS name of this load balancer
|
|
87
|
+
*
|
|
88
|
+
* @default - Token via data source from loadBalancerArn.
|
|
89
|
+
*/
|
|
90
|
+
readonly loadBalancerDnsName?: string;
|
|
91
|
+
/**
|
|
92
|
+
* The VPC to associate with the load balancer.
|
|
93
|
+
*
|
|
94
|
+
* @default - When not provided, listeners cannot be created on imported load
|
|
95
|
+
* balancers.
|
|
96
|
+
*/
|
|
97
|
+
readonly vpc?: IVpc;
|
|
98
|
+
/**
|
|
99
|
+
* Security groups to associate with this load balancer
|
|
100
|
+
*
|
|
101
|
+
* @default - No security groups associated with the load balancer.
|
|
102
|
+
*/
|
|
103
|
+
readonly loadBalancerSecurityGroups?: string[];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Options for looking up an NetworkLoadBalancer
|
|
107
|
+
*/
|
|
108
|
+
export interface NetworkLoadBalancerLookupOptions extends BaseLoadBalancerLookupOptions {
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Define a new network load balancer
|
|
112
|
+
*
|
|
113
|
+
* @resource AWS::ElasticLoadBalancingV2::LoadBalancer
|
|
114
|
+
*/
|
|
115
|
+
export declare class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoadBalancer {
|
|
116
|
+
static fromNetworkLoadBalancerAttributes(scope: Construct, id: string, attrs: NetworkLoadBalancerAttributes): INetworkLoadBalancer;
|
|
117
|
+
readonly metrics: INetworkLoadBalancerMetrics;
|
|
118
|
+
readonly ipAddressType?: IpAddressType;
|
|
119
|
+
readonly connections: Connections;
|
|
120
|
+
private readonly isSecurityGroupsPropertyDefined;
|
|
121
|
+
private readonly _enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?;
|
|
122
|
+
/**
|
|
123
|
+
* After the implementation of `IConnectable` (see https://github.com/aws/aws-cdk/pull/28494), the default
|
|
124
|
+
* value for `securityGroups` is set by the `Connections` constructor to an empty array.
|
|
125
|
+
* To keep backward compatibility (`securityGroups` is `undefined` if the related property is not specified)
|
|
126
|
+
* a getter has been added.
|
|
127
|
+
*/
|
|
128
|
+
get securityGroups(): string[] | undefined;
|
|
129
|
+
constructor(scope: Construct, id: string, props: NetworkLoadBalancerProps);
|
|
130
|
+
get enforceSecurityGroupInboundRulesOnPrivateLinkTraffic(): string | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Add a listener to this load balancer
|
|
133
|
+
*
|
|
134
|
+
* @returns The newly created listener
|
|
135
|
+
*/
|
|
136
|
+
addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
|
|
137
|
+
/**
|
|
138
|
+
* Add a security group to this load balancer
|
|
139
|
+
*/
|
|
140
|
+
addSecurityGroup(securityGroup: ISecurityGroup): void;
|
|
141
|
+
/**
|
|
142
|
+
* Return the given named metric for this Network Load Balancer
|
|
143
|
+
*
|
|
144
|
+
* @default Average over 5 minutes
|
|
145
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.custom`` instead
|
|
146
|
+
*/
|
|
147
|
+
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
148
|
+
/**
|
|
149
|
+
* The total number of concurrent TCP flows (or connections) from clients to targets.
|
|
150
|
+
*
|
|
151
|
+
* This metric includes connections in the SYN_SENT and ESTABLISHED states.
|
|
152
|
+
* TCP connections are not terminated at the load balancer, so a client
|
|
153
|
+
* opening a TCP connection to a target counts as a single flow.
|
|
154
|
+
*
|
|
155
|
+
* @default Average over 5 minutes
|
|
156
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
|
|
157
|
+
*/
|
|
158
|
+
metricActiveFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
159
|
+
/**
|
|
160
|
+
* The number of load balancer capacity units (LCU) used by your load balancer.
|
|
161
|
+
*
|
|
162
|
+
* @default Sum over 5 minutes
|
|
163
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
|
|
164
|
+
*/
|
|
165
|
+
metricConsumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
166
|
+
/**
|
|
167
|
+
* The number of targets that are considered healthy.
|
|
168
|
+
*
|
|
169
|
+
* @default Average over 5 minutes
|
|
170
|
+
* @deprecated use ``NetworkTargetGroup.metricHealthyHostCount`` instead
|
|
171
|
+
*/
|
|
172
|
+
metricHealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
173
|
+
/**
|
|
174
|
+
* The number of targets that are considered unhealthy.
|
|
175
|
+
*
|
|
176
|
+
* @default Average over 5 minutes
|
|
177
|
+
* @deprecated use ``NetworkTargetGroup.metricUnHealthyHostCount`` instead
|
|
178
|
+
*/
|
|
179
|
+
metricUnHealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
180
|
+
/**
|
|
181
|
+
* The total number of new TCP flows (or connections) established from clients to targets in the time period.
|
|
182
|
+
*
|
|
183
|
+
* @default Sum over 5 minutes
|
|
184
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.newFlowCount`` instead
|
|
185
|
+
*/
|
|
186
|
+
metricNewFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
187
|
+
/**
|
|
188
|
+
* The total number of bytes processed by the load balancer, including TCP/IP headers.
|
|
189
|
+
*
|
|
190
|
+
* @default Sum over 5 minutes
|
|
191
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.processedBytes`` instead
|
|
192
|
+
*/
|
|
193
|
+
metricProcessedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
194
|
+
/**
|
|
195
|
+
* The total number of reset (RST) packets sent from a client to a target.
|
|
196
|
+
*
|
|
197
|
+
* These resets are generated by the client and forwarded by the load balancer.
|
|
198
|
+
*
|
|
199
|
+
* @default Sum over 5 minutes
|
|
200
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpClientResetCount`` instead
|
|
201
|
+
*/
|
|
202
|
+
metricTcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
203
|
+
/**
|
|
204
|
+
* The total number of reset (RST) packets generated by the load balancer.
|
|
205
|
+
*
|
|
206
|
+
* @default Sum over 5 minutes
|
|
207
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpElbResetCount`` instead
|
|
208
|
+
*/
|
|
209
|
+
metricTcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
210
|
+
/**
|
|
211
|
+
* The total number of reset (RST) packets sent from a target to a client.
|
|
212
|
+
*
|
|
213
|
+
* These resets are generated by the target and forwarded by the load balancer.
|
|
214
|
+
*
|
|
215
|
+
* @default Sum over 5 minutes
|
|
216
|
+
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpTargetResetCount`` instead
|
|
217
|
+
*/
|
|
218
|
+
metricTcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Contains all metrics for a Network Load Balancer.
|
|
222
|
+
*/
|
|
223
|
+
export interface INetworkLoadBalancerMetrics {
|
|
224
|
+
/**
|
|
225
|
+
* Return the given named metric for this Network Load Balancer
|
|
226
|
+
*
|
|
227
|
+
* @default Average over 5 minutes
|
|
228
|
+
*/
|
|
229
|
+
custom(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
230
|
+
/**
|
|
231
|
+
* The total number of concurrent TCP flows (or connections) from clients to targets.
|
|
232
|
+
*
|
|
233
|
+
* This metric includes connections in the SYN_SENT and ESTABLISHED states.
|
|
234
|
+
* TCP connections are not terminated at the load balancer, so a client
|
|
235
|
+
* opening a TCP connection to a target counts as a single flow.
|
|
236
|
+
*
|
|
237
|
+
* @default Average over 5 minutes
|
|
238
|
+
*/
|
|
239
|
+
activeFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
240
|
+
/**
|
|
241
|
+
* The number of load balancer capacity units (LCU) used by your load balancer.
|
|
242
|
+
*
|
|
243
|
+
* @default Sum over 5 minutes
|
|
244
|
+
*/
|
|
245
|
+
consumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
246
|
+
/**
|
|
247
|
+
* The total number of new TCP flows (or connections) established from clients to targets in the time period.
|
|
248
|
+
*
|
|
249
|
+
* @default Sum over 5 minutes
|
|
250
|
+
*/
|
|
251
|
+
newFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
252
|
+
/**
|
|
253
|
+
* The total number of bytes processed by the load balancer, including TCP/IP headers.
|
|
254
|
+
*
|
|
255
|
+
* @default Sum over 5 minutes
|
|
256
|
+
*/
|
|
257
|
+
processedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
258
|
+
/**
|
|
259
|
+
* The total number of reset (RST) packets sent from a client to a target.
|
|
260
|
+
*
|
|
261
|
+
* These resets are generated by the client and forwarded by the load balancer.
|
|
262
|
+
*
|
|
263
|
+
* @default Sum over 5 minutes
|
|
264
|
+
*/
|
|
265
|
+
tcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
266
|
+
/**
|
|
267
|
+
* The total number of reset (RST) packets generated by the load balancer.
|
|
268
|
+
*
|
|
269
|
+
* @default Sum over 5 minutes
|
|
270
|
+
*/
|
|
271
|
+
tcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
272
|
+
/**
|
|
273
|
+
* The total number of reset (RST) packets sent from a target to a client.
|
|
274
|
+
*
|
|
275
|
+
* These resets are generated by the target and forwarded by the load balancer.
|
|
276
|
+
*
|
|
277
|
+
* @default Sum over 5 minutes
|
|
278
|
+
*/
|
|
279
|
+
tcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* A network load balancer
|
|
283
|
+
*/
|
|
284
|
+
export interface INetworkLoadBalancer extends ILoadBalancerV2, IVpcEndpointServiceLoadBalancer, IConnectable {
|
|
285
|
+
/**
|
|
286
|
+
* The VPC this load balancer has been created in (if available)
|
|
287
|
+
*/
|
|
288
|
+
readonly vpc?: IVpc;
|
|
289
|
+
/**
|
|
290
|
+
* All metrics available for this load balancer
|
|
291
|
+
*/
|
|
292
|
+
readonly metrics: INetworkLoadBalancerMetrics;
|
|
293
|
+
/**
|
|
294
|
+
* Security groups associated with this load balancer
|
|
295
|
+
*/
|
|
296
|
+
readonly securityGroups?: string[];
|
|
297
|
+
/**
|
|
298
|
+
* The type of IP addresses to use
|
|
299
|
+
*
|
|
300
|
+
* @default IpAddressType.IPV4
|
|
301
|
+
*/
|
|
302
|
+
readonly ipAddressType?: IpAddressType;
|
|
303
|
+
/**
|
|
304
|
+
* Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink
|
|
305
|
+
*
|
|
306
|
+
* @default on
|
|
307
|
+
*/
|
|
308
|
+
readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: string;
|
|
309
|
+
/**
|
|
310
|
+
* Add a listener to this load balancer
|
|
311
|
+
*
|
|
312
|
+
* @returns The newly created listener
|
|
313
|
+
*/
|
|
314
|
+
addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
|
|
315
|
+
}
|