Amazon-Ec2
當實例計數在 min 和 max 之間時如何使 AWS ASG 什麼都不做
我們正在使用 Terraform 為我們的大多數 AWS EC2 實例啟動 ASG。問題是有時我們想在終止實例之前做一些額外的工作。例如:在節點執行的 EC2 實例終止之前從集群中停用節點。如果我們只是降低
min
==max
(我們的預設值),那麼實例將被終止,我們無法執行優雅的退役。相反,我嘗試的是降低
min
到新的期望值(例如:6)並將 保持max
在舊值(例如:10),在這種情況下發生的情況是該desired
值保持在 10(themax
)並終止 EC2實例會導致 ASG 啟動一個新實例。注意:我們根本沒有設置 Terraformdesired_capacity
設置。如果我
desired_capacity
手動設置,我會冒 ASG 終止尚未正常退役的節點的風險,所以我認為這不是我的選擇。我最希望的是,當 ASG 的目前 EC2 實例計數介於兩者之間時,ASG 什麼也不做
min
,max
讓我手動終止實例。顯然,如果計數低於min
我仍然希望 ASG 啟動一個新的 EC2 實例。有什麼辦法可以做到這一點?
假設解決方案:
選項 1:您的 ASG 應在實例保護開啟的情況下創建- Terraform 文件
在這種情況下,我們可以進行下一個操作序列,例如停用:
- 執行特定實例的退役(從中刪除數據)
- 按理想值減少ASG 大小的計數
- 應用 Terraform 狀態
- 從停用的實例中刪除保護標誌:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in
選項 2:您的 ASG不是使用實例保護創建的。
在這種情況下,我們可以進行下一個操作序列,例如停用:
- 在所有 ASG 實例上添加保護標誌:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --protected-from-scale-in
- 執行特定實例的退役(從中刪除數據)
- 按理想值減少ASG 大小的計數
- 應用 Terraform 狀態
- 從停用的實例中刪除保護標誌:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling- group-name <asg_name> --no-protected-from-scale-in
- (可選)等到 ASG 縮小到所需大小並從其他實例中刪除保護標誌