從 Auto Scaling 群組暫時移除執行個體 - Amazon EC2 Auto Scaling

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

從 Auto Scaling 群組暫時移除執行個體

您可以讓處於 InService 狀態的執行個體進入 Standby 狀態,更新執行個體或疑難排解執行個體問題,然後讓執行個體恢復到服務狀態。處於待命狀態的執行個體仍然屬於 Auto Scaling 群組,但不會主動處理負載平衡器流量。

此功能可協助您停止並啟動執行個體或重新啟動執行個體,而不必擔心 Amazon EC2 Auto Scaling 會在進行運作狀態檢查時或縮減事件期間終止執行個體。

例如,您隨時可以透過變更啟動範本或啟動組態來變更 Auto Scaling 群組的 Amazon Machine Image (AMI)。Auto Scaling 群組啟動的任何後續執行個體都會使用此 AMI。不過,Auto Scaling 群組不會更新目前正在服務的執行個體。您可以終止這些執行個體並讓 Amazon EC2 Auto Scaling 取代它們,或使用執行個體重新整理功能來終止和取代執行個體。您也可以讓執行個體進入待命狀態、更新軟體,然後讓執行個體恢復到服務狀態。

從 Auto Scaling 群組中分開執行個體的程序與將執行個體置於待命狀態類似。如果您想要將執行個體連接到不同的群組或管理執行個體 (例如獨立 EC2 執行個體) 並可能終止執行個體,卸離執行個體可能會很有用。如需詳細資訊,請參閱 分離或貼附例證

待命狀態的運作方式

待命狀態的運作方式如下所示,可協助您暫時從 Auto Scaling 群組移除執行個體:

  1. 請您將該執行個體設為待命狀態。執行個體會維持此狀態,直到執行個體退出待命狀態。

  2. 如果有負載平衡器目標群組或 Classic Load Balancer 連接到 Auto Scaling 群組,執行個體會從負載平衡器取消註冊。如果為負載平衡器啟用連接耗盡,Elastic Load Balancing 會依預設等待 300 秒,再完成取消註冊程序,這有助完成執行中的請求。

  3. 您可以更新執行個體或對其進行故障排除。

  4. 透過退出待命狀態可使執行個體恢復到服務狀態。

  5. 如果有負載平衡器目標群組或 Classic Load Balancer 連接到 Auto Scaling 群組,執行個體會向負載平衡器註冊。

如需 Auto Scaling 群組中執行個體生命週期的詳細資訊,請參閱 Amazon EC2 Auto Scaling 執行個體生命週期

考量事項

下列是將執行個體移入待命狀態時的考量事項:

  • 當您將執行個體置於待命狀態時,您可以透過此作業減少所需容量,也可以使其保持相同的值。

    • 如果您選擇不減少 Auto Scaling 群組的所需容量,則 Amazon EC2 Auto Scaling 會啟動執行個體以取代處於待命狀態的執行個體。其目的是當一個或多個執行個體處於待命狀態時,協助您維持應用程式的容量。

    • 如果您選擇減少 Auto Scaling 群組的所需容量,這樣可以防止啟動執行個體以取代處於待命狀態的執行個體。

  • 執行個體恢復到服務狀態後,所需容量會增加,以反映 Auto Scaling 群組中的執行個體數。

  • 若要執行增加 (和減少),新的所需容量必須介於最小和最大群組大小之間。否則,操作會失敗。

  • 如果在將執行個體置於待命狀態或透過退出待命狀態將執行個體返回服務狀態之後,發現 Auto Scaling 群組在可用區域之間無法平衡,Amazon EC2 Auto Scaling 會透過重新平衡可用區域來進行補償,除非您暫停 AZRebalance 程序。如需詳細資訊,請參閱 暫停和恢復 Amazon EC2 Auto Scaling 程序

  • 您需支付待命狀態的執行個體費用。

待命狀態中的執行個體運作狀態

Amazon EC2 Auto Scaling 不會對待命狀態的執行個體執行運作狀態檢查。當執行個體處於待命狀態時,其顯示的運作狀態為進入待命狀態前的狀態。直到待命的執行個體恢復到服務狀態,Amazon EC2 Auto Scaling 才會對它們執行運作狀態檢查。

例如,如果讓狀態良好的執行個體進入待命狀態,再將其終止,Amazon EC2 Auto Scaling 仍會回報此執行個體狀態良好。如果嘗試讓處於待命狀態的已終止執行個體重新進入服務,Amazon EC2 Auto Scaling 會執行個體運作狀態檢查,若判斷為處於終止狀態且運作狀態不佳,則會啟動替換執行個體。如需詳細資訊,請參閱 Auto Scaling 群組中的執行個體運作狀態檢查

將執行個體設定為待命,暫時移除執行個體

使用下列其中一個程序,將執行個體置於待命狀態,暫時停止服務。

Console
暫時移除執行個體
  1. 前往網址 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台,然後從導覽窗格中選擇 Auto Scaling 群組

  2. 選取 Auto Scaling 群組旁的核取方塊。

    頁面底部會開啟一個分割窗格。

  3. Instance management (執行個體管理) 索引標籤的 Instances (執行個體) 中,選取執行個體。

  4. 選擇 Actions (動作)、Set to Standby (設定為待命)。

  5. 設定為待命對話方塊中,保持選取替代執行個體核取方塊,以啟動替代執行個體。清除此核取方塊以減少所需容量。

  6. 出現確認提示時,輸入 standby 以確認將指定的執行個體置於 Standby 狀態,然後選擇設定為待命

  7. 您可以視需求更新執行個體或排解問題。完成後,接續下一個步驟,讓執行個體恢復到服務狀態。

  8. 選取執行個體,選擇動作設定為 InService。在 [設定為] 對 InService話方塊中,選擇 [設定為] InService。

AWS CLI

若要暫時移除 Auto Scaling 群組中的執行個體,請使用下列範例指令。將每個使用者輸入預留位置替換為自己的資訊。

暫時移除執行個體
  1. 使用下列describe-auto-scaling-instances指令來識別要更新的執行個體。

    aws autoscaling describe-auto-scaling-instances \ --query 'AutoScalingInstances[?AutoScalingGroupName==`my-asg`]'

    下列範例顯示執行此命令時產生的輸出。

    記下您要從群組中移除的執行個體 ID。您需要在下一步中使用此 ID。

    { "AutoScalingInstances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceId": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, ... ] }
  2. 使用以下 enter-standby 命令,將執行個體設為 Standby 狀態。--should-decrement-desired-capacity 選項會減少所需容量,讓 Auto Scaling 群組不會啟動替代執行個體。

    aws autoscaling enter-standby --instance-ids i-05b4f7d5be44822a6 \ --auto-scaling-group-name my-asg --should-decrement-desired-capacity

    以下是回應範例。

    { "Activities": [ { "ActivityId": "3b1839fe-24b0-40d9-80ae-bcd883c2be32", "AutoScalingGroupName": "my-asg", "Description": "Moving EC2 instance to Standby: i-05b4f7d5be44822a6", "Cause": "At 2023-12-15T21:31:26Z instance i-05b4f7d5be44822a6 was moved to standby in response to a user request, shrinking the capacity from 4 to 3.", "StartTime": "2023-12-15T21:31:26.150Z", "StatusCode": "InProgress", "Progress": 50, "Details": "{\"Subnet ID\":\"subnet-c934b782\",\"Availability Zone\":\"us-west-2a\"}" } ] }
  3. (選擇性) 使用下列describe-auto-scaling-instances命令確認執行個體是否正在Standby使用中。

    aws autoscaling describe-auto-scaling-instances --instance-ids i-05b4f7d5be44822a6

    以下是回應範例。請注意,現在執行個體的狀態為 Standby

    { "AutoScalingInstances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "Standby" }, ... ] }
  4. 您可以視需求更新執行個體或排解問題。完成後,接續下一個步驟,讓執行個體恢復到服務狀態。

  5. 使用以下 exit-standby 命令,讓執行個體回到服務狀態。

    aws autoscaling exit-standby --instance-ids i-05b4f7d5be44822a6 --auto-scaling-group-name my-asg

    以下是回應範例。

    { "Activities": [ { "ActivityId": "db12b166-cdcc-4c54-8aac-08c5935f8389", "AutoScalingGroupName": "my-asg", "Description": "Moving EC2 instance out of Standby: i-05b4f7d5be44822a6", "Cause": "At 2023-12-15T21:46:14Z instance i-05b4f7d5be44822a6 was moved out of standby in response to a user request, increasing the capacity from 3 to 4.", "StartTime": "2023-12-15T21:46:14.678Z", "StatusCode": "PreInService", "Progress": 30, "Details": "{\"Subnet ID\":\"subnet-c934b782\",\"Availability Zone\":\"us-west-2a\"}" } ] }
  6. (選用) 使用以下 describe-auto-scaling-instances 命令驗證恢復到服務狀態的執行個體。

    aws autoscaling describe-auto-scaling-instances --instance-ids i-05b4f7d5be44822a6

    以下是回應範例。請注意,該執行個體的狀態為 InService

    { "AutoScalingInstances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, ... ] }