

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

# 使用暖集區縮短開機時間的應用程式延遲
<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)。

# 在 Auto Scaling 群組中使用具有暖集區的生命週期掛鉤
<a name="warm-pool-instance-lifecycle"></a>

暖集區中的執行個體會維持其獨立生命週期，以便協助您為每個轉換建立適當的自訂動作。此生命週期旨在協助您在執行個體仍在初始化期間和投入使用之前，叫用目標服務 (例如 Lambda 函數) 中的動作。

**注意**  
用於新增和管理 lifecycle hook 和完成生命週期動作的 API 操作不會變更。僅變更執行個體生命週期。

如需有關新增 lifecycle hook 的詳細資訊，請參閱 [將生命週期掛鉤新增至 Auto Scaling 群組](adding-lifecycle-hooks.md)。如需有關完成生命週期動作的詳細資訊，請參閱 [在 Auto Scaling 群組中完成生命週期動作](completing-lifecycle-hooks.md)。

對於進入暖集區的執行個體，由於以下原因之一，您可能需要 lifecycle hook：
+ 您希望從需要很長時間才能完成初始化的 AMI 啟動 EC2 執行個體。
+ 您希望執行使用者資料指令碼來引導 EC2 執行個體。

對於離開暖集區的執行個體，由於以下原因之一，您可能需要 lifecycle hook：
+ 您可以使用一些額外的時間來準備 EC2 執行個體以供使用。例如，您可能有服務必須在執行個體重新啟動時啟動，然後您的應用程式才能正常運作。
+ 您要預先填入快取資料，使新伺服器不會以空白的快取進行啟動。
+ 您要使用組態管理服務，將新執行個體註冊為受管理執行個體。

## 暖集區中的執行個體生命週期狀態轉換
<a name="lifecycle-state-transitions"></a>

作為其生命週期的一部分，Auto Scaling 執行個體可以在多種狀態之間轉換。

以下圖表顯示使用暖集區時 Auto Scaling 狀態之間的轉換：

![\[暖集區中執行個體的生命週期狀態轉換。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/warm-pools-lifecycle-diagram.png)


¹ 此狀態根據暖集區的集區狀態設定而異。如果集區狀態設定為 `Running`，則此狀態是 `Warmed:Running`。如果集區狀態設定為 `Hibernated`，則此狀態是 `Warmed:Hibernated`。

在新增 lifecycle hook 時，請考慮以下事項：
+ 當為 `autoscaling:EC2_INSTANCE_LAUNCHING` 生命週期動作設定了 lifecycle hook 時，新啟動的執行個體會在達到 `Warmed:Pending:Wait` 狀態時先暫停以執行自訂動作，然後在執行個體重新啟動並達到 `Pending:Wait` 狀態時再次暫停。
+ 當為 `EC2_INSTANCE_TERMINATING` 生命週期動作設定了 lifecycle hook 時，終止的執行個體在達到 `Terminating:Wait` 狀態時會暫停以執行自訂動作。不過，如果您指定執行個體重複使用政策，以便在縮減時將執行個體傳回暖集區，而不是終止執行個體，則傳回暖集區的執行個體會暫停，以便在 `EC2_INSTANCE_TERMINATING` 生命週期動作的 `Warmed:Pending:Wait` 狀態下執行自訂動作。
+ 如果應用程式的需求將暖集區用盡，則只要群組尚未達到其最大容量，Amazon EC2 Auto Scaling 即可將執行個體直接啟動至 Auto Scaling 群組。如果執行個體直接啟動至群組，則這些執行個體只會在 `Pending:Wait` 狀態時暫停以執行自訂動作。
+ 若要控制執行個體在轉換到下一個狀態之前保持等待狀態的時間長度，請將自訂動作設定為使用 **complete-lifecycle-action** 命令。有 lifecycle hook 時，執行個體會一直處於等待狀態，直到您通知 Amazon EC2 Auto Scaling 指定的生命週期動作已完成，或直到逾時期間結束 (預設為一小時)。

以下概述了橫向擴展事件的流程。

![\[橫向擴展事件的流程圖。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/warm-pools-scale-out-event-diagram.png)


當執行個體進入等待狀態時，Amazon EC2 Auto Scaling 會傳送通知。有關這些通知的範例，請參閱本指南的「EventBridge」章節。如需詳細資訊，請參閱[暖集區範例事件和模式](warm-pools-eventbridge-events.md)。

## 受支援的通知目標
<a name="warm-pools-supported-notification-targets"></a>

Amazon EC2 Auto Scaling 支援將以下任意內容定義為生命週期通知的通知目標：
+ EventBridge 規則
+ Amazon SNS 主題 
+ Amazon SQS 佇列
+ AWS Lambda 函數

**重要**  
如果您的啟動範本或啟動組態中有使用者資料 (cloud-init) 指令碼，可在執行個體啟動時設定執行個體，您不需要接收通知，即可在啟動或重新啟動的執行個體上執行自訂動作。

以下各節包含描述如何設定通知目標的文件連結：

**EventBridge 規則** — 若要在 Amazon EC2 Auto Scaling 讓執行個體進入等待狀態時執行程式碼，您可以建立 EventBridge 規則，並將 Lambda 函數指定為其目標。若要根據不同的生命週期通知叫用不同的 Lambda 函數，您可以建立多個規則，並將每個規則與特定的事件模式和 Lambda 函數相關聯。如需詳細資訊，請參閱[為暖集區事件建立 EventBridge 規則](warm-pool-events-eventbridge-rules.md)。

**Amazon SNS 主題** — 若要在執行個體進入等待狀態時接收通知，您可以建立 Amazon SNS 主題，然後設定 Amazon SNS 訊息篩選，根據訊息屬性以不同的方式傳遞生命週期通知。如需詳細資訊，請參閱[使用 Amazon SNS 接收通知](prepare-for-lifecycle-notifications.md#sns-notifications)。

**Amazon SQS 佇列** — 若要設定生命週期通知的交付點，相關取用者可以在其中接收和處理它們，您可以建立 Amazon SQS 佇列和處理來自 SQS 佇列的訊息的佇列取用者。如果希望佇列取用者根據訊息屬性以不同方式處理生命週期通知，您也必須設定佇列取用者來解析訊息，然後在特定屬性符合所需值時對訊息採取行動。如需詳細資訊，請參閱[使用 Amazon SQS 接收通知](prepare-for-lifecycle-notifications.md#sqs-notifications)。

**AWS Lambda 函數** — 若要在 Amazon EC2 Auto Scaling 讓執行個體進入等待狀態時執行自訂程式碼，您可以將 Lambda 函數指定為通知目標。Lambda 函數使用生命週期通知資料叫用，可讓您執行自訂動作，例如執行個體組態、應用程式設定，或與其他 AWS 服務的整合。您必須設定 Lambda 函數的資源型政策，以允許 Auto Scaling 服務連結角色叫用函數。如需詳細資訊，請參閱[將通知 AWS Lambda 直接路由到](prepare-for-lifecycle-notifications.md#lambda-notification)。

# 為 Auto Scaling 群組建立暖集區
<a name="create-warm-pool"></a>

本主題說明如何為 Auto Scaling 群組建立暖集區。

**重要**  
繼續之前，請完成建立暖集區的[先決條件](ec2-auto-scaling-warm-pools.md#warm-pool-prerequisites)，並確認您已經為 Auto Scaling 群組建立 lifecycle hook。

## 建立暖集區
<a name="create-a-warm-pool"></a>

使用下列步驟來為 Auto Scaling 群組建立暖集區。

**建立暖集區 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取現有群組旁邊的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 選擇 **Instance management** (執行個體管理) 索引標籤。

1. 在 **Warm pool** (暖集區) 中，選擇 **Create warm pool** (建立暖集區)。

1. 若要設定暖集區，請執行以下動作：

   1. 對於 **Warm pool instance state** (暖集區執行個體狀態)，請選擇執行個體在進入暖集區時要轉換為什麼狀態。預設值為 `Stopped`。

   1. 對於 **Minimum warm pool size** (暖集區大小下限)，輸入要在暖集區中維持的執行個體數目下限。

   1. 對於**執行個體重複使用**，選取**縮減時重複使用**核取方塊，以允許 Auto Scaling 群組中的執行個體在縮減時返回暖集區。

   1. 針對**暖集區大小**，選擇其中一個可用的選項：
      + **預設規格**：暖集區的大小取決於 Auto Scaling 群組的最大容量和所需容量之間的差異。此選項可簡化暖集區管理。建立暖集區之後，只要調整群組的最大容量，即可輕鬆更新其大小。
      + **自訂規格**：暖集區的大小取決於自訂值與 Auto Scaling 群組所需容量之間的差異。此選項可讓您獨立於群組的最大容量，靈活地管理暖集區的大小。

1. 檢視**根據目前設定預估的暖集區大小**區段，以確認預設或自訂規格如何套用至暖集區的大小。請記住，暖集區大小取決於 Auto Scaling 群組的所需容量，這會在群組擴展時變更。

1. 選擇**建立**。

## 混合執行個體群組的執行個體類型選取
<a name="warm-pool-mixed-instance-types"></a>

當您的群組設定混合執行個體政策時，Auto Scaling 會在擴展事件期間優先考慮已在暖集區中的執行個體類型。啟動行為：

1. Auto Scaling 會嘗試使用暖集區中可用的執行個體類型啟動執行個體。

1. 如果暖啟動失敗，Auto Scaling 會使用混合執行個體政策中的所有剩餘執行個體類型來嘗試冷啟動。

**Example**  
**範例**  
如果您將 Auto Scaling 群組設定為 10 種執行個體類型，且暖集區包含其中 6 種執行個體類型。在向外擴展期間，Auto Scaling 會先嘗試暖集區的 6 種執行個體類型。如果失敗，Auto Scaling 會透過冷啟動嘗試所有設定的執行個體類型。

這可讓您盡可能暖集區效能優勢，同時維持完整混合執行個體組態的彈性。

## 刪除暖集區
<a name="delete-warm-pool"></a>

如果不再需要暖集區，請按下列步驟將其刪除。

**刪除暖集區 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取現有群組旁邊的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 選擇 **Instance management** (執行個體管理) 索引標籤。

1. 對於 **Warm pool** (暖集區)，選擇 **Actions** (動作)、**Delete** (刪除)。

1. 出現確認提示時，請選擇**刪除**。

# 檢視運作狀態檢查狀態和運作狀態檢查失敗的原因
<a name="warm-pools-health-checks-monitor-view-status"></a>

運作狀態檢查允許 Amazon EC2 Auto Scaling 判斷執行個體是否運作狀態不佳且應遭到終止。若為保持在 `Stopped` 狀態的暖集區執行個體，其會採用 Amazon EBS 具有的 `Stopped` 執行個體可用性知識來識別運作狀態不佳的執行個體。其會藉由呼叫 `DescribeVolumeStatus` API 來判斷連接至執行個體的 EBS 磁碟區的狀態。若為保持在 `Running` 狀態的暖集區執行個體，其會依賴 EC2 狀態檢查來判斷執行個體的運作狀態。雖然暖集區執行個體沒有運作狀態檢查寬限期，但 Amazon EC2 Auto Scaling 在 lifecycle hook 完成之前，不會開始檢查執行個體運作狀態。

在執行個體運作狀態不佳時，Amazon EC2 Auto Scaling 會自動刪除運作狀態不佳的執行個體，並建立一個新的執行個體來取代它。執行個體在運作狀態檢查失敗後，通常會在幾分鐘內遭到終止。如需詳細資訊，請參閱[檢視運作狀態檢查失敗的原因](replace-unhealthy-instance.md)。

亦支援自訂運作狀態檢查。如果您有自有運作狀態檢查系統可以偵測執行個體的運作狀態，並將此資訊傳送至 Amazon EC2 Auto Scaling，這頗有助益。如需詳細資訊，請參閱[為您的 Auto Scaling 群組設定自訂運作狀態檢查](set-up-a-custom-health-check.md)。

在 Amazon EC2 Auto Scaling 主控台中，您可以檢視暖集區執行個體的狀態 (運作狀態良好或運作狀態不佳)。您也可以使用 AWS CLI 或其中一個 SDKs 檢視其運作狀態。

**檢視暖集區執行個體的狀態 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   **Auto Scaling groups** (Auto Scaling 群組) 頁面底部會開啟一個分割窗格。

1. 在 **Instance management** (執行個體管理) 索引標籤的 **Warm pool Instances** (暖集區執行個體) 中，**Lifecycle** (生命週期) 資料欄會包含執行個體的狀態。

   **Health status** (運作狀態) 資料欄中會顯示 Amazon EC2 Auto Scaling 對執行個體運作狀態進行的評估。
**注意**  
新執行個體以良好的運作狀態開始啟動。在 lifecycle hook 完成之前，系統不會檢查執行個體的運作狀態。

**檢視運作狀態檢查失敗的原因 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   **Auto Scaling groups** (Auto Scaling 群組) 頁面底部會開啟一個分割窗格。

1. 在 **Activity** (活動) 索引標籤的 **Activity history** (活動歷史記錄) 中，**Status** (狀態) 欄位會顯示 Auto Scaling 群組是否已成功啟動或終止執行個體。

   若其已終止任何運作狀態不佳的執行個體，**Cause** (原因) 資料欄會顯示終止的日期和時間，以及運作狀態檢查失敗的原因。例如，At 2021-04-01T21:48:35Z an instance was taken out of service in response to EBS volume health check failure (在 2021-04-01T 21:48:35 Z 時，執行個體因 EBS 磁碟區運作狀態檢查失敗而停止運作)。

**檢視暖集區執行個體的狀態 (AWS CLI)**  
使用以下 [describe-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-warm-pool.html) 命令來檢視 Auto Scaling 群組的暖集區。

```
aws autoscaling describe-warm-pool --auto-scaling-group-name my-asg
```

範例輸出。

```
{
    "WarmPoolConfiguration": {
        "MinSize": 0,
        "PoolState": "Stopped"
    },
    "Instances": [
        {
            "InstanceId": "i-0b5e5e7521cfaa46c",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        },
        {
            "InstanceId": "i-0e21af9dcfb7aa6bf",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        }
    ]
}
```

**檢視運作狀態檢查失敗的原因 (AWS CLI)**  
使用以下 [describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) 命令。

```
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg
```

以下為回應範例，其中 `Description` 表示您的 Auto Scaling 群組已終止執行個體，而 `Cause` 則指出運作狀態檢查失敗的原因。

擴展活動依開始時間排序。首先描述仍在進行中的活動。

```
{
  "Activities": [
    {
      "ActivityId": "4c65e23d-a35a-4e7d-b6e4-2eaa8753dc12",
      "AutoScalingGroupName": "my-asg",
      "Description": "Terminating EC2 instance: i-04925c838b6438f14",
      "Cause": "At 2021-04-01T21:48:35Z an instance was taken out of service in response to EBS volume health check failure.",
      "StartTime": "2021-04-01T21:48:35.859Z",
      "EndTime": "2021-04-01T21:49:18Z",
      "StatusCode": "Successful",
      "Progress": 100,
      "Details": "{\"Subnet ID\":\"subnet-5ea0c127\",\"Availability Zone\":\"us-west-2a\"...}",
      "AutoScalingGroupARN": "arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:283179a2-f3ce-423d-93f6-66bb518232f7:autoScalingGroupName/my-asg"
    },
...
  ]
}
```

# 使用 建立和管理暖集區的範例 AWS CLI
<a name="examples-warm-pools-aws-cli"></a>

您可以使用 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 SDKs 建立和管理暖集區。

以下範例說明如何使用 AWS CLI建立和管理暖集區。

**Topics**
+ [範例 1：將執行個體保持為 `Stopped` 狀態](#warm-pool-configuration-ex1)
+ [範例 2：將執行個體保持為 `Running` 狀態](#warm-pool-configuration-ex2)
+ [範例 3：將執行個體保持為 `Hibernated` 狀態](#warm-pool-configuration-ex3)
+ [範例 4：縮減時將執行個體傳回暖集區](#warm-pool-configuration-ex4)
+ [範例 5：指定暖集區中的執行個體數量下限](#warm-pool-configuration-ex5)
+ [範例 6：使用自訂規格定義暖集區大小](#warm-pool-configuration-ex6)
+ [範例 7：定義暖集區絕對大小](#warm-pool-configuration-ex7)
+ [範例 8：刪除暖集區](#delete-warm-pool-cli)

## 範例 1：將執行個體保持為 `Stopped` 狀態
<a name="warm-pool-configuration-ex1"></a>

以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立一個暖集區，可將執行個體維持在 `Stopped` 狀態。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped
```

## 範例 2：將執行個體保持為 `Running` 狀態
<a name="warm-pool-configuration-ex2"></a>

以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立一個暖集區，可將執行個體維持在 `Running` 狀態，而不是 `Stopped` 狀態。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Running
```

## 範例 3：將執行個體保持為 `Hibernated` 狀態
<a name="warm-pool-configuration-ex3"></a>

以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立一個暖集區，可將執行個體維持在 `Hibernated` 狀態，而不是 `Stopped` 狀態。這讓您可以停止執行個體而不刪除其記憶體內容 (RAM)。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Hibernated
```

## 範例 4：縮減時將執行個體傳回暖集區
<a name="warm-pool-configuration-ex4"></a>

以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立一個暖集區，可將執行個體維持在 `Stopped` 狀態，並包含 `--instance-reuse-policy` 選項。執行個體重複使用政策值 `'{"ReuseOnScaleIn": true}'` 會告訴 Amazon EC2 Auto Scaling 在 Auto Scaling 群組縮減時將執行個體傳回暖集區。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --instance-reuse-policy '{"ReuseOnScaleIn": true}'
```

## 範例 5：指定暖集區中的執行個體數量下限
<a name="warm-pool-configuration-ex5"></a>

以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例建立一個至少維護 4 個執行個體的暖集區，使至少有 4 個執行個體可用於處理流量峰值。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 4
```

## 範例 6：使用自訂規格定義暖集區大小
<a name="warm-pool-configuration-ex6"></a>

根據預設，Amazon EC2 Auto Scaling 會管理暖集區的大小，作為 Auto Scaling 群組的最大容量和所需容量之間的差異。不過，您可以使用 `--max-group-prepared-capacity`選項，獨立於群組的最大容量來管理暖集區的大小。

下列 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立暖集區，並設定暖集區和 Auto Scaling 群組中可同時存在的執行個體數量上限。如果群組的所需容量為 800，則暖集區在執行此命令後初始化時，最初的大小為 100。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900
```

若要維持暖集區中的執行個體數目下限，請使用命令納入 `--min-size` 選項，如下所示。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900 --min-size 25
```

## 範例 7：定義暖集區絕對大小
<a name="warm-pool-configuration-ex7"></a>

如果將 `--max-group-prepared-capacity` 和 `--min-size` 選項設定為相同的值，則暖集區具有絕對大小。以下 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 範例會建立一個維持恆定暖集區大小 (包含 10 個執行個體) 的暖集區。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 10 --max-group-prepared-capacity 10
```

## 範例 8：刪除暖集區
<a name="delete-warm-pool-cli"></a>

使用下列 [delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html) 命令來刪除暖集區。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg
```

如果暖集區中具有執行個體，或有擴展活動正在進行中，請合併使用 [delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html) 命令與 `--force-delete` 選項。此選項也會終止 Amazon EC2 執行個體和任何未完成的生命週期動作。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg --force-delete
```