Files
2026-05-06 18:55:16 -05:00

336 lines
12 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}