將 CodeDeploy 與 Elastic Load Balancing 整合 - AWS CodeDeploy

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

將 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.shderegister_from_elb.shcommon_functions.sh- 提供您需要取得的所有程式碼。只需在這三個指令碼中編輯預留位置,然後從您的 appspec.yml 檔案參考這些指令碼。

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

  1. 下載您要用於就地部署之負載平衡器類型的範例:

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

  3. 請確定每個目標 Amazon EC2 執行個體都有一個 IAM 執行個體描述檔,至少附加了 elasticloadbalancing:* 和 autoscaling:* 許可。

  4. 在您的應用程式原始碼目錄中包含了部署生命週期事件指令碼 (register_with_elb.shderegister_from_elb.shcommon_functions.sh)。

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

  6. 如果執行個體是 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="",並對 檔案中的其他部署設定進行任何所需的變更。

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