本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 CodeDeploy 與 Elastic Load Balancing 整合
在 CodeDeploy 部署期間,負載平衡器可防止網際網路流量在尚未就緒、目前正在部署或不再需要作為環境的一部分時路由至執行個體。負載平衡器扮演的確切角色,卻取決於它是用於藍/綠部署或就地部署。
注意
在藍/綠部署中必須使用 Elastic Load Balancing 負載平衡器,在就地部署中則為選用。
Elastic Load Balancing 類型
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 目標群組必須具有 的目標類型,
instance
才能在 EC2 執行個體上部署,以及IP
Fargate 部署。如需詳細資訊,請參閱目標類型。 - Network Load Balancer
-
傳輸層 (TCP/UDP Layer-4) 的路由和負載平衡,是以從 TCP 封包標頭擷取的地址資訊為基礎,而不是從封包內容。Network Load Balancer 可以處理流量暴增、保留用戶端的來源 IP,並在負載平衡器生命週期中使用固定 IP。
若要進一步了解 Elastic Load Balancing 負載平衡器,請參閱下列主題:
藍/綠部署
在 Elastic Load Balancing 負載平衡器後方重新路由執行個體流量,是 CodeDeploy 藍/綠部署的基礎。
在藍/綠部署期間,根據您指定的規則,負載平衡器可讓流量路由到部署群組中的新執行個體,而這個群組也是部署最新應用程式修訂版 (替代環境) 的群組,然後將流量從之前的應用程式修訂版所執行的舊執行個體 (原始環境) 區隔開來。
在替換環境中的執行個體向一或多個負載平衡器註冊後,原始環境中的執行個體會取消註冊,而且如果您選擇,則會終止。
對於藍/綠部署,您可以在部署群組中指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以使用 CodeDeploy 主控台或 將負載平衡器 AWS CLI 新增至部署群組。
如需有關藍/綠部署中的負載平衡器詳細資訊,請參閱下列主題:
就地部署:
在就地部署期間,負載平衡器會防止網際網路流量路由至即將部署到的目標執行個體,並會在部署到該執行個體完成後,讓執行個體再次開始接受流量。
如果在就地部署期間未使用負載平衡器,網際網路流量仍會在部署過程中導向到執行個體。因此,您的客戶可能會遇到中斷、不完整或過期的 Web 應用程式。當您將 Elastic Load Balancing 負載平衡器與就地部署搭配使用時,部署群組中的執行個體會從負載平衡器取消註冊,更新為最新的應用程式修訂版,然後在部署成功後,使用負載平衡器重新註冊為相同部署群組的一部分。CodeDeploy 最多會等待 1 小時,讓執行個體在負載平衡器後方正常運作。如果負載平衡器在等待期間未將執行個體標示為運作狀態良好,CodeDeploy 會根據部署組態移至下一個執行個體或使部署失敗。
對於就地部署,您可以指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以指定負載平衡器做為部署群組組態的一部分,也可以使用 CodeDeploy 提供的指令碼來實作負載平衡器。
使用部署群組指定就地部署負載平衡器
若要將負載平衡器新增至部署群組,您可以使用 CodeDeploy 主控台或 AWS CLI。針對就地部署之有關在部署群組中指定負載平衡器的詳細資訊,請參閱下列主題:
使用指令碼指定就地部署負載平衡器
使用以下程序中的步驟來使用部署生命週期指令碼,以針對就地部署設定負載平衡。
注意
當您使用指令碼來設定就地部署適用的負載平衡器時,應當只使用 CodeDeployDefault.OneAtATime 部署組態。不支援並行執行,而 CodeDeployDefault.OneAtATime 設定可確保連續執行指令碼。如需部署組態的詳細資訊,請參閱在 CodeDeploy 中使用部署組態。
在 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 中設定就地部署,請執行下列動作:
-
下載您要用於就地部署之負載平衡器類型的範例:
-
請確定每個目標 Amazon EC2 執行個體都 AWS CLI 已安裝 。
-
請確定每個目標 Amazon EC2 執行個體都有一個 IAM 執行個體描述檔,至少附加了 elasticloadbalancing:* 和 autoscaling:* 許可。
-
在您的應用程式原始碼目錄中包含了部署生命週期事件指令碼 (
register_with_elb.sh
、deregister_from_elb.sh
和common_functions.sh
)。 -
在應用程式修訂版
appspec.yml
的 中,提供指示,讓 CodeDeploy 在 ApplicationStart 事件期間執行register_with_elb.sh
指令碼,以及在 ApplicationStop 事件期間執行deregister_from_elb.sh
指令碼。 -
如果執行個體是 Amazon EC2 Auto Scaling 群組的一部分,您可以略過此步驟。
在
common_functions.sh
指令碼中:-
如果您使用的是 Classic Load Balancer
,請在 中指定 Elastic Load Balancing 負載平衡器的名稱 ELB_LIST=""
,並對 檔案中的其他部署設定進行任何您需要的變更。 -
如果您使用的是 Application Load Balancer 或 Network Load Balancer
,請在 中指定 Elastic Load Balancing 目標群組名稱的名稱 TARGET_GROUP_LIST=""
,並對 檔案中的其他部署設定進行任何所需的變更。
-
-
將應用程式的原始碼、
appspec.yml
以及部署生命週期事件指令碼配套成一個應用程式修訂版,然後上傳修訂版。將修訂版部署至 Amazon EC2 執行個體。在部署期間,部署生命週期事件指令碼會將 Amazon EC2 執行個體與負載平衡器取消註冊,等待連線耗盡,然後在部署完成後向負載平衡器重新註冊 Amazon EC2 執行個體。