

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

# 在 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)。