

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 向 Application Load Balancer 目標群組註冊目標
<a name="target-group-register-targets"></a>

您會向目標群組註冊您的目標。建立目標群組時，您會指定其目標類型，這會決定您目標的註冊方式。例如，您可以註冊執行個體 ID、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 User Guide* 中的 [Attaching a load balancer to your Auto Scaling group](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** | 
| --- |
|  來源  |  連接埠範圍  |  Comment  | 
| 負載平衡器安全群組 | 執行個體接聽程式 | Allow traffic from the load balancer on the instance listener port | 
| 負載平衡器安全群組 | 運作狀態檢查 | Allow traffic from the load balancer on the health check port | 

我們也建議您允許傳入 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 中建立 Application Load Balancer。參與者無法註冊在未與他們共用的子網路中執行的目標。

## 登記目標
<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) 
+ 依 IPv4 目標群組的 IP 地址註冊目標時，您註冊的 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)
+ 依 IPv6 目標群組的 IP 地址註冊目標時，您註冊的 IP 地址必須位於 VPC IPv6 CIDR 區塊內或對等 VPC 的 IPv6 CIDR 區塊內。
+ 您無法在相同的 VPC 中註冊另一個 Application Load Balancer 的 IP 地址。如果另一個 Application Load Balancer 位於與負載平衡器 VPC 對等的 VPC 中，您可以註冊其 IP 地址。

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

**註冊目標**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格的 **Load Balancing** (負載平衡) 中，選擇 **Target Groups (目標群組)**。

1. 選擇目標群組的名稱，以開啟其詳細資訊頁面。

1. 選擇 **Targets (目標)** 標籤。

1. 選擇 **Register targets (註冊目標)**。

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. 在導覽窗格的 **Load Balancing** (負載平衡) 中，選擇 **Target Groups (目標群組)**。

1. 選擇目標群組的名稱，以開啟其詳細資訊頁面。

1. 在**目標**索引標籤上，選取要移除的目標。

1. 選擇 **Deregister (取消註冊)**。

1. 出現確認的提示時，請選擇**取消註冊**。

------
#### [ 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
```

------