Amazon-Ec2

當實例計數在 min 和 max 之間時如何使 AWS ASG 什麼都不做

  • February 13, 2017

我們正在使用 Terraform 為我們的大多數 AWS EC2 實例啟動 ASG。問題是有時我們想在終止實例之前做一些額外的工作。例如:在節點執行的 EC2 實例終止之前從集群中停用節點。如果我們只是降低min== max(我們的預設值),那麼實例將被終止,我們無法執行優雅的退役。

相反,我嘗試的是降低min到新的期望值(例如:6)並將 保持max在舊值(例如:10),在這種情況下發生的情況是該desired值保持在 10(the max)並終止 EC2實例會導致 ASG 啟動一個新實例。注意:我們根本沒有設置 Terraform desired_capacity設置。

如果我desired_capacity手動設置,我會冒 ASG 終止尚未正常退役的節點的風險,所以我認為這不是我的選擇。

我最希望的是,當 ASG 的目前 EC2 實例計數介於兩者之間時,ASG 什麼也不做minmax讓我手動終止實例。顯然,如果計數低於min我仍然希望 ASG 啟動一個新的 EC2 實例。

有什麼辦法可以做到這一點?

假設解決方案:

選項 1:您的 ASG 應在實例保護開啟的情況下創建- Terraform 文件

在這種情況下,我們可以進行下一個操作序列,例如停用:

  1. 執行特定實例的退役(從中刪除數據)
  2. 按理想值減少ASG 大小的計數
  3. 應用 Terraform 狀態
  4. 從停用的實例中刪除保護標誌:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in

選項 2:您的 ASG不是使用實例保護創建的。

在這種情況下,我們可以進行下一個操作序列,例如停用:

  1. 在所有 ASG 實例上添加保護標誌:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --protected-from-scale-in
  2. 執行特定實例的退役(從中刪除數據)
  3. 按理想值減少ASG 大小的計數
  4. 應用 Terraform 狀態
  5. 從停用的實例中刪除保護標誌:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling- group-name <asg_name> --no-protected-from-scale-in
  6. (可選)等到 ASG 縮小到所需大小並從其他實例中刪除保護標誌

引用自:https://serverfault.com/questions/831137