

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 向应用程序负载均衡器目标组注册目标
<a name="target-group-register-targets"></a>

将目标注册到目标组。在创建目标组时，指定其目标类型，此类型将确定您如何注册其目标。例如，您可以注册实例 IDs、IP 地址或 Lambda 函数。有关更多信息，请参阅 [Application Load Balancer 的目标组](load-balancer-target-groups.md)。

如果当前已注册目标的需求增加，您可以注册其他目标以便满足该需求。在目标准备好处理请求后，将目标注册到您的目标组。只要注册过程完成且目标通过初始运行状况检查，负载均衡器就会开始将请求路由至目标。

如果已注册目标需求减少或者您需要为目标提供服务，您可以从目标组取消注册目标。取消注册某个目标后，负载均衡器立即停止将请求路由到该目标。在目标准备好接收请求时，您可以再次将目标注册到目标组。

在取消注册目标时，负载均衡器会一直等待，直到进行中的请求完成。这称作*连接耗尽*。在连接耗尽期间，目标的状态为 `draining`。

取消注册通过 IP 地址注册的目标后，必须等待取消注册延迟结束，然后才可以重新注册相同的 IP 地址。

如果要通过实例 ID 来注册目标，则可以将负载均衡器与 Auto Scaling 组一同使用。将目标组挂接到 Auto Scaling 组并且该组扩展后，由 Auto Scaling 组启动的实例将自动在目标组中注册。如果您将目标组与 Auto Scaling 组分离，则实例会自动从目标组中取消注册。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[将负载均衡器挂接到自动扩缩组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/attach-load-balancer-asg.html)。

关闭目标上的应用程序时，必须先从目标组中注销该目标，并留出时间让现有连接耗尽。您可以使用 describe-target-health CLI 命令或刷新中的目标组视图来监控注销状态。 AWS 管理控制台确认目标已注销后，您可以继续停止或终止应用程序。这一顺序可防止用户在应用程序仍在处理流量过程中被终止时遇到 5XX 错误。

## 目标安全组
<a name="target-security-groups"></a>

在将 EC2 实例注册为目标时，您必须确保实例的安全组允许负载均衡器在侦听器端口和运行状况检查端口上与您的实例进行通信。


**推荐的规则**  

| 
| 
| **Inbound** | 
| --- |
|  Source  |  Port Range  |  Comment  | 
| load balancer security group | instance listener | 在实例侦听器端口上允许来自负载均衡器的流量 | 
| load balancer security group | health check | 在运行状况检查端口上允许来自负载均衡器的流量 | 

我们还建议您允许入站 ICMP 流量以支持路径 MTU 发现。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[路径 MTU 发现](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html#path_mtu_discovery)。

## 目标优化器
<a name="register-targets-target-optimizer"></a>

目标优化器允许您对目标组中的目标强制执行严格的并发。它需要在目标上安装和配置的代理的帮助下运行。该代理充当负载均衡器和您的应用程序之间的内联代理。您可以将代理配置为强制执行负载均衡器可以向目标发送的最大并发请求数。代理跟踪目标正在处理的请求数量。当该数字低于配置的最大值时，代理会向负载均衡器发送信号，让其知道目标已准备好处理另一个请求。

要启用目标优化器，请在创建目标组时指定目标控制端口。负载均衡器通过代理在该端口上建立控制通道，用于管理流量。此端口不同于负载均衡器发送应用程序流量的端口。在目标组中注册的目标必须在其上运行代理。

 **注意：目标优化器只能在创建目标组期间启用。目标控制端口创建后无法修改。**

该代理以 Docker 镜像的形式提供，网址为:` public.ecr.aws/aws-elb/target-optimizer/target-control-agent:latest`。在运行代理容器时，您可以配置以下环境变量：

`TARGET_CONTROL_DATA_ADDRESS`  
代理接收来自该套接字上的负载均衡器的应用程序流量（IP: Port）。此套接字中的端口是您为目标组配置的应用程序流量端口。默认情况下，代理可以接受纯文本连接和 TLS 连接。

`TARGET_CONTROL_CONTROL_ADDRESS`  
代理接收来自该套接字上的负载均衡器的管理流量（IP: Port）。套接字中的端口是您为目标组配置的目标控制端口。

`TARGET_CONTROL_DESTINATION_ADDRESS`  
代理代理将应用程序流量代理到此套接字（IP: Port）。你的应用程序应该在这个套接字上监听。

（可选）`TARGET_CONTROL_MAX_CONCURRENCY`  
目标将从负载均衡器接收的最大并发请求数。它可以介于 0-1000 之间。默认 为 1。

（可选）`TARGET_CONTROL_TLS_CERT_PATH`  
代理在 TLS 握手期间向负载均衡器提供的 TLS 证书的位置。默认情况下，代理会在内存中生成自签名证书。

（可选）`TARGET_CONTROL_TLS_KEY_PATH`  
与 TLS 握手期间代理向负载均衡器提供的 TLS 证书相对应的私钥的位置。默认情况下，代理会在内存中生成私钥。

（可选）`TARGET_CONTROL_TLS_SECURITY_POLICY`  
您为目标组配置的 ELB 安全策略。默认值为 `ELBSecurityPolicy-2016-08`。

（可选）`TARGET_CONTROL_PROTOCOL_VERSION`  
负载均衡器与代理通信所使用的协议。可能的值为` HTTP1`、` HTTP2`、` GRPC`。默认值为 ` HTTP1`。

（可选）`RUST_LOG`  
代理进程的日志级别。代理软件是用 Rust 编写的。可能的值为` debug`` info`、和` error`。默认值为 ` info`。

 要修改任何环境变量的值，必须使用新值重新启动代理。您可以使用以下指标监控目标优化器：`TargetControlRequestCount`、、`TargetControlRequestRejectCount`、`TargetControlActiveChannelCount`、`TargetControlNewChannelCount`、`TargetControlChannelErrorCount`` TargetControlWorkQueueLength`、`TargetControlProcessedBytes`。有关更多信息，请参阅[目标优化器指标](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html#target-optimizer-metric-table)。有关疑难解答信息，请参阅[目标优化器疑难解答](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html#troubleshoot-target-optimizer) 

## 共享子网
<a name="register-targets-shared-subnets"></a>

参与者能够在共享 VPC 中创建应用程序负载均衡器。参与者不能注册在未与他们共享的子网中运行的目标。

## 注册目标
<a name="register-targets"></a>

每个目标组在为负载均衡器启用的每个可用区中必须至少有一个已注册目标。

您的目标组的目标类型将确定如何向该目标组注册目标。有关更多信息，请参阅 [Target type](load-balancer-target-groups.md#target-type)。

**要求和注意事项**
+ 当您注册实例时，实例必须处于 `running` 状态。
+ 目标实例必须位于您为目标组指定的虚拟私有云（VPC）中。
+ 按实例 ID 为 IPv6 目标组注册目标时，必须为目标分配主 IPv6 地址。要了解更多信息，请参阅 *Amazon EC2 用户指南*中的[ IPv6 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#ipv6-addressing)
+ 按 IP 地址为 IPv4 目标组注册目标时，您注册的 IP 地址必须来自以下 CIDR 块之一：
  + 目标组的 VPC 的子网
  + 10.0.0.0/8 (RFC 1918)
  + 100.64.0.0/10 (RFC 6598)
  + 172.16.0.0/12 (RFC 1918)
  + 192.168.0.0/16 (RFC 1918)
+ 按 IP 地址为 IPv6 目标组注册目标时，您注册的 IP 地址必须位于 VPC IPv6 CIDR 块内或对等 VPC 的 IPv6 CIDR 块内。
+ 不能注册同一 VPC 中其他应用程序负载均衡器的 IP 地址。如果另一个 Application Load Balancer 位于与负载均衡器 VPC 对等的 VPC 中，则可以注册其 IP 地址。

------
#### [ Console ]

**要注册目标**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上的**负载均衡**下，选择**目标组**。

1. 选择目标组的名称以打开其详细信息页面。

1. 选择**目标**选项卡。

1. 选择**注册目标**。

1. 如果目标组的目标类型是 `instance`，则选择可用的实例，根据需要覆盖默认端口，然后选择**包含如下待处理事项**。

1. 如果目标组的目标类型为 `ip`，则需为每个 IP 地址选择该网络，输入 IP 地址及端口，然后选择**包含如下待处理事项**。

1. 如果目标组的目标类型为 `lambda`，请选择该 Lambda 函数或输入其 ARN。有关更多信息，请参阅 [使用 Lambda 函数作为目标](lambda-functions.md)。

1. 选择**注册待处理目标**。

------
#### [ AWS CLI ]

**要注册目标**  
使用 [register-targets](https://docs.aws.amazon.com/cli/latest/reference/elbv2/register-targets.html) 命令。以下示例通过实例 ID 注册目标。由于未指定端口，负载均衡器将使用目标组端口。

```
aws elbv2 register-targets \
    --target-group-arn target-group-arn \
    --targets Id=i-1234567890abcdef0 Id=i-0abcdef1234567890
```

以下示例通过 IP 地址注册目标。由于未指定端口，负载均衡器将使用目标组端口。

```
aws elbv2 register-targets \
    --target-group-arn target-group-arn \
    --targets Id=10.0.50.10 Id=10.0.50.20
```

以下示例将一个 Lambda 函数注册为目标。

```
aws elbv2 register-targets \
    --target-group-arn target-group-arn \
    --targets Id=lambda-function-arn
```

------
#### [ CloudFormation ]

**注册目标**  
更新[AWS::ElasticLoadBalancingV2::TargetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-targetgroup.html)资源以包含新目标。以下示例按实例 ID 注册了两个目标。

```
Resources:
  myTargetGroup:
    Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
    Properties:
      Name: my-target-group
      Protocol: HTTP
      Port: 80
      TargetType: instance
      VpcId: !Ref myVPC
      Targets:
        - Id: !GetAtt Instance1.InstanceId
          Port: 80
        - Id: !GetAtt Instance2.InstanceId
          Port: 80
```

------

## 取消注册目标
<a name="deregister-targets"></a>

如果应用程序需求减少或者您需要为目标提供服务，您可以从目标组取消注册目标。取消注册目标将从目标组中删除目标，但不会影响目标。

------
#### [ Console ]

**注销目标**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上的**负载均衡**下，选择**目标组**。

1. 选择目标组的名称以打开其详细信息页面。

1. 在**目标**选项卡中，选择要删除的目标。

1. 选择**注销**。

1. 当系统提示您确认时，选择 **Deregister (取消注册)**。

------
#### [ AWS CLI ]

**注销目标**  
使用 [deregister-targets](https://docs.aws.amazon.com/cli/latest/reference/elbv2/deregister-targets.html) 命令。以下示例会注销两个通过实例 ID 注册的目标。

```
aws elbv2 deregister-targets \
    --target-group-arn target-group-arn \
    --targets Id=i-1234567890abcdef0 Id=i-0abcdef1234567890
```

------