

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

# 將 CodeDeploy 與 Elastic Load Balancing 整合
<a name="integrations-aws-elastic-load-balancing"></a>

在 CodeDeploy 部署期間，負載平衡器可防止網際網路流量在尚未就緒、目前正在部署或不再需要作為環境的一部分路由至執行個體。負載平衡器扮演的確切角色，卻取決於它是用於藍/綠部署或就地部署。

**注意**  
在藍/綠部署中必須使用 Elastic Load Balancing 負載平衡器，在就地部署中則為選用。

## Elastic Load Balancing 類型
<a name="integrations-aws-elastic-load-balancing-types"></a>

Elastic Load Balancing 提供三種類型的負載平衡器，可用於 CodeDeploy 部署：Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。

Classic Load Balancer  
在傳輸層 (TCP/SSL) 或應用程式層 (HTTP/HTTPS) 進行路由及負載平衡。它支援 VPC。  
Amazon ECS 部署不支援 Classic Load Balancer。

Application Load Balancer  
在應用程式層 (HTTP/HTTPS) 的路由及負載平衡並支援以路徑為基礎的路由。此類型的負載平衡器能夠將請求路由至虛擬私有雲端 (VPC) 中的每個 EC2 執行個體或容器執行個體。  
 Application Load Balancer 目標群組對於 EC2 執行個體上的`instance`部署，以及 `IP` Fargate 部署，必須具有 的目標類型。如需詳細資訊，請參閱[目標類型](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type)。

Network Load Balancer  
根據從 TCP 封包標頭擷取的地址資訊，而不是從封包內容，在傳輸層 (TCP/UDP Layer-4) 進行路由和負載平衡。Network Load Balancer 可以處理流量暴增、保留用戶端的來源 IP，並在負載平衡器生命週期中使用固定 IP。

若要進一步了解 Elastic Load Balancing 負載平衡器，請參閱下列主題：
+ [什麼是 Elastic Load Balancing？](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [什麼是 Classic Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html)
+ [什麼是 Application Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [什麼是 Network Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)

## 藍/綠部署
<a name="integrations-aws-elastic-load-balancing-blue-green"></a>

在 Elastic Load Balancing 負載平衡器後方重新路由執行個體流量，是 CodeDeploy 藍/綠部署的基礎。

在藍/綠部署期間，根據您指定的規則，負載平衡器可讓流量路由到部署群組中的新執行個體，而這個群組也是部署最新應用程式修訂版 (替代環境) 的群組，然後將流量從之前的應用程式修訂版所執行的舊執行個體 (原始環境) 區隔開來。

在替換環境中的執行個體向一或多個負載平衡器註冊後，原始環境中的執行個體會取消註冊，而且如果您選擇，則會終止。

對於藍/綠部署，您可以在部署群組中指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以使用 CodeDeploy 主控台或 AWS CLI ，將負載平衡器新增至部署群組。

如需有關藍/綠部署中的負載平衡器詳細資訊，請參閱下列主題：
+ [在 Elastic Load Balancing 中為 CodeDeploy Amazon EC2 部署設定負載平衡器](deployment-groups-create-load-balancer.md)
+ [建立藍/綠部署的應用程式 （主控台）](applications-create-blue-green.md)
+ [建立 EC2/現場部署藍/綠部署的部署群組 （主控台）](deployment-groups-create-blue-green.md)

## 就地部署：
<a name="integrations-aws-elastic-load-balancing-in-place"></a>

在就地部署期間，負載平衡器會防止網際網路流量路由至即將部署到的目標執行個體，並會在部署到該執行個體完成後，讓執行個體再次開始接受流量。

如果在就地部署期間未使用負載平衡器，網際網路流量仍會在部署過程中導向到執行個體。因此，您的客戶可能會遇到中斷、不完整或過期的 Web 應用程式。當您搭配就地部署使用 Elastic Load Balancing 負載平衡器時，部署群組中的執行個體會從負載平衡器取消註冊，更新為最新的應用程式修訂版，然後在部署成功後，使用負載平衡器重新註冊為相同部署群組的一部分。CodeDeploy 最多會等待 1 小時，讓執行個體在負載平衡器後方正常運作。如果在等待期間負載平衡器未將執行個體標記為運作狀態良好，CodeDeploy 會根據部署組態移至下一個執行個體或使部署失敗。

對於就地部署，您可以指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以指定負載平衡器做為部署群組組態的一部分，也可以使用 CodeDeploy 提供的指令碼來實作負載平衡器。

### 使用部署群組指定就地部署負載平衡器
<a name="integrations-aws-elastic-load-balancing-in-place-deployment-group"></a>

若要將負載平衡器新增至部署群組，您可以使用 CodeDeploy 主控台或 AWS CLI。針對就地部署之有關在部署群組中指定負載平衡器的詳細資訊，請參閱下列主題：
+ [建立就地部署的應用程式 （主控台）](applications-create-in-place.md)
+ [建立就地部署的部署群組 （主控台）](deployment-groups-create-in-place.md)
+ [在 Elastic Load Balancing 中為 CodeDeploy Amazon EC2 部署設定負載平衡器](deployment-groups-create-load-balancer.md)

### 使用指令碼指定就地部署負載平衡器
<a name="integrations-aws-elastic-load-balancing-in-place-script"></a>

使用以下程序中的步驟來使用部署生命週期指令碼，以針對就地部署設定負載平衡。
**注意**  
當您使用指令碼來設定就地部署適用的負載平衡器時，應當只使用 CodeDeployDefault.OneAtATime 部署組態。不支援並行執行，而 CodeDeployDefault.OneAtATime 設定可確保連續執行指令碼。如需部署組態的詳細資訊，請參閱[在 CodeDeploy 中使用部署組態](deployment-configurations.md)。

在 GitHub 上的 CodeDeploy 範例儲存庫中，我們提供您可以調整以使用 CodeDeploy Elastic Load Balancing 負載平衡器的指示和範例。這些儲存庫包含三個範例指令碼 -`register_with_elb.sh`、 `deregister_from_elb.sh`和 `common_functions.sh`- 提供您需要的所有程式碼。只需在這三個指令碼中編輯預留位置，然後從您的 `appspec.yml` 檔案參考這些指令碼。

若要使用向 Elastic Load Balancing 負載平衡器註冊的 Amazon EC2 執行個體在 CodeDeploy 中設定就地部署，請執行下列動作：

1. 下載您要用於就地部署之負載平衡器類型的範例：
   + [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb)
   + [Application Load Balancer [或 Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2) （任一類型都可以使用相同的指令碼）](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)

1. 請確定每個目標 Amazon EC2 執行個體都 AWS CLI 已安裝 。

1. 請確定每個目標 Amazon EC2 執行個體都有至少附加彈性負載平衡：\$1 和自動調整規模：\$1 許可的 IAM 執行個體描述檔。

1. 在您的應用程式原始碼目錄中包含了部署生命週期事件指令碼 (`register_with_elb.sh`、`deregister_from_elb.sh` 和 `common_functions.sh`)。

1. 在應用程式修訂版`appspec.yml`的 中，提供指示，讓 CodeDeploy 在 **ApplicationStart** 事件期間執行`register_with_elb.sh`指令碼，以及在 **ApplicationStop** 事件期間執行`deregister_from_elb.sh`指令碼。

1. 如果執行個體是 Amazon EC2 Auto Scaling 群組的一部分，您可以略過此步驟。

   在 `common_functions.sh` 指令碼中：
   + 如果您使用的是 [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb)，請在 中指定 Elastic Load Balancing 負載平衡器的名稱`ELB_LIST=""`，並對 檔案中的其他部署設定進行任何您需要的變更。
   + 如果您使用的是 [Application Load Balancer [或 Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)，請在 中指定 Elastic Load Balancing 目標群組名稱的名稱`TARGET_GROUP_LIST=""`，並對檔案中的其他部署設定進行任何您需要的變更。

1. 將應用程式的原始碼、`appspec.yml` 以及部署生命週期事件指令碼配套成一個應用程式修訂版，然後上傳修訂版。將修訂版部署至 Amazon EC2 執行個體。在部署期間，部署生命週期事件指令碼將使用負載平衡器取消註冊 Amazon EC2 執行個體，等待連線耗盡，然後在部署完成後向負載平衡器重新註冊 Amazon EC2 執行個體。