

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

# 什麼是 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)

# CodeDeploy 主要元件
<a name="primary-components"></a>

開始使用服務之前，您應該先熟悉 CodeDeploy 部署程序的主要元件。

**Topics**
+ [應用程式](#primary-components-application)
+ [運算平台](#primary-components-compute-platform)
+ [Deployment configuration (部署組態)](#primary-components-deployment-configuration)
+ [部署群組](#primary-components-deployment-group)
+ [部署類型](#primary-components-deployment-type)
+ [IAM 執行個體描述檔](#primary-components-iam-instance-profile)
+ [修訂](#primary-components-revision)
+ [服務 角色](#primary-components-service-role)
+ [目標修訂版](#primary-components-target-revision)
+ [其他元件](#primary-components-other-components)

## 應用程式
<a name="primary-components-application"></a>

*應用程式*是可唯一識別您要部署之應用程式的名稱。CodeDeploy 使用此名稱做為容器，以確保在部署期間參考正確的修訂、部署組態和部署群組組合。

## 運算平台
<a name="primary-components-compute-platform"></a>

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

  使用 EC2/現場部署運算平台的部署會使用就地部署或藍/綠部署類型，管理流量導向執行個體的方式。如需詳細資訊，請參閱[CodeDeploy 部署類型的概觀](welcome.md#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、線性或一次全部組態，管理部署期間將哪些流量轉移到已更新任務集的方式。

**注意**  
透過 CodeDeploy 和 支援 Amazon ECS 藍/綠部署 CloudFormation。後續各節將說明這些部署的詳細資訊。

## Deployment configuration (部署組態)
<a name="primary-components-deployment-configuration"></a>

*部署組態*是一組部署規則，以及 CodeDeploy 在部署期間使用的部署成功和失敗條件。如果您的部署使用 EC2/現場部署運算平台，您可以為部署指定運作狀態良好的執行個體數目下限。如果您的部署使用 AWS Lambda 或 Amazon ECS 運算平台，您可以指定流量如何路由到更新的 Lambda 函數或 ECS 任務集。

如需為使用 EC2/現場部署運算平台的部署指定運作狀態良好主機數目下限的詳細資訊，請參閱 [關於運作狀態良好的執行個體數量下限](instances-health.md#minimum-healthy-hosts)。

下列部署組態指定如何在使用 Lambda 或 ECS 運算平台的部署期間路由流量：
+ **Canary**：流量以兩個增量轉移。您可以從預先定義的 Canary 選項中進行選擇，這些選項會指定在第一個增量中轉移到更新的 Lambda 函數或 ECS 任務集的流量百分比，以及以分鐘為單位的間隔，之後剩餘的流量會以第二個增量轉移。
+ **Linear (線性)**：流量以每個增量之間的相等分鐘數以同等增量轉移。您可從預先指定的線性選項中指定每次增量的流量轉移百分比例，以及在每個增量之間的分鐘數。
+ **All-at-once**：所有流量都會一次從原始 Lambda 函數或 ECS 任務集轉移到更新的函數或任務集。

## 部署群組
<a name="primary-components-deployment-group"></a>

*部署群組*是一組個別執行個體。部署群組包含個別標記的執行個體、Amazon EC2 Auto Scaling 群組中的 Amazon EC2 執行個體，或兩者。如需 Amazon EC2 執行個體標籤的相關資訊，請參閱[使用主控台處理標籤](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#Using_Tags_Console)。如需內部部署執行個體的資訊，請參閱「[使用 CodeDeploy 的內部部署執行個體](instances-on-premises.md)」。如需 Amazon EC2 Auto Scaling 的詳細資訊，請參閱 [將 CodeDeploy 與 Amazon EC2 Auto Scaling 整合](integrations-aws-auto-scaling.md)。

## 部署類型
<a name="primary-components-deployment-type"></a>

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

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

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

## IAM 執行個體描述檔
<a name="primary-components-iam-instance-profile"></a>

*IAM 執行個體描述*檔是您連接到 Amazon EC2 執行個體的 IAM 角色。此設定檔包含存取存放應用程式之 Amazon S3 儲存貯體或 GitHub 儲存庫所需的許可。如需詳細資訊，請參閱[步驟 4：為您的 Amazon EC2 執行個體建立 IAM 執行個體描述檔](getting-started-create-iam-instance-profile.md)。

## 修訂
<a name="primary-components-revision"></a>

*修訂*是您應用程式的版本。 AWS Lambda 部署修訂是 YAML 或 JSON 格式的檔案，可指定要部署之 Lambda 函數的相關資訊。EC2/現場部署修訂是封存檔案，其中包含來源內容 （原始程式碼、網頁、可執行檔和部署指令碼） 和應用程式規格檔案 (AppSpec 檔案）。 AWS Lambda 修訂可以存放在 Amazon S3 儲存貯體中。EC2/現場部署修訂版存放在 Amazon S3 儲存貯體或 GitHub 儲存庫中。對於 Amazon S3，修訂由其 Amazon S3 物件金鑰及其 ETag、版本或兩者唯一識別。對於 GitHub，修訂版的唯一識別則是依照其遞交 ID。

## 服務 角色
<a name="primary-components-service-role"></a>

*服務角色*是一種 IAM 角色，可授予 AWS 服務的許可，使其可以存取 AWS 資源。您連接到服務角色的政策會決定服務可存取哪些 AWS 資源，以及該服務可以對這些資源執行的動作。對於 CodeDeploy，服務角色用於下列項目：
+ 讀取套用至執行個體的標籤或與執行個體相關聯的 Amazon EC2 Auto Scaling 群組名稱。這可讓 CodeDeploy 識別可部署應用程式的執行個體。
+ 在執行個體、Amazon EC2 Auto Scaling 群組和 Elastic Load Balancing 負載平衡器上執行操作。
+ 將資訊發佈至 Amazon SNS 主題，以便在指定的部署或執行個體事件發生時傳送通知。
+ 擷取 CloudWatch 警示的相關資訊，以設定部署的警示監控。

如需詳細資訊，請參閱[步驟 2：建立 CodeDeploy 的服務角色](getting-started-create-service-role.md)。

## 目標修訂版
<a name="primary-components-target-revision"></a>

*目標修訂*是您上傳至儲存庫且想要部署至部署群組中執行個體的最新版本應用程式修訂。換言之，就是目前鎖定為部署目標的應用程式修訂版。這也是會拿來自動部署的修訂版。

## 其他元件
<a name="primary-components-other-components"></a>

如需 CodeDeploy 工作流程中其他元件的資訊，請參閱下列主題：
+ [選擇 CodeDeploy 儲存庫類型](application-revisions-repository-type.md)
+  [CodeDeploy 部署](deployment-steps.md)
+  [CodeDeploy 應用程式規格 (AppSpec) 檔案](application-specification-files.md)
+  [CodeDeploy 執行個體運作狀態](instances-health.md)
+  [使用 CodeDeploy 代理程式](codedeploy-agent.md)
+  [使用 CodeDeploy 的內部部署執行個體](instances-on-premises.md)

# CodeDeploy 部署
<a name="deployment-steps"></a>

本主題提供 CodeDeploy 中部署元件和工作流程的相關資訊。部署程序會根據您用於部署的運算平台或部署方法 (Lambda、Amazon ECS、EC2/內部部署或透過 AWS CloudFormation) 而有所不同。

**Topics**
+ [AWS Lambda 運算平台上的部署](deployment-steps-lambda.md)
+ [Amazon ECS 運算平台上的部署](deployment-steps-ecs.md)
+ [EC2/現場部署運算平台上的部署](deployment-steps-server.md)

# AWS Lambda 運算平台上的部署
<a name="deployment-steps-lambda"></a>

本主題提供使用 AWS Lambda 運算平台之 CodeDeploy 部署元件和工作流程的相關資訊。

**Topics**
+ [AWS Lambda 運算平台上的部署工作流程](#deployment-process-workflow-lambda)
+ [上傳您的應用程式修訂版](#deployment-steps-uploading-your-app-lambda)
+ [建立您的應用程式和部署群組](#deployment-steps-registering-app-deployment-groups-lambda)
+ [部署您的應用程式修訂版](#deployment-steps-deploy-lambda)
+ [更新您的應用程式](#deployment-steps-updating-your-app-lambda)
+ [已停止和失敗的部署](#deployment-stop-fail-lambda)
+ [重新部署和部署轉返](#deployment-rollback-lambda)

## AWS Lambda 運算平台上的部署工作流程
<a name="deployment-process-workflow-lambda"></a>

下圖顯示新的及更新 AWS Lambda 函數部署中的主要步驟。

![\[CodeDeploy 如何部署新的或更新的 AWS Lambda 函數。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/deployment-process-lambda.png)


這些步驟包括：

1. 建立應用程式並為其命名，而其名稱需唯一識別您要部署的應用程式修訂。若要部署 Lambda 函數，請在建立應用程式時選擇 AWS Lambda 運算平台。CodeDeploy 會在部署期間使用此名稱，以確保其參考正確的部署元件，例如部署群組、部署組態和應用程式修訂版。如需詳細資訊，請參閱[使用 CodeDeploy 建立應用程式](applications-create.md)。

1. 指定部署群組的名稱來設定部署群組。

1. 選擇部署組態，以指定流量如何從原始 AWS Lambda 函數版本轉移到新的 Lambda 函數版本。如需詳細資訊，請參閱[使用 CodeDeploy 檢視部署組態詳細資訊](deployment-configurations-view-details.md)。

1. 將*應用程式規格檔案* (AppSpec 檔案） 上傳至 Amazon S3。AppSpec 檔案會指定用來驗證部署的 Lambda 函數版本和 Lambda 函數。如果您不想建立 AppSpec 檔案，您可以使用 YAML 或 JSON，直接在主控台中指定 Lambda 函數版本和 Lambda 部署驗證函數。如需詳細資訊，請參閱[使用 CodeDeploy 的應用程式修訂](application-revisions.md)。

1. 將應用程式修訂版部署至部署群組。 AWS CodeDeploy 部署您指定的 Lambda 函數修訂版。流量會使用您在建立應用程式時選擇的部署 AppSpec 檔案，轉移到 Lambda 函數修訂版。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署](deployments-create.md)。

1. 檢查部署結果。如需詳細資訊，請參閱[監控 CodeDeploy 中的部署](monitoring.md)。

## 上傳您的應用程式修訂版
<a name="deployment-steps-uploading-your-app-lambda"></a>

將 AppSpec 檔案放在 Amazon S3 中，或直接輸入至主控台或 AWS CLI。如需詳細資訊，請參閱[CodeDeploy 應用程式規格 (AppSpec) 檔案](application-specification-files.md)。

## 建立您的應用程式和部署群組
<a name="deployment-steps-registering-app-deployment-groups-lambda"></a>

 AWS Lambda 運算平台上的 CodeDeploy 部署群組可識別一或多個 AppSpec 檔案的集合。每個 AppSpec 檔案都可以部署一個 Lambda 函數版本。部署群組也會定義未來部署的一組組態選項 (例如警示和轉返組態)。

## 部署您的應用程式修訂版
<a name="deployment-steps-deploy-lambda"></a>

現在您已準備好將 AppSpec 檔案中指定的函數修訂版部署至部署群組。您可以使用 CodeDeploy 主控台或 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令。您可以指定多個參數來控制部署 (包含修訂、部署群組和部署組態)。

## 更新您的應用程式
<a name="deployment-steps-updating-your-app-lambda"></a>

您可以更新應用程式，然後使用 CodeDeploy 主控台或呼叫 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令來推送修訂。

## 已停止和失敗的部署
<a name="deployment-stop-fail-lambda"></a>

您可以使用 CodeDeploy 主控台或 [stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html) 命令來停止部署。當您嘗試停止部署時，會發生下列三者之一：
+ 部署停止，而且操作傳回成功狀態。在此情況下，不需要在已停止部署的部署群組上執行其他部署生命週期事件。
+ 此部署不會立即停止，而且操作傳回擱置中狀態。在此情況下，一些部署生命週期事件可能仍然在部署群組上執行。擱置中操作完成之後，後續呼叫停止部署會傳回成功狀態。
+ 部署無法停止，而且操作傳回錯誤。如需詳細資訊，請參閱 AWS CodeDeploy API 參考中的 [ErrorInformation](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ErrorInformation.html) 和[常見錯誤](https://docs.aws.amazon.com/codedeploy/latest/APIReference/CommonErrors.html)。

失敗的部署可能導致已執行某些部署生命週期事件，就像已停止的部署一樣。若要了解部署失敗的原因，您可以使用 CodeDeploy 主控台，或從失敗的部署分析日誌檔案資料。如需詳細資訊，請參閱[應用程式修訂和日誌檔案清除](codedeploy-agent.md#codedeploy-agent-revisions-logs-cleanup)及[檢視 CodeDeploy EC2/現場部署的日誌資料](deployments-view-logs.md)。

## 重新部署和部署轉返
<a name="deployment-rollback-lambda"></a>

CodeDeploy 透過將先前部署的修訂重新部署為新部署來實作轉返。

您可以設定部署群組以在符合特定條件時自動轉返部署 (包含部署失敗或符合警示監控閾值時)。您也可以覆寫針對個別部署中部署群組所指定的轉返設定。

您也可以手動重新部署先前部署的修訂，以選擇轉返失敗部署。

在所有情況下，新的或轉返的部署會獲指派其專屬部署 ID。您可以在 CodeDeploy 主控台中檢視的部署清單會顯示哪些是自動部署的結果。

如需詳細資訊，請參閱[使用 CodeDeploy 重新部署以及復原部署](deployments-rollback-and-redeploy.md)。

# Amazon ECS 運算平台上的部署
<a name="deployment-steps-ecs"></a>

本主題提供使用 Amazon ECS 運算平台之 CodeDeploy 部署元件和工作流程的相關資訊。

**Topics**
+ [開始 Amazon ECS 部署之前](#deployment-steps-prerequisites-ecs)
+ [Amazon ECS 運算平台上的部署工作流程 （高階）](#deployment-process-workflow-ecs)
+ [Amazon ECS 部署期間會發生什麼情況](#deployment-steps-what-happens)
+ [上傳您的應用程式修訂版](#deployment-steps-uploading-your-app-ecs)
+ [建立您的應用程式和部署群組](#deployment-steps-registering-app-deployment-groups-ecs)
+ [部署您的應用程式修訂版](#deployment-steps-deploy-ecs)
+ [更新您的應用程式](#deployment-steps-updating-your-app-ecs)
+ [已停止和失敗的部署](#deployment-stop-fail-ecs)
+ [重新部署和部署轉返](#deployment-rollback-ecs)
+ [透過 的 Amazon ECS 藍/綠部署 AWS CloudFormation](#deployment-steps-ecs-cf)

## 開始 Amazon ECS 部署之前
<a name="deployment-steps-prerequisites-ecs"></a>

 在開始 Amazon ECS 應用程式部署之前，您必須備妥下列項目。當您建立部署群組時，會指定一些需求，而 AppSpec 檔案中會指定一些需求。


****  

| 需求 | 指定位置 | 
| --- | --- | 
| Amazon ECS 叢集 | 部署群組 | 
| Amazon ECS 服務 | 部署群組 | 
| Application Load Balancer 或 Network Load Balancer | 部署群組 | 
| 生產接聽程式 | 部署群組 | 
| 測試接聽程式 (選用) | 部署群組 | 
| 兩個目標群組 | 部署群組 | 
| Amazon ECS 任務定義 | AppSpec 檔案 | 
| 容器名稱 | AppSpec 檔案 | 
| 容器連接埠 | AppSpec 檔案 | 

**Amazon ECS 叢集**  
Amazon ECS *叢集*是任務或服務的邏輯分組。您可以在建立 CodeDeploy 應用程式部署群組時，指定包含 Amazon ECS 服務的 Amazon ECS 叢集。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS 叢集](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_clusters.html)。 **

**Amazon ECS 服務**  
Amazon ECS *服務*會在 Amazon ECS 叢集中維護和執行任務定義的指定執行個體。必須啟用 CodeDeploy 的 Amazon ECS 服務。根據預設，Amazon ECS 部署會啟用 Amazon ECS 服務。建立部署群組時，您可以選擇部署 Amazon ECS 叢集中的 Amazon ECS 服務。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html) *服務*。

**Application Load Balancer 或 Network Load Balancer**  
 您必須將 Elastic Load Balancing 與要透過 Amazon ECS 部署更新的 Amazon ECS 服務搭配使用。您可以使用 Application Load Balancer 或 Network Load Balancer。我們建議您使用 Application Load Balancer，以便充分利用動態連接埠映射、路徑型路由和優先順序規則等功能。您可以在建立 CodeDeploy 應用程式部署群組時指定負載平衡器。如需詳細資訊，請參閱《*Amazon Elastic Container Service 使用者指南*》中的[設定 CodeDeploy Amazon ECS 部署的負載平衡器、目標群組和接聽程式](deployment-groups-create-load-balancer-for-ecs.md)和[建立負載平衡器](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-load-balancer.html)。

**一或兩個接聽程式**  
*接聽程式*供負載平衡器用來將流量導向到您的目標群組。一個生產接聽程式為必要項目。您可以指定選用的第二個測試接聽程式，負責在您執行驗證測試時引導流量到您的替換任務。當您建立部署群組時，您指定一或兩個接聽程式。如果您使用 Amazon ECS 主控台來建立 Amazon ECS 服務，則會為您建立接聽程式。如需詳細資訊，請參閱 *Elastic Load Balancing 使用者指南*中的[應用程式負載平衡器接聽程式](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listener.html)，以及《*Amazon Elastic Container Service 使用者指南*》中的[建立服務](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service.html)。

**兩個 Amazon ECS 目標群組**  
 *目標群組*是用於將流量路由到已註冊的目標。Amazon ECS 部署需要兩個目標群組：一個用於 Amazon ECS 應用程式的原始任務集，另一個用於其替換任務集。在部署期間，CodeDeploy 會建立替代任務集，並將流量從原始任務集重新路由至新的任務集。您可以在建立 CodeDeploy 應用程式部署群組時指定目標群組。  
 在部署期間，CodeDeploy 會判斷哪個目標群組與 Amazon ECS 服務中具有 狀態 `PRIMARY`（這是原始任務集） 的任務集相關聯，並將一個目標群組與其建立關聯，然後將另一個目標群組與替換任務集建立關聯。如果您進行其他部署，與目前部署之原始任務集相關聯的目標群組會與下一個部署的替換任務集建立關聯。如需詳細資訊，請參閱 *Elastic Load Balancing 使用者指南*中的[應用程式負載平衡器的目標群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html)。

**Amazon ECS 任務定義**  
 執行包含 Amazon ECS 應用程式的 Docker 容器時，需要*任務定義*。您可以在 CodeDeploy 應用程式 AppSpec 檔案中指定任務定義的 ARN。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》中的 Amazon ECS 任務定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)和 [Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。 **

**Amazon ECS 應用程式的容器**  
 Docker 容器**是一個軟體單位，將程式碼和其相依性封裝，讓您的應用程式能夠執行。容器會隔離您的應用程式，讓其在不同的運算環境中執行。您的負載平衡器會將流量導向 Amazon ECS 應用程式任務集中的容器。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定容器的名稱。AppSpec 檔案中指定的容器必須是 Amazon ECS 任務定義中指定的其中一個容器。如需詳細資訊，請參閱《[Amazon Elastic Container Service 使用者指南》和》中的什麼是](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) *Amazon Elastic Container Service*？[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。

**取代任務集的連接埠**  
 在 Amazon ECS 部署期間，您的負載平衡器會將流量導向 CodeDeploy 應用程式 AppSpec 檔案中指定容器上的此*連接埠*。您可以在 CodeDeploy 應用程式的 AppSpec 檔案中指定連接埠。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'resources' 區段](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)。

## Amazon ECS 運算平台上的部署工作流程 （高階）
<a name="deployment-process-workflow-ecs"></a>

下圖顯示部署更新 Amazon ECS 服務的主要步驟。

![\[CodeDeploy 如何將應用程式部署為 Amazon ECS 中的任務集。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/deployment-process-ecs.png)


這些步驟包括：

1. 透過指定可唯一代表您要部署之內容的名稱來建立 AWS CodeDeploy 應用程式。若要部署 Amazon ECS 應用程式，請在 AWS CodeDeploy 應用程式中選擇 Amazon ECS 運算平台。CodeDeploy 在部署期間使用 應用程式來參考正確的部署元件，例如部署群組、目標群組、接聽程式和流量重新路由行為，以及應用程式修訂。如需詳細資訊，請參閱[使用 CodeDeploy 建立應用程式](applications-create.md)。

1. 指定下列項目來設定部署群組：
   +  部署群組名稱。
   +  您的 Amazon ECS 叢集和服務名稱。Amazon ECS 服務的部署控制器必須設定為 CodeDeploy。
   +  生產接聽程式、選用的測試接聽程式和部署期間使用的目標群組。
   +  部署設定，例如何時將生產流量重新路由至 Amazon ECS 服務中的替代 Amazon ECS 任務集，以及何時終止 Amazon ECS 服務中的原始 Amazon ECS 任務集。
   +  選用設定，例如觸發條件、警示和轉返行為。

1. 指定*應用程式規格檔案* (AppSpec 檔案）。您可以將其上傳到 Amazon S3，以 YAML 或 JSON 格式在主控台中輸入，或使用 AWS CLI 或 SDK 指定它。AppSpec 檔案會指定部署的 Amazon ECS 任務定義、用於路由流量的容器名稱和連接埠映射，以及部署生命週期掛鉤後執行的 Lambda 函數。容器名稱必須是 Amazon ECS 任務定義中的容器。如需詳細資訊，請參閱[使用 CodeDeploy 的應用程式修訂](application-revisions.md)。

1. 將應用程式 revision. AWS CodeDeploy reroutes 流量從 Amazon ECS 服務中任務集的原始版本部署到新的替代任務集。部署群組中指定的目標群組是用於為原始和替換任務集提供流量。部署完成後，原始任務集會終止。您可以指定選用的測試接聽程式，在將流量重新路由到替換版本之前，為您的替換版本提供測試流量。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署](deployments-create.md)。

1. 檢查部署結果。如需詳細資訊，請參閱[監控 CodeDeploy 中的部署](monitoring.md)。

## Amazon ECS 部署期間會發生什麼情況
<a name="deployment-steps-what-happens"></a>

在使用測試接聽程式的 Amazon ECS 部署開始之前，您必須設定其元件。如需詳細資訊，請參閱[開始 Amazon ECS 部署之前](#deployment-steps-prerequisites-ecs)。

 下圖顯示當 Amazon ECS 部署準備好啟動時，這些元件之間的關係。

![\[當 Amazon ECS 部署準備好啟動時，負載平衡器、接聽程式、目標群組和任務集之間的關係。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


部署開始，部署生命週期事件開始逐一執行。有些生命週期事件是只會執行 AppSpec 檔案中指定之 Lambda 函數的勾點。下表中的部署生命週期事件依其執行順序列出。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)。


| 生命週期事件 | 生命週期事件動作 | 
| --- | --- | 
| BeforeInstall (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| 安裝 | 設定替換任務集。 | 
| AfterInstall (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| AllowTestTraffic | 將流量從測試接聽程式路由到目標群組 2。 | 
| AfterAllowTestTraffic (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| BeforeAllowTraffic (Lambda 函數的勾點） | 執行 Lambda 函數。 | 
| AllowTraffic | 將流量從生產接聽程式路由到目標群組 2。 | 
| AfterAllowTraffic | 執行 Lambda 函數。 | 



**注意**  
勾點中的 Lambda 函數是選用的。

1. <a name="ecs-before-install"></a>

****

   執行 AppSpec 檔案中`BeforeInstall`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-install"></a>

****

   在`Install` 生命週期事件期間：

   1.  替代任務集會在您的 Amazon ECS 服務中建立。

   1.  更新的容器化應用程式會安裝到替換任務集。

   1.  第二個目標群組與替換任務集相關聯。

    下圖顯示具有新替代任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。(應用程式可以有任何數量的任務。) 第二個目標群組現在與替換任務集相關聯。  
![\[具有新替換任務集的部署元件。容器化應用程式在此任務集中。任務集包含三個任務。第二個目標群組現在與替換任務集相關聯。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-2.png)

1. <a name="ecs-after-install"></a>

****

   執行 AppSpec 檔案中`AfterInstall`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-allow-test-traffic"></a>

****

   已叫用 `AllowTestTraffic` 事件。在這個生命週期事件期間，測試接聽程式將流量路由到更新的容器化應用程式。  
![\[測試接聽程式會將流量路由到更新的容器化應用程式。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-3.png)

1. <a name="ecs-after-allow-test-traffic"></a>

****

   執行 AppSpec 檔案中`AfterAllowTestTraffic`掛鉤中指定的任何 Lambda 函數。Lambda 函數可以使用測試流量驗證部署。例如，Lambda 函數可以為測試接聽程式提供流量，以及追蹤來自替代任務集的指標。如果已設定轉返，您可以設定 CloudWatch 警示，在 Lambda 函數中的驗證測試失敗時觸發轉返。

    驗證測試完成後，會發生以下其中一種情況：
   +  如果驗證失敗而轉返已設定，則會將部署狀態標示為 `Failed`，且元件在部署開始時恢復到他們的狀態。
   +  如果驗證失敗而轉返未設定，則會將部署狀態標示為 `Failed`，且元件會維持他們的目前狀態。
   +  如果驗證成功，部署會繼續至 `BeforeAllowTraffic` 勾點 。

    如需詳細資訊，請參閱[在 CodeDeploy 中使用 CloudWatch 警示監控部署](monitoring-create-alarms.md)、[自動轉返](deployments-rollback-and-redeploy.md#deployments-rollback-and-redeploy-automatic-rollbacks)及[設定部署群組的進階選項](deployment-groups-configure-advanced-options.md)。

1. <a name="ecs-before-allow-traffic"></a>

****

   執行 AppSpec 檔案中`BeforeAllowTraffic`掛鉤中指定的任何 Lambda 函數。

1. <a name="ecs-allow-traffic"></a>

****

   已叫用 `AllowTraffic` 事件。系統會將生產流量從原始任務集重新路由到替換任務集。下圖顯示接收生產流量的替換任務集。  
![\[替換任務集會接收生產流量。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-4.png)

1. <a name="ecs-after-allow-traffic"></a>

****

   執行 AppSpec 檔案中`AfterAllowTraffic`掛鉤中指定的任何 Lambda 函數。

1. 

****

   所有事件成功後，部署狀態設定為 `Succeeded`，而原始任務集則會移除。  
![\[所有事件都成功。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)

## 上傳您的應用程式修訂版
<a name="deployment-steps-uploading-your-app-ecs"></a>

將 AppSpec 檔案放在 Amazon S3 中，或直接輸入至主控台或 AWS CLI。如需詳細資訊，請參閱[CodeDeploy 應用程式規格 (AppSpec) 檔案](application-specification-files.md)。

## 建立您的應用程式和部署群組
<a name="deployment-steps-registering-app-deployment-groups-ecs"></a>

Amazon ECS 運算平台上的 CodeDeploy 部署群組會識別接聽程式，為更新的 Amazon ECS 應用程式和部署期間使用的兩個目標群組提供流量。部署群組也會定義一組組態選項，例如警示和轉返組態。

## 部署您的應用程式修訂版
<a name="deployment-steps-deploy-ecs"></a>

現在您已準備好部署部署群組中指定的更新 Amazon ECS 服務。您可以使用 CodeDeploy 主控台或 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令。您可以指定參數來控制部署，包含修訂和部署群組。

## 更新您的應用程式
<a name="deployment-steps-updating-your-app-ecs"></a>

您可以更新應用程式，然後使用 CodeDeploy 主控台或呼叫 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令來推送修訂。

## 已停止和失敗的部署
<a name="deployment-stop-fail-ecs"></a>

您可以使用 CodeDeploy 主控台或 [stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html) 命令來停止部署。當您嘗試停止部署時，會發生下列三者之一：
+ 部署停止，而且操作傳回成功狀態。在此情況下，不需要在已停止部署的部署群組上執行其他部署生命週期事件。
+ 此部署不會立即停止，而且操作傳回擱置中狀態。在此情況下，一些部署生命週期事件可能仍然在部署群組上執行。擱置中操作完成之後，後續呼叫停止部署會傳回成功狀態。
+ 部署無法停止，而且操作傳回錯誤。如需詳細資訊，請參閱 AWS CodeDeploy API 參考中的[錯誤資訊和](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ErrorInformation.html)[常見錯誤](https://docs.aws.amazon.com/codedeploy/latest/APIReference/CommonErrors.html)。

## 重新部署和部署轉返
<a name="deployment-rollback-ecs"></a>

CodeDeploy 透過將流量從替代任務集重新路由到原始任務集來實作轉返。

您可以設定部署群組以在符合特定條件時自動轉返部署 (包含部署失敗或符合警示監控閾值時)。您也可以覆寫針對個別部署中部署群組所指定的轉返設定。

您也可以手動重新部署先前部署的修訂，以選擇轉返失敗部署。

在所有情況下，新的或轉返的部署會獲指派其專屬部署 ID。CodeDeploy 主控台會顯示自動部署結果的部署清單。

如果您重新部署，與目前部署之原始任務集相關聯的目標群組會與重新部署的替換任務集建立關聯。

如需詳細資訊，請參閱[使用 CodeDeploy 重新部署以及復原部署](deployments-rollback-and-redeploy.md)。

## 透過 的 Amazon ECS 藍/綠部署 AWS CloudFormation
<a name="deployment-steps-ecs-cf"></a>

您可以使用 透過 CodeDeploy AWS CloudFormation 管理 Amazon ECS 藍/綠部署。如需詳細資訊，請參閱[透過 建立 Amazon ECS 藍/綠部署 CloudFormation](deployments-create-ecs-cfn.md)。

**注意**  
在亞太區域 （大阪） 區域 CloudFormation 無法使用 管理 Amazon ECS 藍/綠部署。

# EC2/現場部署運算平台上的部署
<a name="deployment-steps-server"></a>

本主題提供使用 EC2/現場部署運算平台之 CodeDeploy 部署元件和工作流程的相關資訊。如需藍/綠部署的資訊，請參閱[藍/綠部署概觀](welcome.md#welcome-deployment-overview-blue-green)。

**Topics**
+ [EC2/內部部署運算平台上的部署元件](#deployment-steps-components-server)
+ [EC2/內部部署運算平台上的部署工作流程](#deployment-steps-workflow)
+ [設定執行個體](#deployment-steps-setting-up-instances)
+ [上傳您的應用程式修訂版](#deployment-steps-uploading-your-app)
+ [建立您的應用程式和部署群組](#deployment-steps-registering-app-deployment-groups)
+ [部署您的應用程式修訂版](#deployment-steps-deploy)
+ [更新您的應用程式](#deployment-steps-updating-your-app)
+ [已停止和失敗的部署](#deployment-stop-fail)
+ [重新部署和部署轉返](#deployment-rollback)

## EC2/內部部署運算平台上的部署元件
<a name="deployment-steps-components-server"></a>

下圖顯示 EC2/現場部署運算平台上 CodeDeploy 部署中的元件。

![\[在 EC2/現場部署運算平台上的 CodeDeploy 部署中的元件。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/deployment-components-workflow.png)


## EC2/內部部署運算平台上的部署工作流程
<a name="deployment-steps-workflow"></a>

下圖顯示應用程式修訂部署中的重要步驟：

![\[應用程式修訂版部署的主要步驟。\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/images/deployment-process.png)


這些步驟包括：

1. 建立應用程式並為其命名，以唯一識別您要部署的應用程式修訂版，以及應用程式的運算平台。CodeDeploy 會在部署期間使用此名稱，以確保其參考正確的部署元件，例如部署群組、部署組態和應用程式修訂版。如需詳細資訊，請參閱[使用 CodeDeploy 建立應用程式](applications-create.md)。

1. 指定部署類型以及您要部署應用程式修訂的執行個體，來設定部署群組。就地部署會使用最新應用程式修訂來更新執行個體。藍/綠部署會使用負載平衡器來註冊部署群組的一組替換執行個體，並取消註冊原始執行個體。

   您可以指定套用至執行個體、Amazon EC2 Auto Scaling 群組名稱或兩者的標籤。

   如果您在部署群組中指定一組標籤，CodeDeploy 會部署到至少已套用其中一個指定標籤的執行個體。如果您指定兩個或多個標籤群組，CodeDeploy 只會部署到符合每個標籤群組條件的執行個體。如需詳細資訊，請參閱[CodeDeploy 中部署群組的標記執行個體](instances-tagging.md)。

   在所有情況下，執行個體都必須設定為在部署中使用 （也就是必須加上標籤或屬於 Amazon EC2 Auto Scaling 群組），並安裝和執行 CodeDeploy 代理程式。

   我們為您提供 CloudFormation 範本，您可以用來根據 Amazon Linux 或 Windows Server 快速設定 Amazon EC2 執行個體。我們也為您提供獨立的 CodeDeploy 代理程式，讓您可以在 Amazon Linux、Ubuntu Server、Red Hat Enterprise Linux (RHEL) 或 Windows Server 執行個體上安裝它。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署群組](deployment-groups-create.md)。

   您還可以指定下列選項：
   + **Amazon SNS 通知**。建立在部署和執行個體中發生指定事件時，將通知傳送給 Amazon SNS 主題訂閱者的觸發條件，例如成功或失敗事件。如需詳細資訊，請參閱[使用 Amazon SNS 事件通知監控部署](monitoring-sns-event-notifications.md)。
   + **警示類型部署管理**。實作 Amazon CloudWatch 警示監控，在指標超過或低於 CloudWatch 中設定的閾值時停止部署。
   + **自動部署轉返**。設定部署，以在部署失敗或符合警示閾值時，自動轉返先前已知良好的修訂。

1. 指定部署組態以指出應用程式修訂應同時部署至多少個執行個體，以及說明部署的成功和失敗狀況。如需詳細資訊，請參閱[使用 CodeDeploy 檢視部署組態詳細資訊](deployment-configurations-view-details.md)。

1. 將應用程式修訂版上傳至 Amazon S3 或 GitHub。除了您要部署的檔案，以及在部署期間要執行的任何指令碼之外，您還必須包含*應用程式規格檔案* (AppSpec 檔案）。此檔案包含部署說明，例如，在何處將檔案複製至每個執行個體，以及何時執行部署指令碼。如需詳細資訊，請參閱[使用 CodeDeploy 的應用程式修訂](application-revisions.md)。

1. 將應用程式修訂部署至部署群組。部署群組中每個執行個體上的 CodeDeploy 代理程式會將您的應用程式修訂版從 Amazon S3 或 GitHub 複製到執行個體。CodeDeploy 代理程式接著會將修訂解除綁定，並使用 AppSpec 檔案，將檔案複製到指定的位置，並執行任何部署指令碼。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署](deployments-create.md)。

1. 檢查部署結果。如需詳細資訊，請參閱[監控 CodeDeploy 中的部署](monitoring.md)。

1. 重新部署修訂 如果您需要修復來源內容中的錯誤、以不同的順序執行部署指令碼，或處理失敗部署，會建議您這麼做。若要執行此作業，請將修訂後的來源內容、任何部署指令碼和 AppSpec 檔案重新綁定為新的修訂版，然後將修訂版上傳至 Amazon S3 儲存貯體或 GitHub 儲存庫。然後將新的部署執行到具有新修訂的相同部署群組。如需詳細資訊，請參閱[使用 CodeDeploy 建立部署](deployments-create.md)。

## 設定執行個體
<a name="deployment-steps-setting-up-instances"></a>

 您必須先設定執行個體，才能第一次部署應用程式修訂。如果應用程式修訂需要三部生產伺服器和兩部備份伺服器，您要啟動或使用五個執行個體。

手動佈建執行個體：

1. 在執行個體上安裝 CodeDeploy 代理程式。CodeDeploy 代理程式可以安裝在 Amazon Linux、Ubuntu Server、RHEL 和 Windows Server 執行個體上。

1. 如果您使用標籤來識別部署群組中的執行個體，請啟用標記。CodeDeploy 依賴標籤來識別執行個體並將其分組到 CodeDeploy 部署群組。雖然入門教學使用兩者，但是您只能使用索引鍵或值來定義部署群組的標籤。

1. 啟動已連接 IAM 執行個體描述檔的 Amazon EC2 執行個體。IAM 執行個體描述檔必須在啟動時連接到 Amazon EC2 執行個體，CodeDeploy 代理程式才能驗證執行個體的身分。

1. 建立服務角色。提供服務存取權，讓 CodeDeploy 可以展開您 AWS 帳戶中的標籤。

對於初始部署， CloudFormation 範本會為您執行所有操作。它會根據已安裝 CodeDeploy 代理程式的 Amazon Linux 或 Windows Server，建立和設定新的單一 Amazon EC2 執行個體。如需詳細資訊，請參閱[使用 CodeDeploy 的執行個體](instances.md)。

**注意**  
對於藍/綠部署，您可以選擇使用替換環境已有的執行個體，或讓 CodeDeploy 在部署程序中為您佈建新執行個體。

## 上傳您的應用程式修訂版
<a name="deployment-steps-uploading-your-app"></a>

在應用程式的來源內容資料夾結構的根資料夾下放置 AppSpec 檔案。如需詳細資訊，請參閱[CodeDeploy 應用程式規格 (AppSpec) 檔案](application-specification-files.md)。

將應用程式的來源內容資料夾結構綁定為封存檔案格式 (例如 zip、tar 或壓縮 tar)。將封存檔案 (*修訂版*) 上傳至 Amazon S3 儲存貯體或 GitHub 儲存庫。

**注意**  
Windows Server 執行個體不支援 tar 和壓縮 tar 封存檔案格式 (.tar 和 .tar.gz)。

## 建立您的應用程式和部署群組
<a name="deployment-steps-registering-app-deployment-groups"></a>

CodeDeploy 部署群組會根據執行個體的標籤、Amazon EC2 Auto Scaling 群組名稱或兩者來識別執行個體的集合。多個應用程式修訂可以部署至相同的執行個體。一個應用程式修訂可以部署至多個執行個體。

例如，您可以將 "Prod" 標籤新增至三部生產伺服器，並將 "Backup" 標籤新增至兩部備份伺服器。這兩個標籤可用於在 CodeDeploy 應用程式中建立兩個不同的部署群組，讓您選擇應參與部署的一組伺服器 （或兩者）。

您可以在部署群組中使用多個標籤群組，將部署限制為較小的一組執行個體。如需相關資訊，請參閱[CodeDeploy 中部署群組的標記執行個體](instances-tagging.md)。

## 部署您的應用程式修訂版
<a name="deployment-steps-deploy"></a>

現在您已準備好將應用程式修訂版從 Amazon S3 或 GitHub 部署到部署群組。您可以使用 CodeDeploy 主控台或 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令。您可以指定多個參數來控制部署 (包含修訂、部署群組和部署組態)。

## 更新您的應用程式
<a name="deployment-steps-updating-your-app"></a>

您可以更新應用程式，然後使用 CodeDeploy 主控台或呼叫 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令來推送修訂。

## 已停止和失敗的部署
<a name="deployment-stop-fail"></a>

您可以使用 CodeDeploy 主控台或 [stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html) 命令來停止部署。當您嘗試停止部署時，會發生下列三者之一：
+ 部署停止，而且操作傳回成功狀態。在此情況下，不需要在已停止部署的部署群組上執行其他部署生命週期事件。一些檔案可能已複製至部署群組中的一或多個執行個體，而且可能已在其上執行一些指令碼。
+ 此部署不會立即停止，而且操作傳回擱置中狀態。在此情況下，一些部署生命週期事件可能仍然在部署群組上執行。一些檔案可能已複製至部署群組中的一或多個執行個體，而且可能已在其上執行一些指令碼。擱置中操作完成之後，後續呼叫停止部署會傳回成功狀態。
+ 部署無法停止，而且操作傳回錯誤。如需詳細資訊，請參閱 AWS CodeDeploy API 參考中的 [ErrorInformation](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ErrorInformation.html) 和[常見錯誤](https://docs.aws.amazon.com/codedeploy/latest/APIReference/CommonErrors.html)。

失敗的部署可能導致已在部署群組的一或多個執行個體上執行某些部署生命週期事件，就像已停止的部署一樣。若要了解部署失敗的原因，您可以使用 CodeDeploy 主控台、呼叫 [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) 命令，或從失敗的部署分析日誌檔案資料。如需詳細資訊，請參閱[應用程式修訂和日誌檔案清除](codedeploy-agent.md#codedeploy-agent-revisions-logs-cleanup)及[檢視 CodeDeploy EC2/現場部署的日誌資料](deployments-view-logs.md)。

## 重新部署和部署轉返
<a name="deployment-rollback"></a>

CodeDeploy 透過將先前部署的修訂重新部署為新部署來實作轉返。

您可以設定部署群組以在符合特定條件時自動轉返部署 (包含部署失敗或符合警示監控閾值時)。您也可以覆寫針對個別部署中部署群組所指定的轉返設定。

您也可以手動重新部署先前部署的修訂，以選擇轉返失敗部署。

在所有情況下，新的或轉返的部署會獲指派其專屬部署 ID。您可以在 CodeDeploy 主控台中檢視的部署清單會顯示哪些是自動部署的結果。

如需詳細資訊，請參閱[使用 CodeDeploy 重新部署以及復原部署](deployments-rollback-and-redeploy.md)。

# CodeDeploy 應用程式規格 (AppSpec) 檔案
<a name="application-specification-files"></a>

應用程式規格檔案 (AppSpec 檔案） 是 CodeDeploy 獨有的，是 [YAML](http://www.yaml.org) 格式或 [JSON](http://www.json.org) 格式的檔案。AppSpec 檔案用於將每個部署管理為一系列生命週期事件掛鉤，這些掛鉤定義在 檔案中。

如需有關如何建立格式正確的 AppSpec 檔案的資訊，請參閱 [CodeDeploy AppSpec 檔案參考](reference-appspec-file.md)。

**Topics**
+ [Amazon ECS 運算平台上的 AppSpec 檔案](#appspec-files-on-ecs-compute-platform)
+ [AWS Lambda 運算平台上的 AppSpec 檔案](#appspec-files-on-lambda-compute-platform)
+ [EC2/內部部署運算平台上的 AppSpec 檔案](#appspec-files-on-server-compute-platform)
+ [CodeDeploy 代理程式如何使用 AppSpec 檔案](#application-specification-files-agent-usage)

## Amazon ECS 運算平台上的 AppSpec 檔案
<a name="appspec-files-on-ecs-compute-platform"></a>

如果您的應用程式使用 Amazon ECS 運算平台，AppSpec 檔案可以使用 YAML 或 JSON 進行格式化。也可以直接輸入主控台中的編輯器。AppSpec 檔案用於指定：
+ Amazon ECS 服務的名稱，以及用於將流量導向新任務集的容器名稱和連接埠。
+ 用於驗證測試的函數。

您可以在部署生命週期事件之後執行驗證 Lambda 函數。如需詳細資訊，請參閱[Amazon ECS 部署的 AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)、[Amazon ECS 部署的 AppSpec 檔案結構](reference-appspec-file-structure.md#ecs-appspec-structure)及[Amazon ECS 部署的 AppSpec 檔案範例](reference-appspec-file-example.md#appspec-file-example-ecs)。

## AWS Lambda 運算平台上的 AppSpec 檔案
<a name="appspec-files-on-lambda-compute-platform"></a>

如果您的應用程式使用 AWS Lambda 運算平台，AppSpec 檔案可以使用 YAML 或 JSON 進行格式化。也可以直接輸入主控台中的編輯器。AppSpec 檔案用於指定：
+ 要部署的 AWS Lambda 函數版本。
+ 用於驗證測試的函數。

您可以在部署生命週期事件之後執行驗證 Lambda 函數。如需詳細資訊，請參閱[AWS Lambda 部署的 AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda)。

## EC2/內部部署運算平台上的 AppSpec 檔案
<a name="appspec-files-on-server-compute-platform"></a>

如果您的應用程式使用 EC2/現場部署運算平台，AppSpec 檔案一律為 YAML 格式。AppSpec 檔案用於：
+ 將應用程式修訂中的來源檔案，映射至執行個體上的目標。
+ 指定已部署檔案的自訂許可。
+ 指定在部署程序各階段在每個執行個體上執行的指令碼。

您可以在許多個別部署生命週期事件之後，在執行個體上執行指令碼。CodeDeploy 只會執行 檔案中指定的指令碼，但這些指令碼可以呼叫執行個體上的其他指令碼。只要執行個體上執行的作業系統支援，您就可以執行任何類型的指令碼。如需詳細資訊，請參閱[EC2/現場部署的 AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md#appspec-hooks-server)。

## CodeDeploy 代理程式如何使用 AppSpec 檔案
<a name="application-specification-files-agent-usage"></a>

在部署期間，CodeDeploy 代理程式會在 AppSpec 檔案的**掛**鉤區段中查詢目前事件的名稱。如果找不到事件，CodeDeploy 代理程式會繼續進行下一個步驟。如果找到事件，CodeDeploy 代理程式會擷取要執行的指令碼清單。指令碼會按照在檔案中出現的順序依次執行。每個指令碼的狀態都會記錄在執行個體上的 CodeDeploy 代理程式日誌檔案中。

如果指令碼執行成功，則會傳回結束代碼 0 (零)。

**注意**  
 CodeDeploy 代理程式不會用於 AWS Lambda 或 Amazon ECS 部署。

在**安裝**事件期間，CodeDeploy 代理程式會使用 AppSpec **檔案的檔案**區段中定義的映射，來判斷要從修訂版複製到執行個體的資料夾或檔案。

如果安裝在作業系統上的 CodeDeploy 代理程式不符合 AppSpec 檔案中列出的項目，則部署會失敗。

如需 CodeDeploy 代理程式日誌檔案的詳細資訊，請參閱 [使用 CodeDeploy 代理程式](codedeploy-agent.md)。