本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
暖集區可讓您將開機時間非常長的應用程式 (例如因為執行個體需要將大量資料寫入磁碟) 的延遲。使用暖集區讓您不再需要過度佈建 Auto Scaling 群組來管理延遲,以改善應用程式效能。如需詳細資訊,請參閱以下部落格文章:使用 EC2 Auto Scaling 暖集區更快擴展應用程式
重要
若在不需要的情況下建立暖集區,可能會導致不必要的成本。如果首次開機時間不會對應用程式造成明顯的延遲問題,則可能不需要使用暖集區。
核心概念
在開始使用之前,請熟悉以下核心概念:
- 暖集區
-
暖集區是位於 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
-
您使用 生命週期關聯 將執行個體置於等待狀態,以便您對執行個體執行自訂動作。自訂動作會在執行個體啟動時或終止之前執行。
在暖集區組態中,生命週期關聯可以延遲執行個體停止或休眠,以及延遲在橫向擴展事件期間投入使用,直到其完成初始化。如果在沒有 lifecycle hook 的情況下向 Auto Scaling 群組新增暖集區,需要很長時間才能完成初始化的執行個體可能會停止或休眠,接著在準備就緒前,即在水平擴展事件期間投入使用。
- 執行個體重複使用政策
-
依預設,當 Auto Scaling 群組縮減時,Amazon EC2 Auto Scaling 會終止您的執行個體。然後,Amazon EC2 Auto Scaling 會將新執行個體啟動到暖集區內,取代已終止的執行個體。
如果您希望將執行個體傳回暖集區,可以指定執行個體重複使用政策。如此一來,您就可以重複使用已設定為應用程式流量提供服務的執行個體。為確保您的暖集區不會過度佈建,Amazon EC2 Auto Scaling 可以根據其設定終止暖集區中的執行個體,以便在暖集區大於所需大小時將其縮小。終止暖集區中的執行個體時,會使用預設終止政策選擇要首先終止哪些執行個體。
重要
如果您想要在縮減時使執行個體休眠,且 Auto Scaling 群組中存在現有執行個體,則這些執行個體必須滿足執行個體休眠的要求。如果不符要求,執行個體返回暖集區時,便會回退到停止狀態,而不是休眠狀態。
注意
目前,您只能使用 AWS CLI 或 SDK 來指定執行個體重複使用政策。這項功能在主控台中無法使用。
先決條件
為 Auto Scaling 群組建立暖集區之前,請先決定如何使用生命週期關聯以適當的初始狀態來初始化新執行個體。
若要在執行個體因 lifecycle hook 而處於等待狀態時對執行個體執行自訂動作,您有兩個選項:
-
針對要在啟動時在執行個體上執行命令的簡單案例,您可以在為 Auto Scaling 群組建立啟動範本或啟動組態時,納入使用者資料指令碼。使用者資料指令碼只是執行個體啟動cloud-init時由 執行的正常 shell 指令碼或cloud-init指令。指令碼還可以使用執行此指令碼的執行個體 的 ID,藉此控制執行個體何時轉換到下一個狀態。如果您不是這樣做的,那麼更新您的指令碼來從執行個體的中繼資料擷取執行個體中的執行個體 ID。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的存取執行個體中繼資料。
提示
若要在執行個體重新啟動時執行使用者資料指令碼,使用者資料必須採用 MIME 多部分格式,並在使用者資料的
#cloud-config
區段中指定以下內容:#cloud-config cloud_final_modules: - [scripts-user, always]
-
對於需要 等服務的進階案例 AWS Lambda ,在執行個體進入或離開暖集區時執行某些動作,您可以為 Auto Scaling 群組建立生命週期關聯,並設定目標服務,根據生命週期通知執行自訂動作。如需詳細資訊,請參閱受支援的通知目標。
執行個體休眠的準備作業
若要準備 Auto Scaling 執行個體以使用Hibernated
集區狀態,請建立新的啟動範本或啟動組態,以正確設定以支援執行個體休眠,如 Amazon EC2 使用者指南中的休眠先決條件主題所述。然後,將新的啟動範本或啟動組態與 Auto Scaling 群組相關聯,並開始執行個體重新整理,以取代與之前的啟動範本或啟動組態關聯的執行個體。如需詳細資訊,請參閱使用執行個體重新整理來更新 Auto Scaling 群組中的執行個體。
更新暖集區中的執行個體
若要更新暖集區中的執行個體,您可以建立新的啟動範本或啟動組態,並將其與 Auto Scaling 群組建立關聯。所有新的執行個體都會使用新的 AMI 和在啟動範本或啟動組態中指定的其他更新來啟動,但現有的執行個體不會受到影響。
若要強制使用新啟動範本或啟動組態的取代暖集區執行個體啟動,您可以啟動執行個體重新整理對群組進行滾動更新。執行個體重新整理會先取代 InService
執行個體。接著,其會取代暖集區中的執行個體。如需詳細資訊,請參閱使用執行個體重新整理來更新 Auto Scaling 群組中的執行個體。
相關資源
您可以造訪我們的 GitHub 儲存庫
限制
-
您無法將暖集區新增至具有混合執行個體政策的 Auto Scaling 群組。您也無法將暖集區新增至具有啟動範本或啟動組態的 Auto Scaling 群組,以請求 Spot 執行個體,或具有指定 Systems Manager 參數的啟動範本。
-
只有當執行個體的根裝置為 Amazon EBS 磁碟區時,Amazon EC2 Auto Scaling 才可以讓執行個體處於
Stopped
或Hibernated
狀態。無法將使用根裝置執行個體存放區的執行個體停止或休眠。 -
Amazon EC2 Auto Scaling 只有在符合 Amazon Amazon EC2 使用者指南中休眠先決條件主題中列出的所有要求時,才能將執行個體置於
Hibernated
狀態。 Auto Scaling -
如果暖集區在發生擴增事件時已耗盡,執行個體會直接啟動至 Auto Scaling 群組 (冷啟動)。如果可用區域的容量不足,您也可能遭遇冷啟動。
-
如果暖集區中的執行個體在啟動程序期間遇到問題,導致無法達到
InService
狀態,則該執行個體會被視為啟動失敗並終止。無論根本原因為何,例如容量不足錯誤或任何其他因素,這都適用。 -
如果嘗試透過 Amazon Elastic Kubernetes Service (Amazon EKS) 受管節點群組使用暖集區,則仍在初始化的執行個體可能會在 Amazon EKS 叢集中註冊。因此,當執行個體準備停止或休眠時,叢集可能會在執行個體上安排作業。
-
同樣,如果您嘗試在 Amazon ECS 叢集中使用暖集區,執行個體可能會在完成初始化之前向叢集註冊。若要解決此問題,您必須設定啟動範本或啟動組態,其中包含使用者資料中的特殊代理程式組態變數。如需詳細資訊,請參閱 Amazon Elastic Container Service 開發人員指南中的使用 Auto Scaling 群組的暖集區。