Study Notes - EC2 Auto Scaling - Termination Policies
Auto Scaling 會自動增加機器,也會自動刪除機器,那 Auto Scaling 怎麼知道要砍哪一台?看最舊的?看最新的?還是看心情?
如同前面說描述,一個通用的機制的考慮必須是全面性的,所以接下整理的就是很多人會關心的問題:EC2 Auto Scaling 對 Instance 的 刪除策略 (Termination Policies)
。
EC2 Auto Scaling 系列文章
Termination Policies
當 ASG 達到條件,把調整機器數從多變少的時候 (稱為 Scale In 或 Remove Instance),這時候 ASG 需要選擇刪除哪一台 EC2,這些選擇策略稱為:Termination Policies
,同樣的依照不同情境、架構也會有不同選擇。一共有三種:
- Default Termination Policy
- Customizing the Termination Policy
- Instance Protection
Default Termination Policy
Default Termination Policy 挑選刪除 Instance 的條件次序:
- 據機器在 AZ 的數量 -> 選擇機器多的 AZ,然後挑一台砍掉
- 如果在 AZ 裡有多台 unprotected instances,先找機器多的 AZs
a. 根據選擇 Instance Type 的策略,可能是 Spot or On-Demand
b. 如果有多台機器,則找到其中 LC or LT 最舊的機器,然後砍掉
c. 如果是使用 LC 跑起來的 ASG,找到最舊的 LC 砍掉。 - 那一台機器快到下個 Billing 的時間
- 如果有多台 unprotected instances 都快到下一個 billing hour,那就隨機挑一台坎。
Customizing the Termination Policy
除了 Default Termination Policy,使用者也可以使用 Customizing the Termination Policy,目前支援以下幾種:
- OldestInstance: 刪除最舊的 Instance 。通常用在更換 AMI / LC 的時候,可以透過增加一倍的機器,等機器都好了,再恢復期望值,如此就的機器就會全部刪除了。有點像是 Blue-Green Deployment 時的狀況。
- NewestInstance: 跟上一個相反,刪除最新的 Instance。通常用在測試新版本的 AMI / LC,可以想像適用 Canary Deployment 的方式。
- OldestLaunchConfiguration: 刪除最舊的 LC 所建立的機器。
- ClosestToNextInstanceHour: 刪除最接近下次收費的機器。
- Default: 預設,就是前面的流程圖。
Termination Policy 可以有多個。
Instance Protection
Instance Protection 用來保護特定的 EC2 Instance,可以使用在新開機的 Instance 或者是已經在執行中的 Instance。在 Production 維運時,這是非常重要的功能,可以避免 Downtime。使用此功能要注意以下:
- 如果把機器從 ASG Detach 後,重新 Attach 回 ASG,就會失去 Protection。
- 如果手動到 EC2 Console 把機器砍了,是不被 ASG 可以控管的。要個別保護 EC2 ,則可以使用 Termination Protection。
- Spot Instance Interruption 會直接砍了機器。
Termination 要注意的地方
通常要砍掉機器,要注意的是應用程式是否有 Graceful Shutdown
。
如果執行中的程序 (Process),直接被中斷,不影響邏輯或者狀態,那麼就無所謂。如果執行中的程序被中斷,會影響商業邏輯,那麼就要透過 Lifecycle 機制,通知應用程式執行完之後不要在繼續執行了,這個過程稱為 Graceful Shutdown
。類似的例子是 ELB 的 Connection Draining (連線排水) 其實就是 Graceful Shutdown 在 Load Balancer 的實作。
ASG 上的 Graceful Shutdown 實作通常會搭配 Lifecycle Hooks 執行,詳細介紹參見:EC2 Auto Scaling Lifecycle and Hooks。
延伸閱讀
系列文章
- Study Notes - EC2 Auto Scaling 基礎介紹
- Study Notes - EC2 Auto Scaling - Scaling Policies
- Study Notes - EC2 Auto Scaling - Termination Policies
- Study Notes - EC2 Auto Scaling - Lifecycle and Hooks
- Study Notes - EC2 Auto Scaling 導入與應用
- Study Notes - EC2 Auto Scaling 常見問答
站內延伸
- Resource Provisioning and DevOps
- EC2 Instance Lifecycle and Troubleshooting
- Artifacts Management
- EC2 Run Command and SSM Agent
- Study Notes - CloudWatch
- Study Notes - CodeDeploy Preparation