1. 程式人生 > >AWS的自動部署工具codedeploy 負載均衡器和github

AWS的自動部署工具codedeploy 負載均衡器和github

Elastic Load Balancing 提供了三種可用於 CodeDeploy 部署的負載均衡器:Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。

傳統負載均衡器

路由和負載均衡在傳輸層 (TCP/SSL) 或應用程式層 (HTTP/HTTPS) 進行。它支援 EC2-Classic 或 VPC。

應用程式負載均衡器

路由和負載均衡在應用程式層 (HTTP/HTTPS) 進行,並支援基於路徑的路由。它可以將請求路由到您的 Virtual Private Cloud (VPC) 中每個 EC2 例項或容器例項上的埠。

注意

應用程式負載均衡器 目標組必須有一個目標型別 instance;

Network Load Balancer

路由和負載均衡在傳輸層(TCP/UDP 層,即第 4 層)進行,依據是從 TCP 資料包標頭中而非從資料包內容中提取的地址資訊。Network Load Balancer 可以處理突發流量、保留客戶端的源 IP 以及在負載均衡器的使用壽命內使用固定 IP

負載均衡器在 CodeDeploy 部署中的作用

在 CodeDeploy 部署期間,負載均衡器會阻止 Internet 流量路由到未就緒的例項,目前正在部署的例項,或環境不再需要的例項。但是,負載均衡器的具體作用取決於它是用於藍/綠部署還是就地部署。

注意

Elastic Load Balancing 負載均衡器的使用在藍/綠部署中為必需,在就地部署中為可選。

藍/綠部署

依託於 Elastic Load Balancing 負載均衡器來重新路由例項流量是 CodeDeploy 藍/綠部署的基礎。

在藍/綠部署期間,負載均衡器根據您指定的規則,允許將流量路由到已部署最新應用程式修訂的部署組中的新例項 (替換環境),然後阻止執行較早應用程式修訂的舊例項的流量 (原始環境)。

替換環境中的例項註冊負載均衡器後,將取消註冊原始環境中的例項,並根據您的需要終止。

對於藍/綠部署,您可以在部署組中指定 傳統負載均衡器、應用程式負載均衡器 或 Network Load Balancer。您可以使用 CodeDeploy 控制檯或 AWS CLI 將負載均衡器新增到部署組。

就地部署

在就地部署的過程中,負載均衡器可以防止 Internet 流量路由到要部署的例項;例項部署完成後,可恢復對該例項的流量路由。

如果就地部署期間未使用負載均衡器,Internet 流量在部署過程中可能仍會引向該例項。因此,您的客戶可能會遇到中斷、不完整或過時的 Web 應用程式。在將 Elastic Load Balancing 負載均衡器用於就地部署時,部署組中的例項將從負載均衡器取消註冊,更新為最新的應用程式修訂,並在部署成功後向負載均衡器重新註冊同一部署組。

對於就地部署,您可以指定 傳統負載均衡器、應用程式負載均衡器 或 Network Load Balancer。您可以在配置部署組的過程中指定負載均衡器,或使用 CodeDeploy 提供的指令碼實施負載均衡器。

可以使用 CodeDeploy 控制檯或 AWS CLI 將負載均衡器新增到部署組;

使用指令碼為就地部署設定負載均衡器

通過執行以下過程中的步驟,使用部署宣告週期指令碼為就地部署設定負載均衡。

注意

您應該僅在使用指令碼為就地部署設定負載均衡器時使用 CodeDeployDefault.OneAtATime 部署配置。不支援併發執行,並且 CodeDeployDefault.OneAtATime 設定可確保指令碼的順序執行;

在 GitHub 上的 CodeDeploy 示例儲存庫中,我們提供了說明和示例,您可進行調整以使用 CodeDeploy Elastic Load Balancing 負載均衡器。這些儲存庫包含三個示例指令碼 — register_with_elb.shderegister_from_elb.sh 和 common_functions.sh — 這些指令碼提供了開始操作所需的全部程式碼。只需編輯這 3 個指令碼中的佔位符,然後從 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.sh 和 common_functions.sh) 包含在應用程式的原始碼目錄中。

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

  6. 如果例項屬於某個 Amazon EC2 Auto Scaling 組,則可跳過此步驟。

    在 common_functions.sh 指令碼中:

    • 如果您使用的是 傳統負載均衡器,請在 ELB_LIST="" 中指定 Elastic Load Balancing 負載均衡器的名稱,並對檔案中的其他部署設定進行所需的任何更改。

  7. 如果您使用的是 應用程式負載均衡器 或 Network Load Balancer,請在 TARGET_GROUP_LIST="" 中指定 Elastic Load Balancing 目標組的名稱,並對檔案中的其他部署設定進行所需的任何更改。
  8. 將應用程式的原始碼、appspec.yml 和部署生命週期事件指令碼繫結到一個應用程式修訂中,然後上傳該修訂。將該修訂部署到 Amazon EC2 例項。在部署期間,部署生命週期事件指令碼將向負載均衡器取消註冊 Amazon EC2 例項,等待連線耗盡,然後在部署完成後向負載均衡器重新註冊 Amazon EC2 例項。

從 GitHub 部署 CodeDeploy 修訂

要將應用程式修訂從 GitHub 儲存庫部署到例項,請執行以下步驟:

  1. 建立與 CodeDeploy 和將部署到的 Amazon EC2 例項型別相容的修訂。

    要建立相容版本,請按照計劃 CodeDeploy 的修訂將應用程式規範檔案新增到 CodeDeploy 的修訂中的說明執行操作。

  2. 使用 GitHub 賬戶將您的修訂新增到 GitHub 儲存庫。

  3. 使用 CodeDeploy 控制檯中的建立部署頁或使用 AWS CLI create-deployment 命令將修訂從 GitHub 儲存庫部署到已配置為在 CodeDeploy 部署中使用的目標例項。

    如果您需要呼叫 create-deployment 命令,則必須先使用此控制檯的建立部署頁,針對指定應用程式為 CodeDeploy 授予代表您的首選 GitHub 賬戶與 GitHub 互動的許可權。每個應用程式只需進行一次這樣的操作。

github和codedeploy之間的互動:

GitHub 對 CodeDeploy 中的應用程式進行的身份驗證

在向 CodeDeploy 提供與 GitHub 互動的許可權後,GitHub 賬戶和應用程式之間的關聯將儲存在 CodeDeploy 中。您可以將應用程式連結到其他 GitHub 賬戶。也可以撤消 CodeDeploy 與 GitHub 互動的許可權。

將 GitHub 賬戶連結到 CodeDeploy 中的應用程式

  1. Sign in to the AWS 管理控制檯 and open the CodeDeploy console at https://console.aws.amazon.com/codedeploy.

    注意

    使用您在 CodeDeploy 入門中使用的相同賬戶或 IAM 使用者資訊登入。

  2. 在導航窗格中,展開 Deploy (部署),然後選擇 Applications (應用程式)

  3. 選擇要連結到其他 GitHub 賬戶的應用程式。

  4. 如果應用程式沒有部署組,請選擇建立部署組來建立一個部署組

  5. 部署中,選擇建立部署

    注意

    無需建立新的部署。這是目前將其他 GitHub 賬戶連結到應用程式的唯一方式。

  6. 部署設定中,對於修訂型別,選擇我的應用程式將儲存在 GitHub 中

  7. 執行以下操作之一:

    • 要為 CodeDeploy 應用程式建立與 GitHub 賬戶的連線,在單獨的 Web 瀏覽器選項卡中登出 GitHub。在 GitHub 令牌名稱中,鍵入一個名稱來標識此連線,然後選擇連線到 GitHub。該網頁將提示授權 CodeDeploy 與應用程式的 GitHub 進行互動。繼續執行步驟 10。

    • 要使用已建立的連線,請在 GitHub 令牌名稱中,選擇其名稱,然後選擇連線到 GitHub。繼續執行步驟 8。

    • 要建立與其他 GitHub 賬戶的連線,在單獨的 Web 瀏覽器選項卡中登出 GitHub。在 GitHub 令牌名稱中,鍵入一個名稱來標識此連線,然後選擇連線到 GitHub。該網頁將提示授權 CodeDeploy 與應用程式的 GitHub 進行互動。繼續執行步驟 10。

  8. 如果尚未登入 GitHub,請按照 Sign in 頁上的說明執行操作以使用要將應用程式連結到的 GitHub 賬戶進行登入。

  9. 選擇 Authorize application。GitHub 向 CodeDeploy 提供代表所選應用程式的已登入 GitHub 賬戶與 GitHub 互動的許可權。

  10. 如果您需要建立部署,請選擇 Cancel

撤消 CodeDeploy 的與 GitHub 互動的許可權

  1. 使用要撤消 CodeDeploy 許可權的 GitHub 賬戶的憑證登入到 GitHub

  2. 開啟 GitHub 應用程式頁,在已授權應用程式列表中找到 CodeDeploy,然後按照用於撤消應用程式授權的 GitHub 過程執行操作。

CodeDeploy 與私有和公有 GitHub 儲存庫進行互動

CodeDeploy 支援從私有和公有 GitHub 儲存庫部署應用程式。當您向 CodeDeploy 授予代表您訪問 GitHub 的許可權後,CodeDeploy 針對您的 GitHub 賬戶有權訪問的所有私有 GitHub 儲存庫都將擁有讀寫訪問權。不過,CodeDeploy 只能從 GitHub 儲存庫進行讀取。它將不會對任何私有 GitHub 儲存庫進行寫入。

CodeDeploy 與組織託管的 GitHub 儲存庫進行互動

預設情況下,組織託管的 GitHub 儲存庫(與賬戶自己的私有或公有儲存庫相對)未授予對第三方應用程式(包括 CodeDeploy)的訪問權。如果在 GitHub 中啟用組織的第三方應用程式限制,並且您嘗試從其 GitHub 儲存庫中部署程式碼,則部署將失敗。可通過兩種方式解決此問題。

  • 作為組織成員,您可以要求組織所有者批准對 CodeDeploy 的訪問權。請求此訪問權的步驟取決於您是否已授權單個賬戶訪問 CodeDeploy

    使用 CodeDeploy 自動從 CodePipeline 進行部署

    當原始碼發生更改時,您可以觸發從 CodePipeline 進行