336 lines
12 KiB
TypeScript
336 lines
12 KiB
TypeScript
import type { Construct } from 'constructs';
|
||
import type { BaseNetworkListenerProps } from './network-listener';
|
||
import { NetworkListener } from './network-listener';
|
||
import * as cloudwatch from '../../../aws-cloudwatch';
|
||
import * as ec2 from '../../../aws-ec2';
|
||
import type { BaseLoadBalancerLookupOptions, BaseLoadBalancerProps, ILoadBalancerV2, SubnetMapping } from '../shared/base-load-balancer';
|
||
import { BaseLoadBalancer } from '../shared/base-load-balancer';
|
||
import { IpAddressType } from '../shared/enums';
|
||
/**
|
||
* Indicates how traffic is distributed among the load balancer Availability Zones.
|
||
*
|
||
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
|
||
*/
|
||
export declare enum ClientRoutingPolicy {
|
||
/**
|
||
* 100 percent zonal affinity
|
||
*/
|
||
AVAILABILITY_ZONE_AFFINITY = "availability_zone_affinity",
|
||
/**
|
||
* 85 percent zonal affinity
|
||
*/
|
||
PARTIAL_AVAILABILITY_ZONE_AFFINITY = "partial_availability_zone_affinity",
|
||
/**
|
||
* No zonal affinity
|
||
*/
|
||
ANY_AVAILABILITY_ZONE = "any_availability_zone"
|
||
}
|
||
/**
|
||
* Properties for a network load balancer
|
||
*/
|
||
export interface NetworkLoadBalancerProps extends BaseLoadBalancerProps {
|
||
/**
|
||
* Security groups to associate with this load balancer
|
||
*
|
||
* @default - No security groups associated with the load balancer.
|
||
*/
|
||
readonly securityGroups?: ec2.ISecurityGroup[];
|
||
/**
|
||
* The type of IP addresses to use
|
||
*
|
||
* If you want to add a UDP or TCP_UDP listener to the load balancer,
|
||
* you must choose IPv4.
|
||
*
|
||
* @default IpAddressType.IPV4
|
||
*/
|
||
readonly ipAddressType?: IpAddressType;
|
||
/**
|
||
* The AZ affinity routing policy
|
||
*
|
||
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
|
||
*
|
||
* @default - AZ affinity is disabled.
|
||
*/
|
||
readonly clientRoutingPolicy?: ClientRoutingPolicy;
|
||
/**
|
||
* Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink.
|
||
*
|
||
* @default true
|
||
*/
|
||
readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: boolean;
|
||
/**
|
||
* Indicates whether zonal shift is enabled
|
||
*
|
||
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/zonal-shift.html
|
||
*
|
||
* @default false
|
||
*/
|
||
readonly zonalShift?: boolean;
|
||
/**
|
||
* Indicates whether to use an IPv6 prefix from each subnet for source NAT.
|
||
*
|
||
* The IP address type must be IpAddressType.DUALSTACK.
|
||
*
|
||
* @default undefined - NLB default behavior is false
|
||
*/
|
||
readonly enablePrefixForIpv6SourceNat?: boolean;
|
||
/**
|
||
* Subnet information for the load balancer.
|
||
*
|
||
* @default undefined - The VPC default strategy for subnets is used
|
||
*/
|
||
readonly subnetMappings?: SubnetMapping[];
|
||
/**
|
||
* Create a Network Load Balancer without security groups.
|
||
*
|
||
* When true, creates an NLB that cannot have security groups attached.
|
||
* This is useful when you need to create a traditional NLB without security group associations.
|
||
*
|
||
* This property only takes effect when the feature flag
|
||
* `@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault` is enabled.
|
||
*
|
||
* @default false
|
||
*/
|
||
readonly disableSecurityGroups?: boolean;
|
||
}
|
||
/**
|
||
* Properties to reference an existing load balancer
|
||
*/
|
||
export interface NetworkLoadBalancerAttributes {
|
||
/**
|
||
* ARN of the load balancer
|
||
*/
|
||
readonly loadBalancerArn: string;
|
||
/**
|
||
* The canonical hosted zone ID of this load balancer
|
||
*
|
||
* @default - When not provided, LB cannot be used as Route53 Alias target.
|
||
*/
|
||
readonly loadBalancerCanonicalHostedZoneId?: string;
|
||
/**
|
||
* The DNS name of this load balancer
|
||
*
|
||
* @default - When not provided, LB cannot be used as Route53 Alias target.
|
||
*/
|
||
readonly loadBalancerDnsName?: string;
|
||
/**
|
||
* The VPC to associate with the load balancer.
|
||
*
|
||
* @default - When not provided, listeners cannot be created on imported load
|
||
* balancers.
|
||
*/
|
||
readonly vpc?: ec2.IVpc;
|
||
/**
|
||
* Security groups to associate with this load balancer
|
||
*
|
||
* @default - No security groups associated with the load balancer.
|
||
*/
|
||
readonly loadBalancerSecurityGroups?: string[];
|
||
}
|
||
/**
|
||
* Options for looking up an NetworkLoadBalancer
|
||
*/
|
||
export interface NetworkLoadBalancerLookupOptions extends BaseLoadBalancerLookupOptions {
|
||
}
|
||
/**
|
||
* Define a new network load balancer
|
||
*
|
||
* @resource AWS::ElasticLoadBalancingV2::LoadBalancer
|
||
*/
|
||
export declare class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoadBalancer {
|
||
/**
|
||
* Uniquely identifies this class.
|
||
*/
|
||
static readonly PROPERTY_INJECTION_ID: string;
|
||
/**
|
||
* Looks up the network load balancer.
|
||
*/
|
||
static fromLookup(scope: Construct, id: string, options: NetworkLoadBalancerLookupOptions): INetworkLoadBalancer;
|
||
static fromNetworkLoadBalancerAttributes(scope: Construct, id: string, attrs: NetworkLoadBalancerAttributes): INetworkLoadBalancer;
|
||
readonly metrics: INetworkLoadBalancerMetrics;
|
||
readonly ipAddressType?: IpAddressType;
|
||
readonly connections: ec2.Connections;
|
||
private readonly isSecurityGroupsPropertyDefined;
|
||
private readonly _enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?;
|
||
private enablePrefixForIpv6SourceNat?;
|
||
/**
|
||
* After the implementation of `IConnectable` (see https://github.com/aws/aws-cdk/pull/28494), the default
|
||
* value for `securityGroups` is set by the `ec2.Connections` constructor to an empty array.
|
||
* To keep backward compatibility (`securityGroups` is `undefined` if the related property is not specified)
|
||
* a getter has been added.
|
||
*/
|
||
get securityGroups(): string[] | undefined;
|
||
constructor(scope: Construct, id: string, props: NetworkLoadBalancerProps);
|
||
get enforceSecurityGroupInboundRulesOnPrivateLinkTraffic(): string | undefined;
|
||
/**
|
||
* Add a listener to this load balancer
|
||
*
|
||
* @returns The newly created listener
|
||
*/
|
||
addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
|
||
/**
|
||
* Add a security group to this load balancer
|
||
*/
|
||
addSecurityGroup(securityGroup: ec2.ISecurityGroup): void;
|
||
/**
|
||
* Return the given named metric for this Network Load Balancer
|
||
*
|
||
* @default Average over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.custom`` instead
|
||
*/
|
||
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of concurrent TCP flows (or connections) from clients to targets.
|
||
*
|
||
* This metric includes connections in the SYN_SENT and ESTABLISHED states.
|
||
* TCP connections are not terminated at the load balancer, so a client
|
||
* opening a TCP connection to a target counts as a single flow.
|
||
*
|
||
* @default Average over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
|
||
*/
|
||
metricActiveFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The number of load balancer capacity units (LCU) used by your load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
|
||
*/
|
||
metricConsumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of new TCP flows (or connections) established from clients to targets in the time period.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.newFlowCount`` instead
|
||
*/
|
||
metricNewFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of bytes processed by the load balancer, including TCP/IP headers.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.processedBytes`` instead
|
||
*/
|
||
metricProcessedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets sent from a client to a target.
|
||
*
|
||
* These resets are generated by the client and forwarded by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpClientResetCount`` instead
|
||
*/
|
||
metricTcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets generated by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpElbResetCount`` instead
|
||
*/
|
||
metricTcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets sent from a target to a client.
|
||
*
|
||
* These resets are generated by the target and forwarded by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
* @deprecated Use ``NetworkLoadBalancer.metrics.tcpTargetResetCount`` instead
|
||
*/
|
||
metricTcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
}
|
||
/**
|
||
* Contains all metrics for a Network Load Balancer.
|
||
*/
|
||
export interface INetworkLoadBalancerMetrics {
|
||
/**
|
||
* Return the given named metric for this Network Load Balancer
|
||
*
|
||
* @default Average over 5 minutes
|
||
*/
|
||
custom(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of concurrent TCP flows (or connections) from clients to targets.
|
||
*
|
||
* This metric includes connections in the SYN_SENT and ESTABLISHED states.
|
||
* TCP connections are not terminated at the load balancer, so a client
|
||
* opening a TCP connection to a target counts as a single flow.
|
||
*
|
||
* @default Average over 5 minutes
|
||
*/
|
||
activeFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The number of load balancer capacity units (LCU) used by your load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
consumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of new TCP flows (or connections) established from clients to targets in the time period.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
newFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of bytes processed by the load balancer, including TCP/IP headers.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
processedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets sent from a client to a target.
|
||
*
|
||
* These resets are generated by the client and forwarded by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
tcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets generated by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
tcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
/**
|
||
* The total number of reset (RST) packets sent from a target to a client.
|
||
*
|
||
* These resets are generated by the target and forwarded by the load balancer.
|
||
*
|
||
* @default Sum over 5 minutes
|
||
*/
|
||
tcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
||
}
|
||
/**
|
||
* A network load balancer
|
||
*/
|
||
export interface INetworkLoadBalancer extends ILoadBalancerV2, ec2.IVpcEndpointServiceLoadBalancer, ec2.IConnectable {
|
||
/**
|
||
* The VPC this load balancer has been created in (if available)
|
||
*/
|
||
readonly vpc?: ec2.IVpc;
|
||
/**
|
||
* All metrics available for this load balancer
|
||
*/
|
||
readonly metrics: INetworkLoadBalancerMetrics;
|
||
/**
|
||
* Security groups associated with this load balancer
|
||
*/
|
||
readonly securityGroups?: string[];
|
||
/**
|
||
* The type of IP addresses to use
|
||
*
|
||
* @default IpAddressType.IPV4
|
||
*/
|
||
readonly ipAddressType?: IpAddressType;
|
||
/**
|
||
* Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink
|
||
*
|
||
* @default on
|
||
*/
|
||
readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: string;
|
||
/**
|
||
* Add a listener to this load balancer
|
||
*
|
||
* @returns The newly created listener
|
||
*/
|
||
addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
|
||
}
|