從「Auto Scaling」群組中分離或附加執行個體 - Amazon EC2 Auto Scaling

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

從「Auto Scaling」群組中分離或附加執行個體

您可以從「Auto Scaling」群組中分離執行個體。分離執行個體之後,該執行個體會變成獨立的執行個體,而且可以獨立管理或附加至不同的 Auto Scaling 群組 (與其所屬的原始群組分開)。例如,當您想要使用已在執行應用程式的現有執行個體執行測試時,這會很有用。

本主題提供有關如何分離和貼附例證的指示。貼附例證時,您也可以使用現有的例證,而不是分離的例證。

我們建議您使用待命程序暫時從群組中移除執行個體,而不是將執行個體分離並重新連接至相同的群組。如需詳細資訊,請參閱從 Auto Scaling 群組暫時移除執行個體

分離執行個體的考量

分離例證時,請記住以下幾點:

  • 只有在執行個體處於InService狀態時,才能將其分離。

  • 卸離執行個體之後,執行個體會繼續執行並產生費用。為避免不必要的費用,請確保在不再需要分離的執行個體時重新連接或終止它們。

  • 您可以選擇依據您要分離的執行個體數量減少所需的容量。如果您選擇不減少容量,Amazon EC2 Auto Scaling 會啟動新執行個體以取代分離的執行個體,以維持所需的容量。

  • 如果您分離的執行個體數量會使 Auto Scaling 群組低於其最小容量,您必須減少最小容量。

  • 如果您從同一可用區域卸離多個執行個體而不減少所需的容量,除非您暫停處理序,否則群組將自行重新平衡。AZRebalance如需詳細資訊,請參閱暫停和恢復 Amazon EC2 Auto Scaling 程序

  • 如果是從已連接負載平衡器目標群組或 Classic Load Balancer 的 Auto Scaling 群組分開執行個體,則執行個體會從負載平衡器取消註冊。如果您的負載平衡器啟用連線排空 (取消註冊延遲),Amazon EC2 Auto Scaling 會等待執行中請求完成。

注意

如果您要分離位於 Standby 狀態的執行個體,請務必謹慎。嘗試在讓執行實例進入Standby 狀態後將其分離,可能會導致其他執行實例意外終止。

附加執行個體的考量

附加例證時請注意下列事項:

  • Amazon EC2 Auto Scaling 會將附加的執行個體視為群組本身啟動的執行個體相同。這表示如果已選取附加的執行個體,就可以在縮放事件期間終止這些執行個體。由AWSServiceRoleForAutoScaling服務連結角色授予的許可允許 Amazon EC2 Auto Scaling 這樣做。

  • 當您連接執行個體,所需的容量會以連接中的執行個體的數量來增加。如果新增執行個體後所需的容量超過群組的大小上限,連接更多執行個體的要求就會失敗。

  • 如果您將執行個體新增至群組,導致跨可用區域分佈不均,Amazon EC2 Auto Scaling 會重新平衡群組以重新建立均勻分佈,除非您暫停該AZRebalance程序。如需詳細資訊,請參閱暫停和恢復 Amazon EC2 Auto Scaling 程序

  • 如果您將執行個體連接到已連接負載平衡器目標群組或 Classic Load Balancer 的 Auto Scaling 群組,則執行個體會註冊到負載平衡器。

要連接的執行個體必須滿足下列條件:

  • 該實例處於 Amazon 的running狀態EC2。

  • AMI用於啟動執行個體的項目必須仍然存在。

  • 該執行個體不屬於另一個 Auto Scaling 群組。

  • 執行個體會啟動到 Auto Scaling 群組中定義的其中一個可用區域。

  • 如果 Auto Scaling 群組具有連接的負載平衡器目標群組或「Classic Load Balancer」,則執行個體和負載平衡器都必須位於相同VPC。

使用分離和貼附將例證移動到不同的群組

使用下列其中一個程序,將執行個體從「Auto Scaling 例」群組中分離,並將其附加至不同的「Auto Scaling 例」群組。

若要從分離的執行個體建立新的 Auto Scaling 群組,請參閱 使用現有執行個體的參數建立 Auto Scaling 群組 (不建議,建立啟動組態)。

Console
從「Auto Scaling」群組中分離例證
  1. 在開啟 Amazon EC2 主控台 https://console.aws.amazon.com/ec2/,然後從導覽窗格中選擇 Auto Scaling 群組

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

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

  3. Instance management (執行個體管理) 索引標籤的 Instances (執行個體) 中,選取執行個體,再選擇 Actions (動作)、Detach (分開)。

  4. 分離執行個體對話方塊中,保持選取替代執行個體核取方塊,以啟動替代執行個體。清除此核取方塊以減少所需容量。

  5. 出現確認提示時,請輸入 detach 來確認移除特定的 Auto Scaling 群組,然後選擇分離執行個體

您現在可以將例證附加到不同的「Auto Scaling」群組。

將執行個體連接至 Auto Scaling 群組
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. (選用) 在導覽窗格的 AUTO SCALING 中,選擇 Auto Scaling Groups (Auto Scaling 群組)。選擇 Auto Scaling 群組,然後確認 Auto Scaling 群組的大小上限是否足夠讓您新增其他執行個體。否則,在 Details (詳細資訊) 索引標籤上增加容量上限。

  3. 在導覽窗格的 Instances (執行個體) 下選擇 Instances (執行個體),然後選取執行個體。

  4. 選擇 Actions (動作)、Instance settings (執行個體設定)、Attach to Auto Scaling Group (連接到 Auto Scaling 群組)。

  5. Attach to Auto Scaling Group (連接到 Auto Scaling 群組) 頁面上,針對 Auto Scaling Group (Auto Scaling 群組) 選擇 Auto Scaling 群組,然後選擇 Attach (連接)。

  6. 如果執行個體不符合條件,您會得到一則包含詳細資訊的錯誤訊息。例如,執行個體可能並非與 Auto Scaling 群組位於相同的可用區域。選擇「關閉」,然後使用符合條件的「Auto Scaling」群組再試一次。

AWS CLI

若要分離並貼附例證,請使用下列範例指令。替換每個 user input placeholder 使用您自己的信息。

從「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", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c20ac468fa3049e8", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0787762faf1c28619", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0f280a4c58d319a8a", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" } ] }
  2. 若要在不減少所需容量的情況下卸離執行個體,請使用下列離執行個體指令。

    aws autoscaling detach-instances --instance-ids i-05b4f7d5be44822a6 \ --auto-scaling-group-name my-asg

    若要分離執行個體並減少所需的容量,請包括選--should-decrement-desired-capacity項。

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

您現在可以將例證附加到不同的「Auto Scaling」群組。

將執行個體連接至 Auto Scaling 群組
  1. 若要將例證附加至不同的「Auto Scaling 例」群組,請使用下列附加例證指令。

    aws autoscaling attach-instances --instance-ids i-05b4f7d5be44822a6 --auto-scaling-group-name my-asg-for-testing
  2. 若要在附加例證後確認「自動縮放」(Auto Scaling) 群組的大小,請使用下列describe-auto-scaling-groups指令。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg-for-testing

    下列範例回應顯示群組有兩個執行中的執行個體,其中一個是您連接的執行個體。

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg-for-testing", "AutoScalingGroupARN": "arn", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "2", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 2, ... "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceType": "t3.micro", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "2", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-00dcdfffdf5175890", "InstanceType": "t3.micro", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], ... } ] }