

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

# 遷移 Classic Load Balancer
<a name="migrate-classic-load-balancer"></a>

Elastic Load Balancing 支援下列類型的負載平衡器：Application Load Balancer、Network Load Balancer、Gateway Load Balancer 和 Classic Load Balancer。如需每個負載平衡器類型不同功能的資訊，請參閱 [Elastic Load Balancing 功能](https://aws.amazon.com/elasticloadbalancing/features/)。

您也可以選擇將 VPC 中的現有 Classic Load Balancer 遷移至 Application Load Balancer 或 Network Load Balancer。

## 從 Classic Load Balancer 遷移的優點
<a name="migration-benefits"></a>

每種類型的負載平衡器都有自己的唯一功能、函數和組態。檢閱每個負載平衡器的優點，以協助決定最適合您的負載平衡器。

------
#### [ Application Load Balancer ]

**使用 Application Load Balancer 而非 Classic Load Balancer 具有下列優點：**

支援：
+ [路徑條件](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions)、[主機條件](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions)和 [HTTP 標頭條件](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#http-header-conditions)。
+ 將請求從一個 URL 重新導向到另一個 URL，並將請求路由到單一 EC2 執行個體上的多個應用程式。
+ 傳回自訂 HTTP 回應。
+ 依 IP 地址註冊目標，並將 Lambda 函數註冊為目標。包含負載平衡器 VPC 外部的目標。
+ 透過公司或社交身分驗證使用者。
+ Amazon Elastic Container Service (Amazon ECS) 容器化應用程式。
+ 獨立監控每個服務的運作狀態。

存取日誌包含其他資訊，並以壓縮格式存放。

改善整體負載平衡器效能。

------
#### [ Network Load Balancer ]

**使用 Network Load Balancer 而非 Classic Load Balancer 具有下列優點：**

支援：
+ 靜態 IP 地址，允許為每個啟用負載平衡器的子網路指派一個彈性 IP 地址。
+ 依 IP 地址註冊目標，包括負載平衡器 VPC 外部的目標。
+ 將請求路由到單一 EC2 執行個體上的多個應用程式。
+ Amazon Elastic Container Service (Amazon ECS) 容器化應用程式。
+ 獨立監控每個服務的運作狀態。

能夠處理急遽波動的工作負載，並可擴展到每秒處理數百萬個請求。

------

## 使用遷移精靈進行遷移
<a name="migration-wizard"></a>

遷移精靈會使用 Classic Load Balancer 的組態來建立對等的 Application Load Balancer 或 Network Load Balancer。與其他方法相比，它可減少遷移 Classic Load Balancer 所需的時間和精力。

**注意**  
精靈會建立新的負載平衡器。精靈不會將現有的 Classic Load Balancer 轉換為 Application Load Balancer 或 Network Load Balancer。您必須手動將流量重新導向至新建立的負載平衡器。

**限制**
+ 新負載平衡器的名稱不能與相同區域中相同類型的現有負載平衡器相同。
+ 如果 Classic Load Balancer 的金鑰中有任何包含`aws:`字首的標籤，則不會遷移這些標籤。

**遷移至 Application Load Balancer 時**
+ 如果 Classic Load Balancer 只有一個子網路，您必須指定第二個子網路。
+ 如果 Classic Load Balancer 具有使用 TCP 運作狀態檢查的 HTTP/HTTPS 接聽程式，運作狀態檢查通訊協定會更新為 HTTP，且路徑設定為 "/"。
+ 如果 Classic Load Balancer 具有使用自訂或不支援的安全政策的 HTTPS 接聽程式，遷移精靈會使用新負載平衡器類型的預設安全政策。

**遷移至 Network Load Balancer 時**
+ 下列執行個體類型不會向新目標群組註冊：C1, CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, HS1, M1, M2, M3, T1
+ 來自 Classic Load Balancer 的某些運作狀態檢查設定可能無法轉移至新的目標群組。這些案例會在遷移精靈的摘要區段中指出為變更。
+ 如果 Classic Load Balancer 具有 SSL 接聽程式，遷移精靈會使用 SSL 接聽程式中的憑證和安全性政策來建立 TLS 接聽程式。

### 遷移精靈程序
<a name="migration-wizard-process"></a>

**使用遷移精靈遷移 Classic Load Balancer**

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

1. 在導覽窗格的 **Load Balancing (負載平衡器)**，選擇 **Load Balancer (負載平衡器)**。

1. 選取您要遷移的 Classic Load Balancer。

1. 在負載平衡器**詳細資訊**區段中，選擇**啟動遷移精靈**。

1. 選擇**遷移至 Application Load Balancer**，或**遷移至 Network Load Balancer**，以開啟遷移精靈。

1. 在**命名新的負載平衡器**下，針對**負載平衡器名稱**輸入新負載平衡器的名稱。

1. 在**命名新目標群組和檢閱目標**下，針對**目標群組名稱**輸入新目標群組的名稱。

1. （選用） 在**目標**下，您可以檢閱將向新目標群組註冊的目標執行個體。

1. （選用） 在**檢閱標籤**下，您可以檢閱將套用至新負載平衡器的標籤

1. 在 ** Application Load Balancer 的摘要**或 **Network Load Balancer 的摘要**下，檢閱並驗證遷移精靈指派的組態選項。

1. 滿意組態摘要後，請選擇**建立 Application Load Balancer** 或**建立 Network Load Balancer** 以開始遷移。

## 使用負載平衡器複製公用程式進行遷移
<a name="load-balancer-copy-utility"></a>

負載平衡器複製公用程式可在 Elastic Load Balancing 工具儲存庫的 AWS GitHub 頁面上使用。

**Resources**
+ [Elastic Load Balancing 工具](https://github.com/aws/elastic-load-balancing-tools)
+ [Classic Load Balancer 到 Application Load Balancer 複製公用程式](https://github.com/aws/elastic-load-balancing-tools/tree/master/application-load-balancer-copy-utility)
+ [Classic Load Balancer 到 Network Load Balancer 複製公用程式](https://github.com/aws/elastic-load-balancing-tools/tree/master/network-load-balancer-copy-utility)

## 手動遷移負載平衡器
<a name="manual-migration"></a>

下列資訊提供了根據 VPC 中現有 Classic Load Balancer 手動建立新 Application Load Balancer 或 Network Load Balancer 的一般指示。您可以使用 AWS 管理主控台、 AWS CLI或 AWS SDK 進行遷移。如需詳細資訊，請參閱[Elastic Load Balancing 入門](load-balancer-getting-started.md)。

完成遷移程序後，您就可以利用新負載平衡器的功能。

### 手動遷移程序
<a name="manual-migration-process"></a>

**步驟 1：建立新的負載平衡器**  
建立負載平衡器，其組態应與要遷移的 Classic Load Balancer 組態相同。

1. 使用與 Classic Load Balancer 相同的機制 (面向網際網路或內部)、子網路和安全群組，建立新的負載平衡器。

1. 使用與 Classic Load Balancer 相同的運作狀態檢查設定，為負載平衡器建立目標群組。

1. 執行以下任意一項：
   + 如果 Classic Load Balancer 連接到 Auto Scaling 群組，請將目標群組連接至 Auto Scaling 群組。這樣也會向目標群組註冊 Auto Scaling 執行個體。
   + 向目標群組註冊 EC2 執行個體。

1. 建立一或多個接聽程式，每個都有將請求轉送到目標群組的預設規則。如果建立 HTTPS 接聽程式，可以指定與為 Classic Load Balancer 指定的相同憑證。建議您使用預設安全政策。

1. 如果 Classic Load Balancer 有標籤，請檢閱它們，並將相關的標籤新增至新的負載平衡器。

**步驟 2：逐漸將流量重新導向新的負載平衡器**  
向新的負載平衡器註冊執行個體之後，就可以開始將流量從舊負載平衡器重新導向至新負載平衡器。這可讓您測試新的負載平衡器，同時將應用程式可用性的風險降到最低。

**逐漸將流量重新導向新的負載平衡器**

1. 將新負載平衡器的 DNS 名稱貼至已連接網際網路的 web 瀏覽器的地址欄位。如果一切正常，瀏覽器會顯示您的應用程式的預設頁面。

1. 建立新的 DNS 記錄，將您的網域名稱與新的負載平衡器建立關聯。如果您的 DNS 服務支援加權，請在新的 DNS 記錄中指定權數 1，並在舊負載平衡器的現有 DNS 記錄中指定權數 9。這樣會將 10% 的流量導向新的負載平衡器，將 90% 的流量導向舊負載平衡器。

1. 監控新的負載平衡器，確認它正在接收流量且將請求路由到您的執行個體。
**重要**  
DNS 記錄中的存留時間 (TTL) 是 60 秒。這表示解析網域名稱的任何 DNS 伺服器會將紀錄資訊保存在快取中長達 60 秒，同時會傳播變更。因此，在您完成上個步驟之後最多 60 秒內，這些 DNS 伺服器仍會將流量路由到舊負載平衡器。在傳播期間，系統可以將流量導向任一負載平衡器。

1. 繼續更新 DNS 記錄的權數，直到所有流量都導向新的負載平衡器為止。完成後，您可以刪除舊負載平衡器的 DNS 記錄。

**步驟 3：更新政策、指令碼和程式碼**  
如果您將 Classic Load Balancer 遷移至 Application Load Balancer 或 Network Load Balancer，請務必執行以下步驟：
+ 將 IAM 政策使用的 API 版本從 2012-06-01 更新為 2015-12-01。
+ 將程序使用的指標從 `AWS/ELB` 命名空間中的 CloudWatch 指標更新為 `AWS/ApplicationELB` 或 `AWS/NetworkELB` 命名空間中的指標。
+ 更新使用 **aws elb** AWS CLI 命令來使用 **aws elbv2** AWS CLI 命令的指令碼。
+ 更新使用 `AWS::ElasticLoadBalancing::LoadBalancer` 資源來使用 `AWS::ElasticLoadBalancingV2` 資源的 CloudFormation 範本。
+ 將程式碼使用的 Elastic Load Balancing API 版本從 2012-06-01 更新為 2015-12-01。

**Resources**
+ 《AWS CLI 命令參考》**中的 [elbv2](https://docs.aws.amazon.com/cli/latest/reference/elbv2/index.html) 一節
+ [Elastic Load Balancing API 參考版本 2015-12-01](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/)
+ [Elastic Beanstalk 的身分與存取管理](load-balancer-authentication-access-control.md)
+ 《Application Load Balancer 使用者指南》**中的 [Application Load Balancer 指標](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html#load-balancer-metrics-alb)
+ 《Network Load Balancer 使用者指南》**中的 [Network Load Balancer 指標](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html#load-balancer-metrics-nlb)
+ 《AWS CloudFormation 使用者指南》**中的 [AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html)

**步驟 4：刪除舊負載平衡器**  
在以下情形發生之後，可以刪除舊的 Classic Load Balancer：
+ 您已將所有流量從舊的負載平衡器重新導向至新的負載平衡器。
+ 路由至舊負載平衡器的所有現有請求均已完成。

## 防止使用者建立 Classic Load Balancer
<a name="require-elbv2-load-balancers"></a>

您可以建立 IAM 政策，防止使用者在您的帳戶中建立 Classic Load Balancer。

[Elastic Load Balancing V2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awselasticloadbalancingv2.html) 和 [Elastic Load Balancing V1](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awselasticloadbalancing.html) APIs都提供 `CreateLoadBalancer` API 動作。當您建立 Classic Load Balancer 時，您可以使用 V1 API 動作，這會同時建立負載平衡器和接聽程式。當您建立 Application Load Balancer、Network Load Balancer 或 Gateway Load Balancer 時，您可以使用僅建立負載平衡器的 V2 API 動作。V2 API 提供`CreateListener`動作，您可用來在建立負載平衡器之後建立接聽程式。

如果指定接聽程式通訊協定，下列政策會拒絕使用者建立負載平衡器的許可。由於您在建立 Classic Load Balancer 時必須至少設定一個接聽程式，因此此政策會防止使用者建立 Classic Load Balancer。它不會阻止使用者建立其他類型的負載平衡器，因為有不同的 API 動作可用來建立這些負載平衡器及其接聽程式。

```
{
    "Version": "2012-10-17",		 	 	 
    "Effect": "Deny",
    "Action": "elasticloadbalancing:CreateLoadBalancer",
    "Resource": [
        "arn:aws:elasticloadbalancing:*:*:loadbalancer/*"
    ],
    "Condition": {
        "Null": {
            "elasticloadbalancing:ListenerProtocol": false
        }
    }
}
```