366 lines
12 KiB
TypeScript
366 lines
12 KiB
TypeScript
import type { IConstruct, IDependable } from 'constructs';
|
|
import { Construct, DependencyGroup } from 'constructs';
|
|
import type { Protocol } from './enums';
|
|
import { TargetType } from './enums';
|
|
import type * as ec2 from '../../../aws-ec2';
|
|
import * as cdk from '../../../core';
|
|
import type { aws_elasticloadbalancingv2 } from '../../../interfaces';
|
|
/**
|
|
* The IP address type of targets registered with a target group
|
|
*/
|
|
export declare enum TargetGroupIpAddressType {
|
|
/**
|
|
* IPv4 addresses
|
|
*/
|
|
IPV4 = "ipv4",
|
|
/**
|
|
* IPv6 addresses
|
|
*/
|
|
IPV6 = "ipv6"
|
|
}
|
|
/**
|
|
* Basic properties of both Application and Network Target Groups
|
|
*/
|
|
export interface BaseTargetGroupProps {
|
|
/**
|
|
* The name of the target group.
|
|
*
|
|
* This name must be unique per region per account, can have a maximum of
|
|
* 32 characters, must contain only alphanumeric characters or hyphens, and
|
|
* must not begin or end with a hyphen.
|
|
*
|
|
* @default - Automatically generated.
|
|
*/
|
|
readonly targetGroupName?: string;
|
|
/**
|
|
* The virtual private cloud (VPC).
|
|
*
|
|
* only if `TargetType` is `Ip` or `InstanceId`
|
|
*
|
|
* @default - undefined
|
|
*/
|
|
readonly vpc?: ec2.IVpc;
|
|
/**
|
|
* The amount of time for Elastic Load Balancing to wait before deregistering a target.
|
|
*
|
|
* The range is 0-3600 seconds.
|
|
*
|
|
* @default 300
|
|
*/
|
|
readonly deregistrationDelay?: cdk.Duration;
|
|
/**
|
|
* Health check configuration
|
|
*
|
|
* @default - The default value for each property in this configuration varies depending on the target.
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#aws-resource-elasticloadbalancingv2-targetgroup-properties
|
|
*/
|
|
readonly healthCheck?: HealthCheck;
|
|
/**
|
|
* The type of targets registered to this TargetGroup, either IP or Instance.
|
|
*
|
|
* All targets registered into the group must be of this type. If you
|
|
* register targets to the TargetGroup in the CDK app, the TargetType is
|
|
* determined automatically.
|
|
*
|
|
* @default - Determined automatically.
|
|
*/
|
|
readonly targetType?: TargetType;
|
|
/**
|
|
* Indicates whether cross zone load balancing is enabled.
|
|
*
|
|
* @default - use load balancer configuration
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-targetgroup-targetgroupattribute.html
|
|
*/
|
|
readonly crossZoneEnabled?: boolean;
|
|
/**
|
|
* The type of IP addresses of the targets registered with the target group.
|
|
*
|
|
* @default undefined - ELB defaults to IPv4
|
|
*/
|
|
readonly ipAddressType?: TargetGroupIpAddressType;
|
|
/**
|
|
* Configuring target group health.
|
|
*
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-attributes
|
|
* @default - use default configuration
|
|
*/
|
|
readonly targetGroupHealth?: TargetGroupHealth;
|
|
}
|
|
/**
|
|
* Properties for configuring a target group health
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-attributes
|
|
*/
|
|
export interface TargetGroupHealth {
|
|
/**
|
|
* The minimum number of targets that must be healthy for DNS failover.
|
|
* If below this value, mark the zone as unhealthy in DNS.
|
|
* Use 0 for "off".
|
|
* @default 1
|
|
*/
|
|
readonly dnsMinimumHealthyTargetCount?: number;
|
|
/**
|
|
* The minimum percentage of targets that must be healthy for DNS failover.
|
|
* If below this value, mark the zone as unhealthy in DNS.
|
|
* Use 0 for "off".
|
|
* @default 0
|
|
*/
|
|
readonly dnsMinimumHealthyTargetPercentage?: number;
|
|
/**
|
|
* The minimum number of targets that must be healthy for unhealthy state routing.
|
|
* If below this value, send traffic to all targets including unhealthy ones.
|
|
* @default 1
|
|
*/
|
|
readonly routingMinimumHealthyTargetCount?: number;
|
|
/**
|
|
* The minimum percentage of targets that must be healthy for unhealthy state routing.
|
|
* If below this value, send traffic to all targets including unhealthy ones.
|
|
* Use 0 for "off".
|
|
* @default 0
|
|
*/
|
|
readonly routingMinimumHealthyTargetPercentage?: number;
|
|
}
|
|
/**
|
|
* Properties for configuring a health check
|
|
*/
|
|
export interface HealthCheck {
|
|
/**
|
|
* Indicates whether health checks are enabled. If the target type is lambda,
|
|
* health checks are disabled by default but can be enabled. If the target type
|
|
* is instance or ip, health checks are always enabled and cannot be disabled.
|
|
*
|
|
* @default - Determined automatically.
|
|
*/
|
|
readonly enabled?: boolean;
|
|
/**
|
|
* The approximate number of seconds between health checks for an individual target.
|
|
* Must be 5 to 300 seconds
|
|
*
|
|
* @default - 10 seconds if protocol is `GENEVE`, 35 seconds if target type is `lambda`, else 30 seconds
|
|
*/
|
|
readonly interval?: cdk.Duration;
|
|
/**
|
|
* The ping path destination where Elastic Load Balancing sends health check requests.
|
|
*
|
|
* @default /
|
|
*/
|
|
readonly path?: string;
|
|
/**
|
|
* The port that the load balancer uses when performing health checks on the targets.
|
|
*
|
|
* @default 'traffic-port'
|
|
*/
|
|
readonly port?: string;
|
|
/**
|
|
* The protocol the load balancer uses when performing health checks on targets.
|
|
*
|
|
* The TCP protocol is supported for health checks only if the protocol of the target group is TCP, TLS, UDP, or TCP_UDP.
|
|
* The TLS, UDP, and TCP_UDP protocols are not supported for health checks.
|
|
*
|
|
* @default - HTTP for ALBs, TCP for NLBs
|
|
*/
|
|
readonly protocol?: Protocol;
|
|
/**
|
|
* The amount of time, in seconds, during which no response from a target means a failed health check.
|
|
* Must be 2 to 120 seconds.
|
|
*
|
|
* @default - 6 seconds if the protocol is HTTP, 5 seconds if protocol is `GENEVE`, 30 seconds if target type is `lambda`, 10 seconds for TCP, TLS, or HTTPS
|
|
*/
|
|
readonly timeout?: cdk.Duration;
|
|
/**
|
|
* The number of consecutive health checks successes required before considering an unhealthy target healthy.
|
|
*
|
|
* For Application Load Balancers, the default is 5. For Network Load Balancers, the default is 3.
|
|
*
|
|
* @default - 5 for ALBs, 3 for NLBs
|
|
*/
|
|
readonly healthyThresholdCount?: number;
|
|
/**
|
|
* The number of consecutive health check failures required before considering a target unhealthy.
|
|
*
|
|
* For Application Load Balancers, the default is 2. For Network Load
|
|
* Balancers, the range is between 2-10 and can be set accordingly.
|
|
*
|
|
* @default 2
|
|
*/
|
|
readonly unhealthyThresholdCount?: number;
|
|
/**
|
|
* GRPC code to use when checking for a successful response from a target.
|
|
*
|
|
* You can specify values between 0 and 99. You can specify multiple values
|
|
* (for example, "0,1") or a range of values (for example, "0-5").
|
|
*
|
|
* @default 12
|
|
*/
|
|
readonly healthyGrpcCodes?: string;
|
|
/**
|
|
* HTTP code to use when checking for a successful response from a target.
|
|
*
|
|
* For Application Load Balancers, you can specify values between 200 and
|
|
* 499, and the default value is 200. You can specify multiple values (for
|
|
* example, "200,202") or a range of values (for example, "200-299").
|
|
*/
|
|
readonly healthyHttpCodes?: string;
|
|
}
|
|
/**
|
|
* Define the target of a load balancer
|
|
*/
|
|
export declare abstract class TargetGroupBase extends Construct implements ITargetGroup {
|
|
/**
|
|
* The ARN of the target group
|
|
*/
|
|
readonly targetGroupArn: string;
|
|
/**
|
|
* A reference to this target group
|
|
*/
|
|
get targetGroupRef(): aws_elasticloadbalancingv2.TargetGroupReference;
|
|
/**
|
|
* The environment this resource belongs to
|
|
*/
|
|
get env(): cdk.ResourceEnvironment;
|
|
/**
|
|
* The full name of the target group
|
|
*/
|
|
readonly targetGroupFullName: string;
|
|
/**
|
|
* The name of the target group
|
|
*/
|
|
readonly targetGroupName: string;
|
|
/**
|
|
* ARNs of load balancers load balancing to this TargetGroup
|
|
*/
|
|
readonly targetGroupLoadBalancerArns: string[];
|
|
/**
|
|
* Full name of first load balancer
|
|
*
|
|
* This identifier is emitted as a dimensions of the metrics of this target
|
|
* group.
|
|
*
|
|
* Example value: `app/my-load-balancer/123456789`
|
|
*/
|
|
abstract readonly firstLoadBalancerFullName: string;
|
|
/**
|
|
* A token representing a list of ARNs of the load balancers that route traffic to this target group
|
|
*/
|
|
readonly loadBalancerArns: string;
|
|
/**
|
|
* Health check for the members of this target group
|
|
*/
|
|
get healthCheck(): HealthCheck;
|
|
set healthCheck(value: HealthCheck);
|
|
/**
|
|
* Default port configured for members of this target group
|
|
*/
|
|
protected readonly defaultPort: number;
|
|
/**
|
|
* Configurable dependable with all resources that lead to load balancer attachment
|
|
*/
|
|
protected readonly loadBalancerAttachedDependencies: DependencyGroup;
|
|
/**
|
|
* The types of the directly registered members of this target group
|
|
*/
|
|
protected get targetType(): TargetType | undefined;
|
|
protected set targetType(value: TargetType | undefined);
|
|
/**
|
|
* Attributes of this target group
|
|
*/
|
|
private readonly attributes;
|
|
private readonly _healthCheck;
|
|
private readonly _targetType;
|
|
/**
|
|
* The JSON objects returned by the directly registered members of this target group
|
|
*/
|
|
private readonly _targetsJson;
|
|
/**
|
|
* The target group VPC
|
|
*
|
|
* @default - Required if adding instances instead of Lambdas to TargetGroup
|
|
*/
|
|
private vpc?;
|
|
/**
|
|
* The target group resource
|
|
*/
|
|
private readonly resource;
|
|
constructor(scope: Construct, id: string, baseProps: BaseTargetGroupProps, additionalProps: any);
|
|
/**
|
|
* List of constructs that need to be depended on to ensure the TargetGroup is associated to a load balancer
|
|
*/
|
|
get loadBalancerAttached(): IDependable;
|
|
/**
|
|
* Set/replace the target group's health check
|
|
*/
|
|
configureHealthCheck(healthCheck: HealthCheck): void;
|
|
/**
|
|
* Set a non-standard attribute on the target group
|
|
*
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-attributes
|
|
*/
|
|
setAttribute(key: string, value: string | undefined): void;
|
|
/**
|
|
* Register the given load balancing target as part of this group
|
|
*/
|
|
protected addLoadBalancerTarget(props: LoadBalancerTargetProps): void;
|
|
protected validateTargetGroup(): string[];
|
|
protected validateHealthCheck(): string[];
|
|
}
|
|
/**
|
|
* Properties to reference an existing target group
|
|
*/
|
|
export interface TargetGroupAttributes {
|
|
/**
|
|
* ARN of the target group
|
|
*/
|
|
readonly targetGroupArn: string;
|
|
/**
|
|
* A Token representing the list of ARNs for the load balancer routing to this target group
|
|
*/
|
|
readonly loadBalancerArns?: string;
|
|
}
|
|
/**
|
|
* A target group
|
|
*/
|
|
export interface ITargetGroup extends IConstruct, aws_elasticloadbalancingv2.ITargetGroupRef {
|
|
/**
|
|
* The name of the target group
|
|
*/
|
|
readonly targetGroupName: string;
|
|
/**
|
|
* ARN of the target group
|
|
*/
|
|
readonly targetGroupArn: string;
|
|
/**
|
|
* A token representing a list of ARNs of the load balancers that route traffic to this target group
|
|
*/
|
|
readonly loadBalancerArns: string;
|
|
/**
|
|
* Return an object to depend on the listeners added to this target group
|
|
*/
|
|
readonly loadBalancerAttached: IDependable;
|
|
}
|
|
/**
|
|
* Result of attaching a target to load balancer
|
|
*/
|
|
export interface LoadBalancerTargetProps {
|
|
/**
|
|
* What kind of target this is
|
|
*/
|
|
readonly targetType: TargetType;
|
|
/**
|
|
* JSON representing the target's direct addition to the TargetGroup list
|
|
*
|
|
* May be omitted if the target is going to register itself later.
|
|
*/
|
|
readonly targetJson?: any;
|
|
}
|
|
/**
|
|
* Extract the full load balancer name (used for metrics) from the listener ARN:
|
|
*
|
|
* Turns
|
|
*
|
|
* arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2
|
|
*
|
|
* Into
|
|
*
|
|
* app/my-load-balancer/50dc6c495c0c9188
|
|
*/
|
|
export declare function loadBalancerNameFromListenerArn(listenerArn: string): string;
|