

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

# 使用暖集區縮短開機時間的應用程式延遲
<a name="ec2-auto-scaling-warm-pools"></a>

暖集區可讓您將開機時間非常長的應用程式 (例如因為執行個體需要將大量資料寫入磁碟) 的延遲。使用暖集區讓您不再需要過度佈建 Auto Scaling 群組來管理延遲，以改善應用程式效能。如需詳細資訊，請參閱以下部落格文章：[使用 EC2 Auto Scaling 暖集區更快擴展應用程式](https://aws.amazon.com/blogs/compute/scaling-your-applications-faster-with-ec2-auto-scaling-warm-pools/)。

**重要**  
若在不需要的情況下建立暖集區，可能會導致不必要的成本。如果首次開機時間不會對應用程式造成明顯的延遲問題，則可能不需要使用暖集區。

**Topics**
+ [核心概念](#warm-pool-core-concepts)
+ [先決條件](#warm-pool-prerequisites)
+ [更新暖集區中的執行個體](#update-warm-pool)
+ [相關資源](#warm-pools-related-resources)
+ [限制](#warm-pools-limitations)
+ [使用 lifecycle hook](warm-pool-instance-lifecycle.md)
+ [為 Auto Scaling 群組建立暖集區](create-warm-pool.md)
+ [檢視運作狀態檢查狀態](warm-pools-health-checks-monitor-view-status.md)
+ [AWS CLI 使用暖集區的範例](examples-warm-pools-aws-cli.md)

## 核心概念
<a name="warm-pool-core-concepts"></a>

在開始使用之前，請熟悉以下核心概念：

**暖集區**  
暖集區是位於 Auto Scaling 群組旁的預先初始化 EC2 執行個體集區。每當應用程式需要擴增時，Auto Scaling 群組都可以利用暖集區來符合其所需的新容量。這有助於您確保執行個體已準備好快速開始為應用程式流量提供服務，加速對水平擴展事件的回應。在執行個體離開暖集區時，會計入群組所需的容量。這稱為*暖啟動*。  
執行個體在暖集區時，只有在處於 `InService` 狀態執行個體的指標值大於擴展政策的高警示閾值 (其與目標追蹤擴展政策的目標使用率相同) 時，您的擴展政策才會水平擴展。

**暖集區大小**  
根據預設，暖集區大小計算方式為 Auto Scaling 群組的最大容量及其所需容量之間的差異。例如，如果 Auto Scaling 群組的所需容量為 6，且最大容量為 10，則在您第一次設定暖集區且集區正在初始化時，暖集區的大小將為 4。  
若要個別指定暖集區的最大容量，請使用自訂規格 (`MaxGroupPreparedCapacity`) 選項，並為其設定大於 群組目前容量的自訂值。如果您提供自訂值，暖集區的大小會計算為自訂值與群組目前所需容量之間的差異。例如，如果 Auto Scaling 群組的所需容量為 6，如果最大容量為 20，且自訂值為 8，則當您第一次設定暖集區且集區正在初始化時，暖集區的大小將為 2。  
使用大型 Auto Scaling 群組時，您可能只需要使用自訂規格 (`MaxGroupPreparedCapacity`) 選項，即可管理擁有暖集區的成本優勢。例如，某個 Auto Scaling 群組具有 1,000 個執行個體且容量上限為 1,500 (以提供處理緊急流量尖峰的額外容量)，包含 100 個執行個體的暖集區，比起保存 500 個可供未來在暖集區內使用的預留執行個體，可能對於達成目標更有幫助。

**Minimum warm pool size** (暖集區大小下限)  
考慮使用最小大小設定 (`MinSize`) 來靜態設定要在暖集區中維護的執行個體數量下限。預設為沒有設定大小下限。當您指定 `MaxGroupPreparedCapacity` 以確保即使在 Auto Scaling 群組的所需容量高於 時，在暖集區中維持最少數量的執行個體時，此`MinSize`設定很有用`MaxGroupPreparedCapacity`。

**暖集區執行個體狀態**  
您可以將暖集區中的執行個體維持在以下三種狀態之一：`Stopped`、`Running` 或 `Hibernated`。保持執行個體為 `Stopped` 狀態是一種盡量減少成本的有效方式。停止執行個體後，您只需為使用的磁碟區和連接至執行個體的彈性 IP 地址付費。  
或者，您也可以將執行個體維持在 `Hibernated` 狀態，即可停止執行個體而不刪除其記憶體內容 (RAM)。若執行個體處於休眠狀態，就會向作業系統傳送訊號，將 RAM 的內容儲存至 Amazon EBS 根磁碟區中。當執行個體再次啟動時，根磁碟區會還原至其先前的狀態，並重新載入 RAM 內容。若執行個體處於休眠狀態，您就只需為 EBS 磁碟區付費，包括 RAM 內容的儲存，以及連接至執行個體的彈性 IP 地址。  
也可以將暖集區中的執行個體維持在 `Running` 狀態，但不建議這樣做，以避免產生不必要的費用。當執行個體停止或休眠時，您可以節省執行個體本身的成本。只有在執行個體執行時，才需支付它們的費用。

**lifecycle hook**  
您使用 [生命週期關聯](warm-pool-instance-lifecycle.md) 將執行個體置於等待狀態，以便您對執行個體執行自訂動作。自訂動作會在執行個體啟動時或終止之前執行。  
在暖集區組態中，生命週期關聯可以延遲執行個體停止或休眠，以及延遲在橫向擴展事件期間投入使用，直到其完成初始化。如果在沒有 lifecycle hook 的情況下向 Auto Scaling 群組新增暖集區，需要很長時間才能完成初始化的執行個體可能會停止或休眠，接著在準備就緒前，即在水平擴展事件期間投入使用。

**執行個體重複使用政策**  
依預設，當 Auto Scaling 群組縮減時，Amazon EC2 Auto Scaling 會終止您的執行個體。然後，Amazon EC2 Auto Scaling 會將新執行個體啟動到暖集區內，取代已終止的執行個體。  
如果您希望將執行個體傳回暖集區，可以指定執行個體重複使用政策。如此一來，您就可以重複使用已設定為應用程式流量提供服務的執行個體。為確保您的暖集區不會過度佈建，Amazon EC2 Auto Scaling 可以根據其設定終止暖集區中的執行個體，以便在暖集區大於所需大小時將其縮小。終止暖集區中的執行個體時，會使用[預設終止政策](ec2-auto-scaling-termination-policies.md#default-termination-policy)選擇要首先終止哪些執行個體。  
如果您想要在縮減時使執行個體休眠，且 Auto Scaling 群組中存在現有執行個體，則這些執行個體必須滿足執行個體休眠的要求。如果不符要求，執行個體返回暖集區時，便會回退到停止狀態，而不是休眠狀態。
目前，您只能使用 AWS CLI 或 SDK 來指定執行個體重複使用政策。這項功能在主控台中無法使用。

## 先決條件
<a name="warm-pool-prerequisites"></a>

為 Auto Scaling 群組建立暖集區之前，請先決定如何使用生命週期關聯以適當的初始狀態來初始化新執行個體。

若要在執行個體因 lifecycle hook 而處於等待狀態時對執行個體執行自訂動作，您有兩個選項：
+ 針對要在啟動時在執行個體上執行命令的簡單案例，您可以在為 Auto Scaling 群組建立啟動範本或啟動組態時，納入使用者資料指令碼。使用者資料指令碼只是執行個體啟動cloud-init時由 執行的正常 shell 指令碼或cloud-init指令。指令碼還可以使用執行此指令碼的執行個體 的 ID，藉此控制執行個體何時轉換到下一個狀態。如果您不是這樣做的，那麼更新您的指令碼來從執行個體的中繼資料擷取執行個體中的執行個體 ID。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[存取執行個體中繼資料](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)。
**提示**  
若要在執行個體重新啟動時執行使用者資料指令碼，使用者資料必須採用 MIME 多部分格式，並在使用者資料的 `#cloud-config` 區段中指定以下內容：  

  ```
  #cloud-config
  cloud_final_modules:
   - [scripts-user, always]
  ```
+ 對於需要 等服務的進階案例 AWS Lambda ，當執行個體進入或離開暖集區時，您可以為 Auto Scaling 群組建立生命週期關聯，並設定目標服務以根據生命週期通知執行自訂動作。如需詳細資訊，請參閱[受支援的通知目標](warm-pool-instance-lifecycle.md#warm-pools-supported-notification-targets)。

**執行個體休眠的準備作業**  
若要準備 Auto Scaling 執行個體以使用`Hibernated`集區狀態，請建立正確設定的新啟動範本或啟動組態以支援執行個體休眠，如 *Amazon EC2 使用者指南*中的[休眠先決條件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)主題所述。然後，將新的啟動範本或啟動組態與 Auto Scaling 群組相關聯，並開始執行個體重新整理，以取代與之前的啟動範本或啟動組態關聯的執行個體。如需詳細資訊，請參閱[使用執行個體重新整理來更新 Auto Scaling 群組中的執行個體](asg-instance-refresh.md)。

## 更新暖集區中的執行個體
<a name="update-warm-pool"></a>

若要更新暖集區中的執行個體，您可以建立新的啟動範本或啟動組態，並將其與 Auto Scaling 群組建立關聯。所有新的執行個體都會使用新的 AMI 和在啟動範本或啟動組態中指定的其他更新來啟動，但現有的執行個體不會受到影響。

若要強制使用新啟動範本或啟動組態的取代暖集區執行個體啟動，您可以啟動執行個體重新整理對群組進行滾動更新。執行個體重新整理會先取代 `InService` 執行個體。接著，其會取代暖集區中的執行個體。如需詳細資訊，請參閱[使用執行個體重新整理來更新 Auto Scaling 群組中的執行個體](asg-instance-refresh.md)。

## 相關資源
<a name="warm-pools-related-resources"></a>

您可以造訪我們的 [GitHub 儲存庫](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples)，以取得暖集區的生命週期關聯範例。

## 限制
<a name="warm-pools-limitations"></a>
+ 具有混合執行個體類型的 Auto Scaling 群組的暖集區限制：
  + 加權混合執行個體群組不支援暖集區。如果您的 Auto Scaling 群組使用執行個體權重，則無法新增暖集區。
  + 暖集區不支援混合執行個體群組中的 Spot 執行個體。只有在使用暖集區時，才能為隨需執行個體設定混合執行個體政策。
  + 將暖集區與處於休眠狀態的混合執行個體群組搭配使用時，您必須在啟動範本`HibernationOptions`中設定 。
+ 只有當執行個體的根裝置為 Amazon EBS 磁碟區時，Amazon EC2 Auto Scaling 才可以讓執行個體處於 `Stopped` 或 `Hibernated` 狀態。無法將使用根裝置執行個體存放區的執行個體停止或休眠。
+ 只有在 Amazon EC2 使用者指南中符合[休眠先決條件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)主題中列出的所有要求時，Amazon EC2 Auto Scaling 才能將執行個體置於 `Hibernated` 狀態。 *Amazon EC2 * 
+ 如果暖集區在發生擴增事件時已耗盡，執行個體會直接啟動至 Auto Scaling 群組 (*冷啟動*)。如果可用區域的容量不足，您也可能遭遇冷啟動。
+ 如果暖集區中的執行個體在啟動程序期間遇到問題，導致無法達到 `InService` 狀態，則該執行個體會被視為啟動失敗並終止。無論根本原因為何，例如容量不足錯誤或任何其他因素，這都適用。
+ 如果嘗試透過 Amazon Elastic Kubernetes Service (Amazon EKS) 受管節點群組使用暖集區，則仍在初始化的執行個體可能會在 Amazon EKS 叢集中註冊。因此，當執行個體準備停止或休眠時，叢集可能會在執行個體上安排作業。
+ 同樣，如果您嘗試在 Amazon ECS 叢集中使用暖集區，執行個體可能會在完成初始化之前向叢集註冊。若要解決此問題，您必須設定啟動範本或啟動組態，其中包含使用者資料中的特殊代理程式組態變數。如需詳細資訊，請參閱 *Amazon Elastic Container Service 開發人員指南*中的[使用 Auto Scaling 群組的暖集區](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html#using-warm-pool)。