

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

# 什麼是 CodeDeploy？
<a name="welcome"></a>

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

您可以部署幾乎無限制的各種應用程式內容，包括：
+ Code
+ 無伺服器 AWS Lambda 函數
+ Web 與組態檔案
+ Executables
+ 套件
+ 指令碼
+ 多媒體檔案

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

CodeDeploy 可讓您更輕鬆地：
+ 快速推出新的功能。
+ 更新 AWS Lambda 函數版本。
+ 避免在部署應用程式時停機。
+ 處理複雜的應用程式更新，而不會有許多與容易出錯的手動部署相關的風險。

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

CodeDeploy 可與各種系統搭配使用，以進行組態管理、來源控制、[持續整合](https://aws.amazon.com/devops/continuous-integration/)、[持續交付](https://aws.amazon.com/devops/continuous-delivery/)和持續部署。如需詳細資訊，請參閱[產品整合](https://aws.amazon.com/codedeploy/product-integrations/)。

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

**Topics**
+ [的優勢 AWS CodeDeploy](#benefits)
+ [CodeDeploy 運算平台概觀](#compute-platform)
+ [CodeDeploy 部署類型的概觀](#welcome-deployment-overview)
+ [我們希望傾聽您的意見](#welcome-contact-us)
+ [Primary Components](primary-components.md)
+ [Deployments](deployment-steps.md)
+ [Application Specification Files](application-specification-files.md)

## 的優勢 AWS CodeDeploy
<a name="benefits"></a>

CodeDeploy 提供以下優點：
+ **伺服器、無伺服器和容器應用程式**。CodeDeploy 可讓您在部署無伺服器 AWS Lambda 函數版本或 Amazon ECS 應用程式的伺服器和應用程式上部署傳統應用程式。
+ **自動化部署**。CodeDeploy 可完全自動化開發、測試和生產環境中的應用程式部署。CodeDeploy 會隨您的基礎設施擴展，讓您可以部署到一個執行個體或數千個執行個體。
+ **減少停機時間**。如果您的應用程式使用 EC2/現場部署運算平台，CodeDeploy 可協助最大化應用程式可用性。在就地部署期間，CodeDeploy 會在 Amazon EC2 執行個體上執行滾動更新。您可以指定一次要在離線時進行更新的執行個體數。在藍/綠部署期間，最新的應用程式修訂版已安裝在替代執行個體上。流量會依您的選擇，立刻或測試完新環境後，重新路由到這些執行個體。對於這兩種部署類型，CodeDeploy 會根據您設定的規則追蹤應用程式運作狀態。
+ **停止和復原**。如有錯誤，您可以自動或手動停止和回復部署。
+ **集中化控制**。您可以透過 CodeDeploy 主控台或 啟動和追蹤部署的狀態 AWS CLI。您會收到報告，其中列出每個應用程式修訂版的部署時間和 Amazon EC2 執行個體。
+ **易於採用**。CodeDeploy 與平台無關，可與任何應用程式搭配使用。您可以輕鬆重複使用您的設定程式碼。CodeDeploy 也可以與您的軟體版本程序或持續交付工具鏈整合。
+ **並行部署**。如果您有多個使用 EC2/現場部署運算平台的應用程式，CodeDeploy 可以將它們同時部署到相同的一組執行個體。



## CodeDeploy 運算平台概觀
<a name="compute-platform"></a>

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

  使用 EC2/現場部署運算平台的部署會使用就地部署或藍/綠部署類型，管理流量導向執行個體的方式。如需詳細資訊，請參閱[CodeDeploy 部署類型的概觀](#welcome-deployment-overview)。
+ **AWS Lambda**：用於部署由更新版本的 Lambda 函數組成的應用程式。 會在由高可用性運算結構組成的無伺服器運算環境中 AWS Lambda 管理 Lambda 函數。運算資源的所有管理都會由 執行 AWS Lambda。如需詳細資訊，請參閱[無伺服器運算和應用程式](https://aws.amazon.com/serverless/)。如需 AWS Lambda 和 Lambda 函數的詳細資訊，請參閱 [AWS Lambda](https://aws.amazon.com/lambda/)。

  您可以選擇 Canary、線性或all-at-once組態，以管理流量在部署期間轉移到更新 Lambda 函數版本的方式。
+ **Amazon ECS**：用來將 Amazon ECS 容器化應用程式部署為任務集。CodeDeploy 透過安裝更新版本的應用程式作為新的替換任務集來執行藍/綠部署。CodeDeploy 會將生產流量從原始應用程式任務集重新路由至替代任務集。原始任務集會在成功部署後終止。如需 Amazon ECS 的詳細資訊，請參閱 [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)。

  您可以透過選擇 Canary、線性或一次全部組態，管理部署期間將哪些流量轉移到已更新任務集的方式。
**注意**  
Amazon ECS 藍/綠部署支援使用 CodeDeploy 和 CloudFormation。後續各節將說明這些部署的詳細資訊。

下表說明 CodeDeploy 元件如何與每個運算平台搭配使用。如需詳細資訊，請參閱：
+  [在 CodeDeploy 中使用部署群組](deployment-groups.md) 
+  [在 CodeDeploy 中使用部署](deployments.md) 
+  [在 CodeDeploy 中使用部署組態](deployment-configurations.md) 
+  [使用 CodeDeploy 的應用程式修訂](application-revisions.md) 
+  [在 CodeDeploy 中使用應用程式](applications.md) 


| CodeDeploy 元件 | EC2/現場部署 | AWS Lambda | Amazon ECS | 
| --- | --- | --- | --- | 
| 部署群組 | 部署修訂版到一組執行個體。 | 在高可用性運算基礎設施上部署無伺服器 Lambda 函數的新版本。 | 使用容器化應用程式指定要部署為任務集的 Amazon ECS 服務、用於將流量提供給已部署應用程式的生產和選用測試接聽程式、何時重新路由流量和終止已部署應用程式的原始任務集，以及選用的觸發、警示和轉返設定。 | 
| 部署 | 部署包含應用程式及 AppSpec 檔案的新修訂版。AppSpec 指定如何部署應用程式到部署群組中的執行個體。 | 將生產流量從 Lambda 函數的一個版本轉移到相同函數的新版本。AppSpec 檔案會指定要部署的 Lambda 函數版本。 | 將 Amazon ECS 容器化應用程式的更新版本部署為新的替換任務集。CodeDeploy 會將生產流量從具有原始版本的任務集重新路由到具有更新版本的新替換任務集。部署完成時，原始任務設定將終止。 | 
| Deployment configuration (部署組態) | 決定部署速度和在部署期間的任何點都必須健康的最少執行個體數的設定。 | 決定流量如何轉移到更新 Lambda 函數版本的設定。 | 決定流量如何轉移到更新 Amazon ECS 任務集的設定。 | 
| 修訂 | AppSpec 檔案和應用程式檔案的組合，例如可執行檔、設定檔等。 | AppSpec 檔案，指定要在部署生命週期事件掛鉤期間執行驗證測試的 Lambda 函數和 Lambda 函數。 | AppSpec 檔案，指定：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/welcome.html) | 
| 應用程式 | 部署群組和修訂版的集合。EC2/現場部署應用程式使用 EC2/現場部署運算平台。 | 部署群組和修訂版的集合。用於 AWS Lambda 部署的應用程式會使用無伺服器 AWS Lambda 運算平台。 | 部署群組和修訂版的集合。用於 Amazon ECS 部署的應用程式會使用 Amazon ECS 運算平台。 | 

## CodeDeploy 部署類型的概觀
<a name="welcome-deployment-overview"></a>

CodeDeploy 提供兩種部署類型選項：
+ **就地部署**：部署群組中每個執行個體上的應用程式會停止、安裝最新的應用程式修訂版，並啟動和驗證應用程式的新版本。您可以使用負載平衡器，讓每個執行個體在其部署期間取消註冊，然後在部署完成後還原至服務。只有使用 EC2/現場部署運算平台的部署才能使用就地部署。如需就地部署的詳細資訊，請參閱 [就地部署概觀](#welcome-deployment-overview-in-place)。
**注意**  
AWS Lambda 和 Amazon ECS 部署無法使用就地部署類型。
+ **藍/綠部署**：部署的行為取決於您使用的運算平台：
  + **EC2/現場部署運算平台上的藍/綠**：部署群組 （原始環境） 中的執行個體會使用下列步驟，以不同的一組執行個體 （替代環境） 取代：
    + 為取代環境佈建執行個體。
    + 最新的應用程式修訂版會安裝在取代執行個體上。
    + 應用程式測試和系統驗證等活動會有選擇性的等待時間。
    + 替換環境中的執行個體會向一或多個 Elastic Load Balancing 負載平衡器註冊，導致流量重新路由至它們。原始環境中的執行個體會取消註冊，並可終止或繼續執行以供其他使用。
**注意**  
如果您使用 EC2/現場部署運算平台，請注意，藍/綠部署僅適用於 Amazon EC2 執行個體。
  + ** AWS Lambda 或 Amazon ECS 運算平台上的藍/綠**：流量會根據 **Canary**、**線性**或**all-at-once**組態遞增轉移。
  + **透過 進行藍/綠部署 CloudFormation**：流量會從您目前的資源轉移到已更新的資源，做為 CloudFormation 堆疊更新的一部分。目前僅支援 ECS 藍/綠部署。

  如需藍/綠部署的詳細資訊，請參閱 [藍/綠部署概觀](#welcome-deployment-overview-blue-green)。

**注意**  
使用 CodeDeploy 代理程式，您可以在登入的執行個體上執行部署，而不需要應用程式、部署群組或甚至 AWS 帳戶。如需相關資訊，請參閱[使用 CodeDeploy 代理程式來驗證本機電腦上的部署套件](deployments-local.md)。

**Topics**
+ [就地部署概觀](#welcome-deployment-overview-in-place)
+ [藍/綠部署概觀](#welcome-deployment-overview-blue-green)

### 就地部署概觀
<a name="welcome-deployment-overview-in-place"></a>

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

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

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

1. 接著，您將部署的相關資訊提供給 CodeDeploy，例如要從哪個 Amazon S3 儲存貯體或 GitHub 儲存庫提取修訂，以及要部署其內容的一組 Amazon EC2 執行個體。CodeDeploy 會呼叫一組*部署群組*的 Amazon EC2 執行個體。部署群組包含個別標記的 Amazon EC2 執行個體、Amazon EC2 Auto Scaling 群組中的 Amazon EC2 執行個體，或兩者。

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

1. 接著，每個執行個體上的 CodeDeploy 代理程式會輪詢 CodeDeploy，以判斷從指定的 Amazon S3 儲存貯體或 GitHub 儲存庫提取的內容和時間。

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

 CodeDeploy 會保留部署的記錄，讓您可以取得部署狀態、部署組態參數、執行個體運作狀態等。

### 藍/綠部署概觀
<a name="welcome-deployment-overview-blue-green"></a>

藍/綠部署可用來更新您的應用程式，同時將因新應用程式版本變更所造成的中斷降至最低。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 運算平台，您可以控制流量從原始任務集轉移到新任務集的方式。

使用 的藍/綠部署 CloudFormation 可以使用下列其中一種方法：
+ **CloudFormation 部署的 範本**：當您使用 CloudFormation 範本設定部署時，您的部署會由 CloudFormation 更新觸發。當您變更資源並上傳範本變更時， 中的堆疊更新會 CloudFormation 啟動新的部署。如需您可以在 CloudFormation 範本中使用的資源清單，請參閱 [CloudFormation CodeDeploy 參考的 範本](reference-cloudformation-templates.md)。
+ **透過 進行藍/綠部署 CloudFormation**：您可以使用 透過堆疊更新 CloudFormation 來管理藍/綠部署。除了在堆疊範本中指定流量路由和穩定設定之外，您還可以定義藍色和綠色資源。然後，如果您在堆疊更新期間更新選取的資源， CloudFormation 會產生所有必要的綠色資源、根據指定的流量路由參數轉移流量，以及刪除藍色資源。如需詳細資訊，請參閱[《 使用者指南》中的使用 CodeDeploy 自動化 Amazon ECS 藍/綠部署 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)。 *AWS CloudFormation *
**注意**  
僅支援 Amazon ECS 藍/綠部署。

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



#### AWS Lambda 或 Amazon ECS 運算平台上的藍/綠部署
<a name="blue-green-lambda-compute-type"></a>

如果您使用的是 AWS Lambda 或 Amazon ECS 運算平台，您必須指出流量如何從原始 AWS Lambda 函數或 Amazon ECS 任務集轉移到新的函數或任務集。若要指出流量如何轉移，您必須指定下列其中一個部署組態：
+ **Canary**
+ **線性**
+ **all-at-once**

如需如何在 Canary、線性或all-at-once部署組態中轉移流量的資訊，請參閱 [Deployment configuration (部署組態)](primary-components.md#primary-components-deployment-configuration)。

如需 Lambda 部署組態的詳細資訊，請參閱 [AWS Lambda 運算平台上的部署組態](deployment-configurations.md#deployment-configuration-lambda)。

如需 Amazon ECS 部署組態的詳細資訊，請參閱 [Amazon ECS 運算平台上的部署組態](deployment-configurations.md#deployment-configuration-ecs)。

#### EC2/內部部署運算平台上的藍/綠部署
<a name="blue-green-server-compute-type"></a>

**注意**  
您必須將 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 群組做為原始環境。第一次執行藍色/綠色部署時，通常會使用已在就地部署中使用的執行個體。

1. 在現有的 CodeDeploy 應用程式中，您可以建立藍/綠部署群組，除了就地部署所需的選項之外，您還可以指定下列項目：
   + 在藍/綠部署程序期間，將流量從原始環境路由至替代環境的負載平衡器或負載平衡器。
   + 是否要立即將流量重新路由至取代環境，或是等待您手動重新路由流量。
   + 將流量路由至取代執行個體的速度。
   + 是否終止或讓遭取代的執行個體繼續執行。

1. 您會建立此部署群組的部署，期間會發生下列事件：

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

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

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

   1. 替換環境中的執行個體會向 Elastic Load Balancing 負載平衡器註冊，且流量會開始路由至它們。

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

#### 透過 進行藍/綠部署 CloudFormation
<a name="blue-green-cfn-config-type"></a>

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

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

**注意**  
對於透過 的藍/綠部署 CloudFormation，您不會建立 CodeDeploy 應用程式或部署群組。

此方法僅支援 Amazon ECS 藍/綠部署。如需透過 進行藍/綠部署的詳細資訊 CloudFormation，請參閱 [透過 建立 Amazon ECS 藍/綠部署 CloudFormation](deployments-create-ecs-cfn.md)。

## 我們希望傾聽您的意見
<a name="welcome-contact-us"></a>

我們誠摯歡迎您提供意見回饋。若要聯絡我們，請造訪 [ CodeDeploy 論壇](https://forums.aws.amazon.com/forum.jspa?forumID=179)。

**主題**
+ [Primary Components](primary-components.md)
+ [Deployments](deployment-steps.md)
+ [Application Specification Files](application-specification-files.md)