352 lines
14 KiB
TypeScript
352 lines
14 KiB
TypeScript
import type { IConstruct, Construct } from 'constructs';
|
|
import type { IApplicationListener } from './application-listener';
|
|
import type { HttpCodeTarget } from './application-load-balancer';
|
|
import * as cloudwatch from '../../../aws-cloudwatch';
|
|
import * as ec2 from '../../../aws-ec2';
|
|
import type { Duration } from '../../../core';
|
|
import type { BaseTargetGroupProps, ITargetGroup, LoadBalancerTargetProps, TargetGroupAttributes } from '../shared/base-target-group';
|
|
import { TargetGroupBase } from '../shared/base-target-group';
|
|
import type { ApplicationProtocol, ApplicationProtocolVersion } from '../shared/enums';
|
|
import { TargetGroupLoadBalancingAlgorithmType } from '../shared/enums';
|
|
/**
|
|
* Properties for defining an Application Target Group
|
|
*/
|
|
export interface ApplicationTargetGroupProps extends BaseTargetGroupProps {
|
|
/**
|
|
* The protocol used for communication with the target.
|
|
*
|
|
* This is not applicable for Lambda targets.
|
|
*
|
|
* @default - Determined from port if known
|
|
*/
|
|
readonly protocol?: ApplicationProtocol;
|
|
/**
|
|
* The protocol version to use
|
|
*
|
|
* @default ApplicationProtocolVersion.HTTP1
|
|
*/
|
|
readonly protocolVersion?: ApplicationProtocolVersion;
|
|
/**
|
|
* The port on which the target receives traffic.
|
|
*
|
|
* This is not applicable for Lambda targets.
|
|
*
|
|
* @default - Determined from protocol if known
|
|
*/
|
|
readonly port?: number;
|
|
/**
|
|
* The time period during which the load balancer sends a newly registered
|
|
* target a linearly increasing share of the traffic to the target group.
|
|
*
|
|
* The range is 30-900 seconds (15 minutes).
|
|
*
|
|
* @default 0
|
|
*/
|
|
readonly slowStart?: Duration;
|
|
/**
|
|
* The stickiness cookie expiration period.
|
|
*
|
|
* Setting this value enables load balancer stickiness.
|
|
*
|
|
* After this period, the cookie is considered stale. The minimum value is
|
|
* 1 second and the maximum value is 7 days (604800 seconds).
|
|
*
|
|
* @default - Stickiness is disabled
|
|
*/
|
|
readonly stickinessCookieDuration?: Duration;
|
|
/**
|
|
* The name of an application-based stickiness cookie.
|
|
*
|
|
* Names that start with the following prefixes are not allowed: AWSALB, AWSALBAPP,
|
|
* and AWSALBTG; they're reserved for use by the load balancer.
|
|
*
|
|
* Note: `stickinessCookieName` parameter depends on the presence of `stickinessCookieDuration` parameter.
|
|
* If `stickinessCookieDuration` is not set, `stickinessCookieName` will be omitted.
|
|
*
|
|
* @default - If `stickinessCookieDuration` is set, a load-balancer generated cookie is used. Otherwise, no stickiness is defined.
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html
|
|
*/
|
|
readonly stickinessCookieName?: string;
|
|
/**
|
|
* The load balancing algorithm to select targets for routing requests.
|
|
*
|
|
* @default TargetGroupLoadBalancingAlgorithmType.ROUND_ROBIN
|
|
*/
|
|
readonly loadBalancingAlgorithmType?: TargetGroupLoadBalancingAlgorithmType;
|
|
/**
|
|
* The targets to add to this target group.
|
|
*
|
|
* Can be `Instance`, `IPAddress`, or any self-registering load balancing
|
|
* target. If you use either `Instance` or `IPAddress` as targets, all
|
|
* target must be of the same type.
|
|
*
|
|
* @default - No targets.
|
|
*/
|
|
readonly targets?: IApplicationLoadBalancerTarget[];
|
|
/**
|
|
* Indicates whether anomaly mitigation is enabled.
|
|
*
|
|
* Only available when `loadBalancingAlgorithmType` is `TargetGroupLoadBalancingAlgorithmType.WEIGHTED_RANDOM`
|
|
*
|
|
* @default false
|
|
*
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#automatic-target-weights
|
|
*/
|
|
readonly enableAnomalyMitigation?: boolean;
|
|
/**
|
|
* Indicates whether the target group supports multi-value headers.
|
|
*
|
|
* If the value is true, the request and response headers exchanged between
|
|
* the load balancer and the Lambda function include arrays of values or strings.
|
|
*
|
|
* Only applicable for Lambda targets.
|
|
*
|
|
* @default false
|
|
*
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-attributes
|
|
*/
|
|
readonly multiValueHeadersEnabled?: boolean;
|
|
}
|
|
/**
|
|
* Contains all metrics for a Target Group of a Application Load Balancer.
|
|
*/
|
|
export interface IApplicationTargetGroupMetrics {
|
|
/**
|
|
* Return the given named metric for this Network Target Group
|
|
*
|
|
* @default Average over 5 minutes
|
|
*/
|
|
custom(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of IPv6 requests received by the target group
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
ipv6RequestCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of requests processed over IPv4 and IPv6.
|
|
*
|
|
* This count includes only the requests with a response generated by a target of the load balancer.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
requestCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of healthy hosts in the target group
|
|
*
|
|
* @default Average over 5 minutes
|
|
*/
|
|
healthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of unhealthy hosts in the target group
|
|
*
|
|
* @default Average over 5 minutes
|
|
*/
|
|
unhealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of HTTP 2xx/3xx/4xx/5xx response codes generated by all targets in this target group.
|
|
*
|
|
* This does not include any response codes generated by the load balancer.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
httpCodeTarget(code: HttpCodeTarget, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The average number of requests received by each target in a target group.
|
|
*
|
|
* The only valid statistic is Sum. Note that this represents the average not the sum.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
requestCountPerTarget(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of connections that were not successfully established between the load balancer and target.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
targetConnectionErrorCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The time elapsed, in seconds, after the request leaves the load balancer until a response from the target is received.
|
|
*
|
|
* @default Average over 5 minutes
|
|
*/
|
|
targetResponseTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of TLS connections initiated by the load balancer that did not establish a session with the target.
|
|
*
|
|
* Possible causes include a mismatch of ciphers or protocols.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
*/
|
|
targetTLSNegotiationErrorCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
}
|
|
/**
|
|
* Define an Application Target Group
|
|
*/
|
|
export declare class ApplicationTargetGroup extends TargetGroupBase implements IApplicationTargetGroup {
|
|
/**
|
|
* Uniquely identifies this class.
|
|
*/
|
|
static readonly PROPERTY_INJECTION_ID: string;
|
|
/**
|
|
* Import an existing target group
|
|
*/
|
|
static fromTargetGroupAttributes(scope: Construct, id: string, attrs: TargetGroupAttributes): IApplicationTargetGroup;
|
|
private readonly connectableMembers;
|
|
private readonly listeners;
|
|
private readonly protocol?;
|
|
private readonly port?;
|
|
private _metrics?;
|
|
constructor(scope: Construct, id: string, props?: ApplicationTargetGroupProps);
|
|
get metrics(): IApplicationTargetGroupMetrics;
|
|
/**
|
|
* Add a load balancing target to this target group
|
|
*/
|
|
addTarget(...targets: IApplicationLoadBalancerTarget[]): void;
|
|
/**
|
|
* Enable sticky routing via a cookie to members of this target group.
|
|
*
|
|
* Note: If the `cookieName` parameter is set, application-based stickiness will be applied,
|
|
* otherwise it defaults to duration-based stickiness attributes (`lb_cookie`).
|
|
*
|
|
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html
|
|
*/
|
|
enableCookieStickiness(duration: Duration, cookieName?: string): void;
|
|
/**
|
|
* Register a connectable as a member of this target group.
|
|
*
|
|
* Don't call this directly. It will be called by load balancing targets.
|
|
*/
|
|
registerConnectable(connectable: ec2.IConnectable, portRange?: ec2.Port): void;
|
|
/**
|
|
* Register a listener that is load balancing to this target group.
|
|
*
|
|
* Don't call this directly. It will be called by listeners.
|
|
*/
|
|
registerListener(listener: IApplicationListener, associatingConstruct?: IConstruct): void;
|
|
/**
|
|
* Full name of first load balancer
|
|
*/
|
|
get firstLoadBalancerFullName(): string;
|
|
/**
|
|
* Return the given named metric for this Application Load Balancer Target Group
|
|
*
|
|
* Returns the metric for this target group from the point of view of the first
|
|
* load balancer load balancing to it. If you have multiple load balancers load
|
|
* sending traffic to the same target group, you will have to override the dimensions
|
|
* on this metric.
|
|
*
|
|
* @default Average over 5 minutes
|
|
*/
|
|
metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of IPv6 requests received by the target group
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.ipv6RequestCount`` instead
|
|
*/
|
|
metricIpv6RequestCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of requests processed over IPv4 and IPv6.
|
|
*
|
|
* This count includes only the requests with a response generated by a target of the load balancer.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.requestCount`` instead
|
|
*/
|
|
metricRequestCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of healthy hosts in the target group
|
|
*
|
|
* @default Average over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.healthyHostCount`` instead
|
|
*/
|
|
metricHealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of unhealthy hosts in the target group
|
|
*
|
|
* @default Average over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.unhealthyHostCount`` instead
|
|
*/
|
|
metricUnhealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of HTTP 2xx/3xx/4xx/5xx response codes generated by all targets in this target group.
|
|
*
|
|
* This does not include any response codes generated by the load balancer.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.httpCodeTarget`` instead
|
|
*/
|
|
metricHttpCodeTarget(code: HttpCodeTarget, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The average number of requests received by each target in a target group.
|
|
*
|
|
* The only valid statistic is Sum. Note that this represents the average not the sum.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use `ApplicationTargetGroup.metrics.requestCountPerTarget` instead
|
|
*/
|
|
metricRequestCountPerTarget(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of connections that were not successfully established between the load balancer and target.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.targetConnectionErrorCount`` instead
|
|
*/
|
|
metricTargetConnectionErrorCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The time elapsed, in seconds, after the request leaves the load balancer until a response from the target is received.
|
|
*
|
|
* @default Average over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.targetResponseTime`` instead
|
|
*/
|
|
metricTargetResponseTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
/**
|
|
* The number of TLS connections initiated by the load balancer that did not establish a session with the target.
|
|
*
|
|
* Possible causes include a mismatch of ciphers or protocols.
|
|
*
|
|
* @default Sum over 5 minutes
|
|
* @deprecated Use ``ApplicationTargetGroup.metrics.tlsNegotiationErrorCount`` instead
|
|
*/
|
|
metricTargetTLSNegotiationErrorCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
protected validateTargetGroup(): string[];
|
|
}
|
|
/**
|
|
* A Target Group for Application Load Balancers
|
|
*/
|
|
export interface IApplicationTargetGroup extends ITargetGroup {
|
|
/**
|
|
* All metrics available for this target group.
|
|
*/
|
|
readonly metrics: IApplicationTargetGroupMetrics;
|
|
/**
|
|
* Register a listener that is load balancing to this target group.
|
|
*
|
|
* Don't call this directly. It will be called by listeners.
|
|
*/
|
|
registerListener(listener: IApplicationListener, associatingConstruct?: IConstruct): void;
|
|
/**
|
|
* Register a connectable as a member of this target group.
|
|
*
|
|
* Don't call this directly. It will be called by load balancing targets.
|
|
*/
|
|
registerConnectable(connectable: ec2.IConnectable, portRange?: ec2.Port): void;
|
|
/**
|
|
* Add a load balancing target to this target group
|
|
*/
|
|
addTarget(...targets: IApplicationLoadBalancerTarget[]): void;
|
|
}
|
|
/**
|
|
* Interface for constructs that can be targets of an application load balancer
|
|
*/
|
|
export interface IApplicationLoadBalancerTarget {
|
|
/**
|
|
* Attach load-balanced target to a TargetGroup
|
|
*
|
|
* May return JSON to directly add to the [Targets] list, or return undefined
|
|
* if the target will register itself with the load balancer.
|
|
*/
|
|
attachToApplicationTargetGroup(targetGroup: IApplicationTargetGroup): LoadBalancerTargetProps;
|
|
}
|