什麼是 CodeDeploy? - AWS CodeDeploy

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

什麼是 CodeDeploy?

CodeDeploy 是一種部署服務,可自動將應用程式部署到 Amazon EC2 執行個體、現場部署執行個體、無伺服器 Lambda 函數或 Amazon ECS 服務。

您可以部署幾乎無限制的各種應用程式內容,包括:

  • 代碼

  • 無伺服器功能 AWS Lambda

  • Web 與組態檔案

  • Executables

  • 套件

  • 指令碼

  • 多媒體檔案

CodeDeploy 可以部署在伺服器上執行並存放在 Amazon S3 儲存貯體、儲存庫或 Bitbucket 儲存 GitHub 庫中的應用程式內容。 CodeDeploy 也可以部署無伺服器 Lambda 函數。在使用之前,您不需要對現有程式碼進行變更 CodeDeploy。

CodeDeploy 讓您更容易:

  • 快速推出新的功能。

  • 更新 AWS Lambda 函數版本。

  • 避免在部署應用程式時停機。

  • 處理複雜的應用程式更新,而不會有許多與容易出錯的手動部署相關的風險。

服務能和您的基礎設施一同擴展,可以輕鬆部署至一個執行個體,也可以部署至數千個。

CodeDeploy 可搭配各種系統進行組態管理、原始檔控制、持續整合持續交付和持續部署。如需詳細資訊,請參閱產品整合

主 CodeDeploy 控台也提供快速搜尋資源的方法,例如儲存庫、建置專案、部署應用程式和管道。選擇 Go to resource (移至資源),或按 / 鍵,然後輸入資源名稱。任何相符項目都會出現在清單中。搜尋不區分大小寫。您只會看到您有權檢視的資源。如需詳細資訊,請參閱 適用於 AWS CodeDeploy的 Identity and Access Management

的好處 AWS CodeDeploy

CodeDeploy 提供以下好處:

  • 伺服器、無伺服器和容器應用程式。 CodeDeploy可讓您在部署無伺服器 AWS Lambda 功能版本或 Amazon ECS 應用程式的伺服器和應用程式上部署傳統應用程式。

  • 自動化部署。 CodeDeploy 在您的開發、測試和生產環境中,完全自動化您的應用程式部署。 CodeDeploy隨著您的基礎架構擴展,以便您可以部署到一個或數千個執行個體。

  • 減少停機時間。如果您的應用程式使用 EC2 /內部部署運算平台, CodeDeploy 可協助您將應用程式的可用性 在就地部署期間,跨 Amazon EC2 CodeDeploy 執行個體執行滾動式更新。您可以指定一次要在離線時進行更新的執行個體數。在藍/綠部署期間,最新的應用程式修訂版已安裝在替代執行個體上。流量會依您的選擇,立刻或測試完新環境後,重新路由到這些執行個體。針對這兩種部署類型,根據您設定的規則 CodeDeploy追蹤應用程式健全狀況。

  • 停止和復原。如有錯誤,您可以自動或手動停止和回復部署。

  • 集中化控制。您可以透過 CodeDeploy 主控台或啟動和追蹤部署狀態 AWS CLI。您會收到一份報告,列出每個應用程式修訂版的部署時間以及 Amazon EC2 執行個體的部署時間。

  • 易於採用。 CodeDeploy 與平台無關,可與任何應用程序一起使用。您可以輕鬆地重複使用設置代碼。 CodeDeploy 也可以與您的軟體發行程序或持續交付工具鏈整合。

  • 並行部署。如果您有多個使用 EC2 /內部部署計算平台的應用程式, CodeDeploy 可以將它們同時部署到同一組執行個體。

CodeDeploy 運算平台概觀

CodeDeploy 能夠將應用程式部署到三個運算平台:

  • EC2/ 現場部署:描述可以是 Amazon EC2 雲端執行個體、現場部署伺服器或兩者的實體伺服器執行個體。使用 EC2/ 內部部署運算平台建立的應用程式可由可執行檔、組態檔、映像等組成。

    使用 EC2 /內部部署計算平台的部署會使用就地或藍/綠部署類型來管理流量導向至執行個體的方式。如需詳細資訊,請參閱 CodeDeploy 部署類型概觀

  • AWS Lambda:用於部署包含 Lambda 函數的更新版本的應用程式。 AWS Lambda 在由高可用性運算結構組成的無伺服器運算環境中管理 Lambda 函數。計算資源的所有管理都由執行 AWS Lambda。如需詳細資訊,請參閱無伺服器運算與應用程式。如需 AWS Lambda 和 Lambda 函數的詳細資訊,請參閱AWS Lambda

    您可以選擇初期測試、線性或組態,在部署期間管理流量轉移至更新 Lambda 函數版本的方 all-at-once 式。

  • Amazon ECS:用於將 Amazon ECS 容器化應用程式部署為任務集。 CodeDeploy 將應用程式的更新版本安裝為新的取代工作集,以執行藍/綠部署。 CodeDeploy 將原始應用程式工作集的生產流量重新路由傳送至取代工作集。成功部署後,原始任務集會終止。有關 Amazon ECS 的更多信息,請參閱 Amazon 彈性容器服務

    您可以選擇初期測試、線性或規劃,來管理部署期間流量轉移至更新工作集的方 all-at-once 式。

    注意

    使用和 CodeDeploy 兩者都支援 Amazon ECS 藍/綠部署。 AWS CloudFormation後續各節將說明這些部署的詳細資訊。

下表說明 CodeDeploy 元件如何搭配每個運算平台使用。如需詳細資訊,請參閱:

CodeDeploy 元件 EC2/內部部署 AWS Lambda Amazon ECS
部署群組 部署修訂版到一組執行個體。 在高可用性運算基礎架構上部署新版本的無伺服器 Lambda 函數。 指定包含要部署為任務集的容器化應用程式的 Amazon ECS 服務、用於向已部署應用程式提供流量的生產和選用測試接聽程式、重新路由傳送流量和終止已部署應用程式的原始任務集的時機,以及選用的觸發器、警示和復原設定。
部署 部署由應用程式和 AppSpec 檔案組成的新修訂版本。 AppSpec 指定如何將應用程式部署到部署群組中的執行個體。 將生產流量從一個版本的 Lambda 函數轉換為相同函數的新版本。此 AppSpec 檔案會指定要部署的 Lambda 函數版本。 將 Amazon ECS 容器化應用程式的更新版本部署為新的替代任務集。 CodeDeploy 將生產流量從具有原始版本的任務集重新路由到具有更新版本的新取代任務集。部署完成時,原始任務設定將終止。
部署組態 決定部署速度和在部署期間的任何點都必須健康的最少執行個體數的設定。 決定流量如何轉移至更新的 Lambda 函數版本的設定。 決定流量如何轉移至更新後的 Amazon ECS 任務集的設定。
修訂 AppSpec 檔案和應用程式檔案 (例如可執行檔、組態檔等) 的組合。 此 AppSpec 檔案可指定要部署哪些 Lambda 函數,以及可在部署生命週期事件掛接期間執行驗證測試的 Lambda 函數。

指定下列項目的 AppSpec 檔案:

  • Amazon ECS 服務的 Amazon ECS 任務定義,以及要部署的容器化應用程式。

  • 您更新已部署應用程式的容器。

  • 生產流量重新路由的容器連接埠。

  • 選用的網路組態設定和 Lambda 函數,可在部署生命週期事件掛接期間執行驗證測試。

應用程式 部署群組和修訂版的集合。EC2/ 內部部署應用程式使用 EC2 /內部部署計算平台。 部署群組和修訂版的集合。用於 AWS Lambda 部署的應用程式會使用無伺服器 AWS Lambda 運算平台。 部署群組和修訂版的集合。用於 Amazon ECS 部署的應用程式使用 Amazon ECS 運算平台。

CodeDeploy 部署類型概觀

CodeDeploy 提供兩種部署類型選項:

  • 就地部署:停止部署群組中每個執行個體上的應用程式、安裝最新的應用程式修訂版本,並啟動和驗證新版本的應用程式。您可以使用負載平衡器,以便在部署期間取消註冊每個執行個體,然後在部署完成後還原至服務。只有使用 EC2 /內部部署計算平台的部署才能使用就地部署。如需就地部署的更多資訊,請參閱就地部署概述

    注意

    AWS Lambda 和 Amazon ECS 部署無法使用就地部署類型。

  • 藍/綠部署:部署的行為取決於您使用的運算平台:

    • EC2 /內部部署計算平台上的藍色/綠色:部署群組 (原始環境) 中的執行個體會使用下列步驟取代為不同的一組執行個體 (取代環境):

      • 針對替代環境佈建執行個體。

      • 最新的應用程式修訂版會安裝在取代執行個體上。

      • 應用程式測試和系統驗證等活動會發生選擇性的等待時間。

      • 取代環境中的執行個體會使用一或多個 Elastic Load Balancing 負載平衡器登錄,導致流量重新路由傳送到這些執行個體。原始環境中的執行個體會取消註冊,並可終止或繼續執行以供其他用途使用。

      注意

      如果您使用 EC2 /內部部署運算平台,請注意藍/綠部署僅適用於 Amazon EC2 執行個體。

    • AWS Lambda 或 Amazon ECS 運算平台上的藍/綠:流量會根據初期測試線性all-at-once部署組態以遞增方式移動。

    • 透過藍/綠部署 AWS CloudFormation:流量會從您目前的資源轉移到更新的資源,做為 AWS CloudFormation 堆疊更新的一部分。目前僅支援 ECS 藍/綠部署。

    如需藍/綠部署的詳細資訊,請參閱 藍/綠部署概述

注意

您可以使用 CodeDeploy 代理程式在登入的執行個體上執行部署,而不需要應用程式、部署群組甚至是 AWS 帳戶。如需相關資訊,請參閱使用 CodeDeploy 代理程式驗證本機電腦上的部署套件

就地部署概述

注意

AWS Lambda 和 Amazon ECS 部署無法使用就地部署類型。

以下是就地部署的運作方式:

  1. 首先,您可以在本機開發電腦或類似環境中建立可部署的內容,然後新增應用程式規格檔案 (AppSpec 檔案)。檔 AppSpec 案是唯一的 CodeDeploy。它會定義您要 CodeDeploy 執行的部署動作。您可以將可部署的內容和 AppSpec 檔案捆綁到存檔檔案中,然後將其上傳到 Amazon S3 儲存貯體或 GitHub存放庫。此封存檔稱為應用程式修訂版 (會只是修訂版)。

  2. 接下來,您會提供 CodeDeploy 有關部署的資訊,例如要從哪個 Amazon S3 儲存貯體或 GitHub 儲存庫提取修訂版本,以及要將其內容部署到哪一組 Amazon EC2 執行個體。 CodeDeploy 將一組 Amazon EC2 執行個體呼叫為一個部署群組。部署群組包含個別標記的 Amazon EC2 執行個體、Amazon EC2 Auto Scaling 群組中的 Amazon EC2 執行個體,或兩者皆包含。

    每次成功上傳您要部署至部署群組的新應用程式修訂版時,該綁定會設定為部署群組的目標修訂版。換言之,目前鎖定為部署目標的應用程式修訂版就是目標修訂版。這也是會拿來自動部署的修訂版。

  3. 接下來,每個執行個體上的 CodeDeploy 代理程式都會輪詢 CodeDeploy 以決定從指定的 Amazon S3 儲存貯體或 GitHub 儲存庫提取的內容和時機。

  4. 最後,每個執行個體上的 CodeDeploy 代理程式會從 Amazon S3 儲存貯體或 GitHub 儲存庫提取目標修訂,然後使用 AppSpec 檔案中的指示將內容部署到執行個體。

CodeDeploy 保留部署記錄,以便您取得部署狀態、部署組態參數、執行個體健全狀況等。

藍/綠部署概述

藍/綠部署可用來更新應用程式,同時將新應用程式版本變更所造成的中斷降到最低。 CodeDeploy 在重新路由您的生產流量之前,將新的應用程式版本與舊版本一起佈建。

  • AWS Lambda:流量從 Lambda 函數的一個版本轉移到相同 Lambda 函數的新版本。

  • Amazon ECS:流量從 Amazon ECS 服務中設置的任務轉移到相同 Amazon ECS 服務中設置的更新替換任務。

  • EC2 /內部部署:流量從原始環境中的一組執行個體轉移到一組取代的執行個體。

所有 AWS Lambda 和 Amazon ECS 部署均為藍/綠。EC2 /內部部署可以就地或藍色/綠色。藍/綠部署比現場部署多出許多優勢:

  • 您可以在新的取代環境中安裝和測試應用程式,並透過重新路由流量,將其部署至生產環境。

  • 如果您使用的是 EC2 /內部部署計算平台,切換回最新版本的應用程式會更快、更可靠。因為流量只要尚未終止,都可以路由回原始執行個體。使用現場部署,版本必須復原,方法是重新部署之前版本的應用程式。

  • 如果您使用的是 EC2 /內部部署計算平台,則會為藍/綠部署佈建新的執行個體,並反映出大 up-to-date 部分的伺服器組態。這可協助您避免有時在長時間執行的執行個體上發生的問題類型。

  • 如果您使用的是 AWS Lambda 運算平台,您可以控制流量從原始 AWS Lambda 函數版本轉移到新的 AWS Lambda 函數版本的方式。

  • 如果您使用 Amazon ECS 運算平台,則可以控制流量從原始任務集轉移到新任務集的方式。

藍/綠部署 AWS CloudFormation 可以使用下列其中一種方法:

  • AWS CloudFormation 部署範本:使用 AWS CloudFormation 範本規劃部署時,您的部署會由 AWS CloudFormation 更新觸發。當您變更資源並上傳範本變更時,中的堆疊更新 AWS CloudFormation 會起始新部署。如需可在 AWS CloudFormation 範本中使用的資源清單,請參閱AWS CloudFormation CodeDeploy供參考的範本

  • 藍/綠部署透過 AWS CloudFormation:您可以使用透過堆疊更新 AWS CloudFormation 來管理藍/綠部署。除了在堆疊範本中指定流量路由和穩定設定之外,您還可以定義藍色和綠色資源。然後,如果您在堆疊更新期間更新選取的資源, AWS CloudFormation 會產生所有必要的綠色資源,根據指定的流量路由參數轉移流量,然後刪除藍色資源。如需詳細資訊,請參閱使用AWS CloudFormation 者指南 AWS CloudFormation中的 CodeDeploy 使用自動化 Amazon ECS 藍/綠部署

    注意

    僅支援 Amazon ECS 藍色/綠色部署。

您如何設定藍/綠部署取決於您部署所使用的運算平台。

在 AWS Lambda 或Amazon ECS 運算平台上的藍色/綠色部署

如果您使用 AWS Lambda 或 Amazon ECS 運算平台,則必須指出流量如何從原始 AWS Lambda 功能或 Amazon ECS 任務集轉移到新功能或任務集。若要指出流量的轉移方式,您必須指定下列其中一個部署組態:

  • 金絲雀

  • 線性

  • all-at-once

如需有關在初期測試、線性或 all-at-once部署規劃中流量如何轉移的資訊,請參閱部署組態

如需 Lambda 部署組態的詳細資訊,請參閱AWS Lambda 運算平台上的部署組態

如需 Amazon ECS 部署組態的詳細資訊,請參閱在 Amazon ECS 運算平台上的部署組態

在EC2/內部署計算平台上的藍色/綠色部署

注意

您必須使用 Amazon EC2 執行個體在EC2/ 現場部署運算平台上進行藍/綠部署。藍/綠部署類型不支援內部部署執行個體。

如果您使用的是 EC2 /內部部署計算平台,則適用以下條件:

您必須擁有一個或多個具有識別 Amazon EC2 標籤或 Amazon EC2 Auto Scaling 群組的 Amazon EC2 執行個體。執行個體必須符合下列額外的要求:

  • 每個 Amazon EC2 執行個體都必須附加正確的 IAM 執行個體設定檔。

  • CodeDeploy 代理程式必須安裝並在每個執行個體上執行。

注意

您通常也可以在您的原始環境中的執行個體上執行應用程式修訂版,但這不是藍/綠部署的要求。

當您建立用於藍/綠部署的部署群組時,您可以選擇如何指定您的替換環境:

複製現有的 Amazon EC2 Auto Scaling 群組:在藍/綠部署期間, CodeDeploy 會在部署期間為替換環境建立執行個體。使用此選項,可 CodeDeploy 使用您指定的 Amazon EC2 Auto Scaling 群組做為替代環境的範本,包括相同數量的執行中執行個體和許多其他組態選項。

手動選擇執行個體:您可以使用 Amazon EC2 執行個體標籤、Amazon EC2 Auto Scaling 群組名稱或兩者,指定要計為替代的執行個體。若您選擇此選項,直到建立部署前,您都無需指定取代環境的執行個體。

以下是其運作方式:

  1. 您已經有執行個體或做為您原始環境使用的 Amazon EC2 Auto Scaling 群組。第一次執行藍色/綠色部署時,通常會使用已在就地部署中使用的執行個體。

  2. 在現有的 CodeDeploy 應用程式中,您可以建立藍/綠部署群組,其中除了就地部署所需的選項之外,還可以指定下列項目:

    • 在藍/綠部署程序期間,可將流量從原始環境路由至替換環境的負載平衡器或負載平衡器。

    • 是否要立即將流量重新路由至取代環境,或是等待您手動重新路由流量。

    • 將流量路由至取代執行個體的速度。

    • 是否終止或讓遭取代的執行個體繼續執行。

  3. 您會建立此部署群組的部署,期間會發生下列事件:

    1. 如果您選擇複製 Amazon EC2 Auto Scaling 群組,則會為您的替代環境佈建執行個體。

    2. 您為部署指定的應用程式修訂會在取代執行個體上安裝。

    3. 若您在部署群組設定中指定等待時間,部署便會暫停。您可以在此時於您的取代環境中執行測試及驗證。若您沒有在等待期間結束前手動重新路由流量,部署便會停止。

    4. 取代環境中的執行個體會向 Elastic Load Balancing 器登錄,流量開始路由到這些執行個體。

    5. 原始環境中的執行個體會取消註冊,並會根據您在部署群組中指定的內容處理 (終止或持續執行)。

藍/綠部署 AWS CloudFormation

您可以使用範本建立資源 AWS CloudFormation 模型,以管理 CodeDeploy 藍/綠部署。

當您使用 AWS CloudFormation 範本建立藍/綠資源的模型時,您可以在中建立堆疊更新, AWS CloudFormation 以更新您的工作集。生產流量會從服務的原始任務集轉移到替代任務集,可以一次全部、線性部署和封裝時間,或是使用 canary 部署。堆疊更新會啟動中 CodeDeploy的部署。您可以在中檢視部署狀態和歷程記錄 CodeDeploy,但不會在 AWS CloudFormation 範本之外建立或管理 CodeDeploy 資源。

注意

對於透過藍/綠部署 AWS CloudFormation,您不會建立 CodeDeploy 應用程式或部署群組。

此方法僅支援 Amazon ECS 藍色/綠色部署。如需透過藍/綠部署的更多資訊 AWS CloudFormation,請參閱透過以下方式建立亞馬遜ECS 藍色/綠色部署 AWS CloudFormation

我們希望傾聽您的意見

我們誠摯歡迎您提供意見回饋。要聯繫我們,請訪問 CodeDeploy 論壇

主題