結合使用 lifecycle hook 與暖集區 - Amazon EC2 Auto Scaling

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

結合使用 lifecycle hook 與暖集區

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

注意

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

如需有關新增 lifecycle hook 的詳細資訊,請參閱 新增 lifecycle hook。如需有關完成生命週期動作的詳細資訊,請參閱 完成生命週期動作

對於進入暖集區的執行個體,由於以下原因之一,您可能需要 lifecycle hook:

  • 您希望從需要很長時間才能完成初始化的 AMI 啟動 EC2 執行個體。

  • 您希望執行使用者資料指令碼來引導 EC2 執行個體。

對於離開暖集區的執行個體,由於以下原因之一,您可能需要 lifecycle hook:

  • 您可以使用一些額外的時間來準備 EC2 執行個體以供使用。例如,您可能有服務必須在執行個體重新啟動時啟動,然後您的應用程式才能正常運作。

  • 您要預先填入快取資料,使新伺服器不會以空白的快取進行啟動。

  • 您要使用組態管理服務,將新執行個體註冊為受管理執行個體。

暖集區中的執行個體生命週期狀態轉換

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

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

暖集區中執行個體的生命週期狀態轉換。

¹ 此狀態根據暖集區的集區狀態設定而異。如果集區狀態設定為 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 指定的生命週期動作已完成,或直到逾時期間結束 (預設為一小時)。

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

橫向擴展事件的流程圖。

當執行個體進入等待狀態時,Amazon EC2 Auto Scaling 會傳送通知。這些通知的範例可在本指南的 EventBridge 章節中找到。如需詳細資訊,請參閱 暖集區範例事件和模式

受支援的通知目標

Amazon EC2 Auto Scaling 支援將以下任意內容定義為生命週期通知的通知目標:

  • EventBridge 規則

  • Amazon SNS 主題

  • Amazon SQS 佇列

重要

請記住,如果啟動範本或啟動組態中的使用者資料 (cloud-init) 指令碼會在執行個體啟動時對其進行設定,則您無需接收通知,即可在啟動或重新啟動的執行個體上執行自訂動作。

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

EventBridge 規則:若要在 Amazon EC2 Auto Scaling 將執行個體置於等待狀態時執行程式碼,您可以建立 EventBridge 規則並指定 Lambda 函數做為其目標。若要根據不同的生命週期通知叫用不同的 Lambda 函數,您可以建立多個規則,並將每個規則與特定的事件模式和 Lambda 函數相關聯。如需詳細資訊,請參閱建立暖池事件的 EventBridge 規則

Amazon SNS 主題:若要在執行個體處於等待狀態時接收通知,請建立 Amazon SNS 主題,然後設定 Amazon SNS 訊息篩選條件,以便根據訊息屬性以不同方式傳遞生命週期通知。如需詳細資訊,請參閱使用 Amazon SNS 接收通知

Amazon SQS 佇列:若要為生命週期通知設定交付點,使相關取用者可以接收並處理這些通知,您可以建立 Amazon SQS 佇列和處理來自 SQS 佇列的訊息的佇列取用者。如果希望佇列取用者根據訊息屬性以不同方式處理生命週期通知,您也必須設定佇列取用者來解析訊息,然後在特定屬性符合所需值時對訊息採取行動。如需詳細資訊,請參閱 使用 Amazon SQS 接收通知