

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

# 與其他 AWS 服務的整合
<a name="integrations-aws"></a>

CodeDeploy 已與下列 AWS 服務整合：


|  |  | 
| --- |--- |
| Amazon CloudWatch |  [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/) 是一種監控服務，適用於 AWS 雲端資源和您執行的應用程式 AWS。您可以使用 Amazon CloudWatch 收集和追蹤指標、收集和監控日誌檔案，以及設定警示。CodeDeploy 支援下列 CloudWatch 工具： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  | 
| Amazon EC2 Auto Scaling |  CodeDeploy 支援 [Amazon EC2 Auto Scaling](https://aws.amazon.com/autoscaling)。 AWS 此服務可以根據您指定的條件自動啟動 Amazon EC2 執行個體，例如：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html) 您可以視需要向外擴展一組 Amazon EC2 執行個體，然後使用 CodeDeploy 自動部署應用程式修訂版。Amazon EC2 Auto Scaling 會在不再需要這些Amazon EC2執行個體時將其終止。 進一步了解： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  | 
| Amazon Elastic Container Service |   您可以使用 CodeDeploy 將 Amazon ECS 容器化應用程式部署為任務集。CodeDeploy 透過安裝更新版本的應用程式作為新的替換任務集來執行藍/綠部署。CodeDeploy 會將生產流量從原始應用程式任務集重新路由至替代任務集。原始任務集會在成功部署後終止。如需 Amazon ECS 的詳細資訊，請參閱 [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)。  您可以透過選擇 Canary、線性或一次全部組態，管理部署期間將哪些流量轉移到已更新任務集的方式。如需 Amazon ECS 部署的詳細資訊，請參閱 [Amazon ECS 運算平台上的部署](https://docs.aws.amazon.com/en_us/codedeploy/latest/userguide/deployment-steps-ecs.html)。  | 
| AWS CloudTrail |  CodeDeploy 已與 整合[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。此服務會擷取您 AWS 帳戶中 CodeDeploy 或代表 CodeDeploy 發出的 API 呼叫，並將日誌檔案交付至您指定的 Amazon S3 儲存貯體。CloudTrail 會從 CodeDeploy 主控台、透過 CodeDeploy 命令 AWS CLI，或直接從 CodeDeploy APIs 擷取 API 呼叫。使用 CloudTrail 收集的資訊，您可以判斷： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html) 進一步了解： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  | 
| AWS Cloud9 |  [AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/) 是以雲端為基礎的線上整合開發環境 (IDE)，您只需要從網際網路連線的機器使用瀏覽器來撰寫、執行、偵錯和部署程式碼。 AWS Cloud9 包含程式碼編輯器、偵錯工具、終端機和基本工具，例如 AWS CLI 和 Git。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html) 如需 的詳細資訊 AWS Cloud9，請參閱[什麼是 AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcom.html) [和 入門 AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/get-started.html)。  | 
| AWS CodePipeline |  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/) 是一種持續交付的服務，讓您能夠將發行軟體所需的步驟，依持續交付程序進行模型化、視覺化和自動化。您可以使用 AWS CodePipeline 定義您自己的發佈程序，讓服務能夠在每次程式碼變更時，建置、測試與部署您的代碼。例如，您可能有三個應用程式適用的部署群組：Beta、Gamma 和 Prod。您可以設定管道，讓每次原始碼發生變更時，一個一個地將更新部署到每個部署群組。 您可以設定 AWS CodePipeline 使用 CodeDeploy 部署： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  您可以在建立管道之前或在**建立管道**精靈中，建立要在階段中部署動作中使用的 CodeDeploy 應用程式、部署和部署群組。 進一步了解： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  | 
| AWS 無伺服器應用程式模型 |  AWS 無伺服器應用程式模型 (AWS SAM) 是一種定義無伺服器應用程式的模型。它擴展 CloudFormation 到提供定義 AWS Lambda 無伺服器應用程式所需的函數、Amazon API Gateway APIs 和 Amazon DynamoDB 資料表的簡化方式。如果您已使用 AWS SAM，您可以新增部署偏好設定，以開始使用 CodeDeploy 來管理流量在 AWS Lambda 應用程式部署期間轉移的方式。 如需詳細資訊，請參閱[AWS 無伺服器應用程式模型](https://github.com/awslabs/serverless-application-model)。  | 
| Elastic Load Balancing |  CodeDeploy 支援 [Elastic Load Balancing](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elastic-load-balancing.html)，這是一種將傳入應用程式流量分散到多個 Amazon EC2 執行個體的服務。 對於 CodeDeploy 部署，負載平衡器也會防止流量在尚未就緒、目前正在部署或不再需要作為環境的一部分路由至執行個體。 進一步了解： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codedeploy/latest/userguide/integrations-aws.html)  | 

**Topics**
+ [Amazon EC2 Auto Scaling](integrations-aws-auto-scaling.md)
+ [Integrating CodeDeploy with Elastic Load Balancing](integrations-aws-elastic-load-balancing.md)

# 將 CodeDeploy 與 Amazon EC2 Auto Scaling 整合
<a name="integrations-aws-auto-scaling"></a>

CodeDeploy 支援 Amazon EC2 Auto Scaling，這項 AWS 服務會根據您定義的條件自動啟動 Amazon EC2 執行個體。這些條件可能包括 CPU 使用率、磁碟讀取或寫入，或傳入或傳出網路流量的指定時間間隔內超過的限制。Amazon EC2 Auto Scaling 會在不再需要執行個體時終止執行個體。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[什麼是 Amazon EC2 自動擴展？](https://docs.aws.amazon.com/autoscaling/latest/userguide/WhatIsAutoScaling.html)。

當新的 Amazon EC2 執行個體作為 Amazon EC2 Auto Scaling 群組的一部分啟動時，CodeDeploy 可以自動將您的修訂部署到新的執行個體。您也可以使用向 Elastic Load Balancing 負載平衡器註冊的 Amazon EC2 Auto Scaling 執行個體來協調 CodeDeploy 中的部署。如需詳細資訊，請參閱[將 CodeDeploy 與 Elastic Load Balancing 整合](integrations-aws-elastic-load-balancing.md)及[在 Elastic Load Balancing 中為 CodeDeploy Amazon EC2 部署設定負載平衡器](deployment-groups-create-load-balancer.md)。

**注意**  
如果您將多個部署群組與單一 Amazon EC2 Auto Scaling 群組建立關聯，則可能會遇到問題。如果部署失敗，例如，執行個體會開始關閉，但其他執行中的部署需要一個小時才會逾時。如需詳細資訊，請參閱 [避免將多個部署群組與單一 Amazon EC2 Auto Scaling 群組建立關聯](troubleshooting-auto-scaling.md#troubleshooting-multiple-depgroups)和 [幕後：CodeDeploy 和 Amazon EC2 Auto Scaling 整合](https://aws.amazon.com/blogs/devops/under-the-hood-aws-codedeploy-and-auto-scaling-integration/)。

**Topics**
+ [將 CodeDeploy 應用程式部署至 Amazon EC2 Auto Scaling 群組](#integrations-aws-auto-scaling-deploy)
+ [在 Auto Scaling 縮減事件期間啟用終止部署](#integrations-aws-auto-scaling-behaviors-hook-enable)
+ [Amazon EC2 Auto Scaling 如何與 CodeDeploy 搭配使用](#integrations-aws-auto-scaling-behaviors)
+ [搭配 CodeDeploy 和 Amazon EC2 Auto Scaling 使用自訂 AMI](#integrations-aws-auto-scaling-custom-ami)

## 將 CodeDeploy 應用程式部署至 Amazon EC2 Auto Scaling 群組
<a name="integrations-aws-auto-scaling-deploy"></a>

若要將 CodeDeploy 應用程式修訂版部署至 Amazon EC2 Auto Scaling 群組：

1. 建立或尋找允許 Amazon EC2 Auto Scaling 群組使用 Amazon S3 的 IAM 執行個體描述檔。如需詳細資訊，請參閱[步驟 4：為您的 Amazon EC2 執行個體建立 IAM 執行個體描述檔](getting-started-create-iam-instance-profile.md)。
**注意**  
您也可以使用 CodeDeploy 將修訂從 GitHub 儲存庫部署到 Amazon EC2 Auto Scaling 群組。雖然 Amazon EC2 執行個體仍需要 IAM 執行個體設定檔，但設定檔不需要任何其他許可，即可從 GitHub 儲存庫進行部署。

1. 建立或使用 Amazon EC2 Auto Scaling 群組，在啟動組態或範本中指定 IAM 執行個體描述檔。如需詳細資訊，請參閱[在 Amazon EC2 執行個體上執行之應用程式的 IAM 角色](https://docs.aws.amazon.com/autoscaling/ec2/userguide/us-iam-role.html)。

1. 建立或尋找允許 CodeDeploy 建立包含 Amazon EC2 Auto Scaling 群組的部署群組的服務角色。

1. 使用 CodeDeploy 建立部署群組，指定 Amazon EC2 Auto Scaling 群組名稱、服務角色和其他幾個選項。如需詳細資訊，請參閱 [建立就地部署的部署群組 （主控台）](deployment-groups-create-in-place.md) 或 [建立就地部署的部署群組 （主控台）](deployment-groups-create-in-place.md) 。

1. 使用 CodeDeploy 將您的修訂部署到包含 Amazon EC2 Auto Scaling 群組的部署群組。

如需詳細資訊，請參閱[教學課程：使用 CodeDeploy 將應用程式部署至 Auto Scaling 群組](tutorials-auto-scaling-group.md)。

## 在 Auto Scaling 縮減事件期間啟用終止部署
<a name="integrations-aws-auto-scaling-behaviors-hook-enable"></a>

*終止部署*是一種 CodeDeploy 部署，會在 Auto Scaling [縮減事件發生](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html#as-lifecycle-scale-in)時自動啟動。CodeDeploy 會在 Auto Scaling 服務終止執行個體之前執行終止部署。在終止部署期間，CodeDeploy 不會部署任何項目。相反地，它會產生生命週期事件，您可以連接到自己的指令碼來啟用自訂關閉功能。例如，您可以將`ApplicationStop`生命週期事件連接到指令碼，在執行個體終止之前正常關閉應用程式。

如需 CodeDeploy 在終止部署期間產生的生命週期事件清單，請參閱 [生命週期事件掛鉤可用性](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-availability)。

如果終止部署因任何原因失敗，CodeDeploy 將允許執行個體終止繼續。這表示即使 CodeDeploy 未執行生命週期事件的完整集合 （或任何） 以完成，執行個體也會關閉。

如果您未啟用終止部署，Auto Scaling 服務仍會在縮減事件發生時終止 Amazon EC2 執行個體，但 CodeDeploy 不會產生生命週期事件。

**注意**  
無論您是否啟用終止部署，如果 Auto Scaling 服務在 CodeDeploy 部署進行期間終止 Amazon EC2 執行個體，則 Auto Scaling 和 CodeDeploy 服務所產生的生命週期事件之間可能會發生競爭條件。例如，`Terminating`生命週期事件 （由 Auto Scaling 服務產生） 可能會覆寫`ApplicationStart`事件 （由 CodeDeploy 部署產生）。在此案例中，您可能會遇到 Amazon EC2 執行個體終止或 CodeDeploy 部署失敗。

**啟用 CodeDeploy 以執行終止部署**
+ 在建立或更新部署**群組時，選取將終止關聯新增至 Auto Scaling ** 群組核取方塊。如需說明，請參閱 [建立就地部署的部署群組 （主控台）](deployment-groups-create-in-place.md)或 [建立 EC2/現場部署藍/綠部署的部署群組 （主控台）](deployment-groups-create-blue-green.md)。

  啟用此核取方塊會導致 CodeDeploy 將 [Auto Scaling 生命週期掛](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)鉤安裝到您在建立或更新 CodeDeploy 部署群組時指定的 Auto Scaling 群組。此掛鉤稱為*終止掛*鉤，並啟用終止部署。

**安裝終止掛鉤後，向內擴展 （終止） 事件會展開，如下所示：**

1. Auto Scaling 服務 （或只是 Auto Scaling) 判斷需要發生縮減事件，並聯絡 EC2 服務以終止 EC2 執行個體。

1. EC2 服務會開始終止 EC2 執行個體。執行個體會移至 `Terminating` 狀態，然後進入 `Terminating:Wait` 狀態。

1. 在 期間`Terminating:Wait`，Auto Scaling 會執行連接到 Auto Scaling 群組的所有生命週期掛鉤，包括 CodeDeploy 安裝的終止掛鉤。

1. 終止關聯會將通知傳送至 CodeDeploy 輪詢的 [Amazon SQS 佇列](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)。

1. 收到通知時，CodeDeploy 會剖析訊息、執行一些驗證，以及執行[終止部署](#integrations-aws-auto-scaling-behaviors-hook-enable)。

1. 當終止部署執行時，CodeDeploy 會每五分鐘將活動訊號傳送至 Auto Scaling，讓它知道執行個體仍在運作中。

1. 到目前為止，EC2 執行個體仍然處於 `Terminating:Wait` 狀態 （或可能是 `Warmed:Pending:Wait` 狀態，如果您已啟用 [Auto Scaling 群組暖集區](https://docs.aws.amazon.com/autoscaling/ec2/userguide/warm-pool-instance-lifecycle.html))。

1. 部署完成時，CodeDeploy `CONTINUE`會向 EC2 終止程序指示 Auto Scaling，無論終止部署是否成功。

## Amazon EC2 Auto Scaling 如何與 CodeDeploy 搭配使用
<a name="integrations-aws-auto-scaling-behaviors"></a>

當您建立或更新 CodeDeploy 部署群組以包含 Auto Scaling 群組時，CodeDeploy 會使用 CodeDeploy 服務角色存取 Auto Scaling 群組，然後將 [Auto Scaling 生命週期掛鉤](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)安裝到您的 Auto Scaling 群組。

**注意**  
*Auto Scaling 生命週期關聯*與 CodeDeploy 產生的*生命週期事件* （也稱為*生命週期事件關聯*) 不同，如本指南[AppSpec 'hooks' 區段](reference-appspec-file-structure-hooks.md)的 所述。

CodeDeploy 安裝的 Auto Scaling 生命週期關聯如下：
+ **啟動勾點** — 此勾點會通知 CodeDeploy 正在進行 Auto Scaling [向外擴展事件](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html#as-lifecycle-scale-out)，且 CodeDeploy 需要啟動啟動部署。

  在*啟動部署*期間，CodeDeploy：
  + 將應用程式的修訂部署到向外擴展的執行個體。
  + 產生生命週期事件以指出部署的進度。您可以將這些生命週期事件連接到您自己的指令碼，以啟用自訂啟動功能。如需詳細資訊，請參閱 中的 資料表[生命週期事件掛鉤可用性](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-availability)。

  啟動關聯和相關聯的啟動部署一律會啟用，且無法關閉。
+ **終止關聯** — 此選用關聯會通知 CodeDeploy Auto Scaling [縮減事件](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html#as-lifecycle-scale-in)正在進行中，且 CodeDeploy 需要啟動終止部署。

  在*終止部署*期間，CodeDeploy 會產生生命週期事件，以指出執行個體關閉的進度。如需詳細資訊，請參閱[在 Auto Scaling 縮減事件期間啟用終止部署](#integrations-aws-auto-scaling-behaviors-hook-enable)。

**Topics**
+ [CodeDeploy 安裝生命週期掛鉤後，如何使用它們？](#integrations-aws-auto-scaling-behaviors-hook-usage)
+ [CodeDeploy 如何命名 Amazon EC2 Auto Scaling 群組](#integrations-aws-auto-scaling-behaviors-naming)
+ [自訂生命週期關聯事件的執行順序](#integrations-aws-auto-scaling-behaviors-hook-order)
+ [部署期間的橫向擴展事件](#integrations-aws-auto-scaling-behaviors-mixed-environment)
+ [部署期間的縮減事件](#integrations-aws-auto-scaling-behaviors-scale-in)
+ [AWS CloudFormation cfn-init 指令碼中的事件順序](#integrations-aws-auto-scaling-behaviors-event-order)

### CodeDeploy 安裝生命週期掛鉤後，如何使用它們？
<a name="integrations-aws-auto-scaling-behaviors-hook-usage"></a>

安裝啟動和終止生命週期掛鉤後，CodeDeploy 會在 Auto Scaling 群組向外擴展和向內擴展事件期間分別使用這些掛鉤。

**向外擴展 （啟動） 事件展開方式如下：**

1. Auto Scaling 服務 （或只是 Auto Scaling) 判斷需要發生橫向擴展事件，並聯絡 EC2 服務以啟動新的 EC2 執行個體。

1. EC2 服務會啟動新的 EC2 執行個體。執行個體會移至 `Pending` 狀態，然後進入 `Pending:Wait` 狀態。

1. 在 期間`Pending:Wait`，Auto Scaling 會執行連接到 Auto Scaling 群組的所有生命週期掛鉤，包括 CodeDeploy 安裝的啟動掛鉤。

1. 啟動勾點會將通知傳送至 CodeDeploy 輪詢的 [Amazon SQS 佇列](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)。

1. 收到通知時，CodeDeploy 會剖析訊息、執行一些驗證，並啟動[啟動部署](#launch-deployment)。

1. 當啟動部署執行時，CodeDeploy 每五分鐘會將活動訊號傳送至 Auto Scaling，讓它知道執行個體仍在運作中。

1. 到目前為止，EC2 執行個體仍然處於 `Pending:Wait` 狀態。

1. 部署完成時，CodeDeploy 會指示 Auto Scaling 為 `CONTINUE`或 `ABANDON` EC2 啟動程序，取決於部署是否成功。
   + 如果 CodeDeploy 指出 `CONTINUE`，Auto Scaling 會繼續啟動程序，等待其他勾點完成，或將執行個體放入 `Pending:Proceed`，然後進入 `InService` 狀態。
   + 如果 CodeDeploy 指出 `ABANDON`，Auto Scaling 會終止 EC2 執行個體，並視需要重新啟動啟動程序，以符合 Auto Scaling **所需容量**設定中定義的所需執行個體數量。

**向內擴展 （終止） 事件展開方式如下：**

請參閱 [在 Auto Scaling 縮減事件期間啟用終止部署](#integrations-aws-auto-scaling-behaviors-hook-enable)。

### CodeDeploy 如何命名 Amazon EC2 Auto Scaling 群組
<a name="integrations-aws-auto-scaling-behaviors-naming"></a>

 

在 EC2/現場部署運算平台上的藍/綠部署期間，您有兩個選項可將執行個體新增至替代 （綠色） 環境：
+  使用您手動建立或現有的執行個體。
+  使用您指定的 Amazon EC2 Auto Scaling 群組中的設定，在新的 Amazon EC2 Auto Scaling 群組中定義和建立執行個體。

 如果您選擇第二個選項，CodeDeploy 會為您佈建新的 Amazon EC2 Auto Scaling 群組。它使用以下慣例來為群組命名：

```
CodeDeploy_deployment_group_name_deployment_id
```

例如，如果具有 ID `10` 的部署部署部署了名為 的部署群組`alpha-deployments`，則佈建的 Amazon EC2 Auto Scaling 群組會命名為 `CodeDeploy_alpha-deployments_10`。如需詳細資訊，請參閱 [建立 EC2/現場部署藍/綠部署的部署群組 （主控台）](deployment-groups-create-blue-green.md) 和 [GreenFleetProvisioningOption](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_GreenFleetProvisioningOption.html)。

### 自訂生命週期關聯事件的執行順序
<a name="integrations-aws-auto-scaling-behaviors-hook-order"></a>

您可以將自己的生命週期掛鉤新增至 CodeDeploy 部署的 Amazon EC2 Auto Scaling 群組。不過，就 CodeDeploy 預設部署生命週期事件而言，執行這些自訂生命週期關聯事件的順序無法預先決定。例如，如果您將名為 的自訂生命週期掛鉤`ReadyForSoftwareInstall`新增至 Amazon EC2 Auto Scaling 群組，則無法事先知道該掛鉤是在 CodeDeploy 預設部署生命週期事件的第一個之前或之後執行。

若要了解如何將自訂生命週期掛鉤新增至 Amazon EC2 Auto Scaling 群組，請參閱《*Amazon EC2 Auto Scaling 使用者指南*》中的[新增生命週期掛鉤](https://docs.aws.amazon.com/autoscaling/latest/userguide/lifecycle-hooks.html#adding-lifecycle-hooks)。

### 部署期間的橫向擴展事件
<a name="integrations-aws-auto-scaling-behaviors-mixed-environment"></a>

如果在部署進行時發生 Auto Scaling 橫向擴展事件，新的執行個體將使用先前部署的應用程式修訂版更新，而不是最新的應用程式修訂版。如果部署成功，舊執行個體和新向外擴展的執行個體將託管不同的應用程式修訂。為了讓舊版的執行個體保持最新狀態，CodeDeploy 會自動啟動後續部署 （緊接在第一個執行個體之後），以更新任何過期的執行個體。如果您想要變更此預設行為，讓過期的 EC2 執行個體保留在較舊的修訂版中，請參閱 [Automatic updates to outdated instances](deployment-groups-configure-advanced-options.md#auto-updates-outdated-instances)。

如果您想要在部署進行時暫停 Amazon EC2 Auto Scaling 向外擴展程序，您可以透過`common_functions.sh`指令碼中的設定來執行此操作，該設定用於與 CodeDeploy 進行負載平衡。如果 `HANDLE_PROCS=true`，下列 Auto Scaling 事件會在部署程序期間自動暫停：
+ AZRebalance
+ AlarmNotification
+ ScheduledActions
+ ReplaceUnhealthy

**重要**  
只有 CodeDeployDefault.OneAtATime 部署組態支援此功能。

如需使用 `HANDLE_PROCS=true`以避免使用 Amazon EC2 Auto Scaling 時發生部署問題的詳細資訊，請參閱 GitHub 上有關在 [aws-codedeploy-samples](https://github.com/awslabs/aws-codedeploy-samples) 中[處理 AutoScaling 程序的重要通知](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb#important-notice-about-handling-autoscaling-processes)。

### 部署期間的縮減事件
<a name="integrations-aws-auto-scaling-behaviors-scale-in"></a>

如果 Auto Scaling 群組在該 Auto Scaling 群組上正在進行 CodeDeploy 部署時開始擴展，則終止程序 （包括 CodeDeploy 終止部署生命週期事件） 與終止執行個體上的其他 CodeDeploy 生命週期事件之間可能會發生競爭條件。如果執行個體在所有 CodeDeploy 生命週期事件完成之前終止，則該特定執行個體上的部署可能會失敗。此外，整體 CodeDeploy 部署可能會失敗，也可能不會失敗，取決於您在部署組態中設定**最低運作狀態良好的主機**設定的方式。

### AWS CloudFormation cfn-init 指令碼中的事件順序
<a name="integrations-aws-auto-scaling-behaviors-event-order"></a>

如果您在最新佈建的 Linux-based 執行個體上使用 `cfn-init`​ (或 `cloud-init`​) 執行命令碼，您的部署可能失敗，除非您在執行個體啟動後嚴格控制事件發生順序。

這順序必須：

1. 新佈建的新執行個體啟動。

1. 所有 `cfn-init` 引導操作命令碼完成執行。

1. CodeDeploy 代理程式啟動。

1. 將最新的應用程式修訂版部署到執行個體中。

如果未仔細控制事件順序，CodeDeploy 代理程式可能會在所有指令碼完成執行之前開始部署。

若要控制事件的順序，請使用這些最佳實務：
+ 透過`cfn-init`指令碼安裝 CodeDeploy 代理程式，將其放置在所有其他指令碼之後。
+ 在自訂 AMI 中包含 CodeDeploy 代理程式，並使用`cfn-init`指令碼來啟動它，將它放在所有其他指令碼之後。

如需使用 的詳細資訊`cfn-init`，請參閱*AWS CloudFormation 《 使用者指南*》中的 [cfn-init](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html)。

## 搭配 CodeDeploy 和 Amazon EC2 Auto Scaling 使用自訂 AMI
<a name="integrations-aws-auto-scaling-custom-ami"></a>

在 Amazon EC2 Auto Scaling 群組中啟動新的 Amazon EC2 執行個體時，您有兩個選項可指定要使用的基本 AMI：
+ 您可以指定已安裝 CodeDeploy 代理程式的基本自訂 AMI。由於代理程式已安裝，此選項會比其他選項更快速地啟動新的 Amazon EC2 執行個體。不過，此選項提供更大的可能性，讓 Amazon EC2 執行個體的初始部署失敗，特別是在 CodeDeploy 代理程式過期時。如果您選擇此選項，我們建議您定期更新基本自訂 AMI 中的 CodeDeploy 代理程式。
+ 您可以指定未安裝 CodeDeploy 代理程式的基本 AMI，並在 Amazon EC2 Auto Scaling 群組中啟動每個新執行個體時安裝代理程式。雖然此選項啟動新的 Amazon EC2 執行個體的速度比其他選項慢，但執行個體初始部署成功的可能性更大。此選項使用最新版本的 CodeDeploy 代理程式。

# 將 CodeDeploy 與 Elastic Load Balancing 整合
<a name="integrations-aws-elastic-load-balancing"></a>

在 CodeDeploy 部署期間，負載平衡器可防止網際網路流量在尚未就緒、目前正在部署或不再需要作為環境的一部分路由至執行個體。負載平衡器扮演的確切角色，卻取決於它是用於藍/綠部署或就地部署。

**注意**  
在藍/綠部署中必須使用 Elastic Load Balancing 負載平衡器，在就地部署中則為選用。

## Elastic Load Balancing 類型
<a name="integrations-aws-elastic-load-balancing-types"></a>

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 目標群組對於 EC2 執行個體上的`instance`部署，以及 `IP` Fargate 部署，必須具有 的目標類型。如需詳細資訊，請參閱[目標類型](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type)。

Network Load Balancer  
根據從 TCP 封包標頭擷取的地址資訊，而不是從封包內容，在傳輸層 (TCP/UDP Layer-4) 進行路由和負載平衡。Network Load Balancer 可以處理流量暴增、保留用戶端的來源 IP，並在負載平衡器生命週期中使用固定 IP。

若要進一步了解 Elastic Load Balancing 負載平衡器，請參閱下列主題：
+ [什麼是 Elastic Load Balancing？](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [什麼是 Classic Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html)
+ [什麼是 Application Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [什麼是 Network Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)

## 藍/綠部署
<a name="integrations-aws-elastic-load-balancing-blue-green"></a>

在 Elastic Load Balancing 負載平衡器後方重新路由執行個體流量，是 CodeDeploy 藍/綠部署的基礎。

在藍/綠部署期間，根據您指定的規則，負載平衡器可讓流量路由到部署群組中的新執行個體，而這個群組也是部署最新應用程式修訂版 (替代環境) 的群組，然後將流量從之前的應用程式修訂版所執行的舊執行個體 (原始環境) 區隔開來。

在替換環境中的執行個體向一或多個負載平衡器註冊後，原始環境中的執行個體會取消註冊，而且如果您選擇，則會終止。

對於藍/綠部署，您可以在部署群組中指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以使用 CodeDeploy 主控台或 AWS CLI ，將負載平衡器新增至部署群組。

如需有關藍/綠部署中的負載平衡器詳細資訊，請參閱下列主題：
+ [在 Elastic Load Balancing 中為 CodeDeploy Amazon EC2 部署設定負載平衡器](deployment-groups-create-load-balancer.md)
+ [建立藍/綠部署的應用程式 （主控台）](applications-create-blue-green.md)
+ [建立 EC2/現場部署藍/綠部署的部署群組 （主控台）](deployment-groups-create-blue-green.md)

## 就地部署：
<a name="integrations-aws-elastic-load-balancing-in-place"></a>

在就地部署期間，負載平衡器會防止網際網路流量路由至即將部署到的目標執行個體，並會在部署到該執行個體完成後，讓執行個體再次開始接受流量。

如果在就地部署期間未使用負載平衡器，網際網路流量仍會在部署過程中導向到執行個體。因此，您的客戶可能會遇到中斷、不完整或過期的 Web 應用程式。當您搭配就地部署使用 Elastic Load Balancing 負載平衡器時，部署群組中的執行個體會從負載平衡器取消註冊，更新為最新的應用程式修訂版，然後在部署成功後，使用負載平衡器重新註冊為相同部署群組的一部分。CodeDeploy 最多會等待 1 小時，讓執行個體在負載平衡器後方正常運作。如果在等待期間負載平衡器未將執行個體標記為運作狀態良好，CodeDeploy 會根據部署組態移至下一個執行個體或使部署失敗。

對於就地部署，您可以指定一或多個 Classic Load Balancer、Application Load Balancer 目標群組或 Network Load Balancer 目標群組。您可以指定負載平衡器做為部署群組組態的一部分，也可以使用 CodeDeploy 提供的指令碼來實作負載平衡器。

### 使用部署群組指定就地部署負載平衡器
<a name="integrations-aws-elastic-load-balancing-in-place-deployment-group"></a>

若要將負載平衡器新增至部署群組，您可以使用 CodeDeploy 主控台或 AWS CLI。針對就地部署之有關在部署群組中指定負載平衡器的詳細資訊，請參閱下列主題：
+ [建立就地部署的應用程式 （主控台）](applications-create-in-place.md)
+ [建立就地部署的部署群組 （主控台）](deployment-groups-create-in-place.md)
+ [在 Elastic Load Balancing 中為 CodeDeploy Amazon EC2 部署設定負載平衡器](deployment-groups-create-load-balancer.md)

### 使用指令碼指定就地部署負載平衡器
<a name="integrations-aws-elastic-load-balancing-in-place-script"></a>

使用以下程序中的步驟來使用部署生命週期指令碼，以針對就地部署設定負載平衡。
**注意**  
當您使用指令碼來設定就地部署適用的負載平衡器時，應當只使用 CodeDeployDefault.OneAtATime 部署組態。不支援並行執行，而 CodeDeployDefault.OneAtATime 設定可確保連續執行指令碼。如需部署組態的詳細資訊，請參閱[在 CodeDeploy 中使用部署組態](deployment-configurations.md)。

在 GitHub 上的 CodeDeploy 範例儲存庫中，我們提供您可以調整以使用 CodeDeploy Elastic Load Balancing 負載平衡器的指示和範例。這些儲存庫包含三個範例指令碼 -`register_with_elb.sh`、 `deregister_from_elb.sh`和 `common_functions.sh`- 提供您需要的所有程式碼。只需在這三個指令碼中編輯預留位置，然後從您的 `appspec.yml` 檔案參考這些指令碼。

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

1. 下載您要用於就地部署之負載平衡器類型的範例：
   + [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb)
   + [Application Load Balancer [或 Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2) （任一類型都可以使用相同的指令碼）](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)

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

1. 請確定每個目標 Amazon EC2 執行個體都有至少附加彈性負載平衡：\$1 和自動調整規模：\$1 許可的 IAM 執行個體描述檔。

1. 在您的應用程式原始碼目錄中包含了部署生命週期事件指令碼 (`register_with_elb.sh`、`deregister_from_elb.sh` 和 `common_functions.sh`)。

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

1. 如果執行個體是 Amazon EC2 Auto Scaling 群組的一部分，您可以略過此步驟。

   在 `common_functions.sh` 指令碼中：
   + 如果您使用的是 [Classic Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb)，請在 中指定 Elastic Load Balancing 負載平衡器的名稱`ELB_LIST=""`，並對 檔案中的其他部署設定進行任何您需要的變更。
   + 如果您使用的是 [Application Load Balancer [或 Network Load Balancer](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)](https://github.com/awslabs/aws-codedeploy-samples/tree/master/load-balancing/elb-v2)，請在 中指定 Elastic Load Balancing 目標群組名稱的名稱`TARGET_GROUP_LIST=""`，並對檔案中的其他部署設定進行任何您需要的變更。

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