搭配略過相符項目使用執行個體重新整理 - Amazon EC2 Auto Scaling

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

搭配略過相符項目使用執行個體重新整理

略過相符項目會讓 Amazon EC2 Auto Scaling 忽略已經有最新更新的執行個體。如此一來,您就不會取代超過需要的執行個體數量。當您想要確定 Auto Scaling 群組使用特定版本的啟動範本,並且僅取代使用不同版本的執行個體時,這會很有幫助。

略過相符項目有下列考量:

  • 如果同時使用略過相符項目和所需組態來啟動執行個體重新整理,Amazon EC2 Auto Scaling 會檢查是否有任何執行個體與所需組態相符。然後,它只會取代與您所需組態不相符的執行個體。執行個體重新整理成功後,Amazon EC2 Auto Scaling 會更新群組,以反映所需組態。

  • 如果您使用略過相符項目來啟動執行個體重新整理,但未指定所需組態,Amazon EC2 Auto Scaling 會檢查是否有任何執行個體與您上次儲存在 Auto Scaling 群組上的組態相符。然後,它只會取代與您上次儲存的組態不相符的執行個體。

  • 您可以將略過相符項目與新啟動範本、啟動範本新版本或一組執行個體類型搭配使用。如果啟用略過相符項目功能,但這些都沒有變更,則執行個體重新整理會立即成功,且不會取代任何執行個體。如果您對所需組態進行了任何其他變更 (例如變更 Spot 分配策略),Amazon EC2 Auto Scaling 會等待執行個體重新整理成功完成。然後,它會更新 Auto Scaling 群組設定,以反映新的所需組態。

  • 您無法將略過相符項目功能與新的啟動組態搭配使用。

  • 當您啟動執行個體重新整理並提供所需的組態時,Amazon EC2 Auto Scaling 可確保所有執行個體都使用您想要的組態。因此,當您指定$Default$Latest作為啟動範本所需的版本,然後在執行個體重新整理進行時建立新版本的啟動範本時,將會再次取代任何已取代的執行個體。

  • 略過匹配不知道啟動模板中的用戶數據腳本是否會提取更新的代碼並將其安裝在新的實例上。因此,略過比對可能會略過取代已安裝過期程式碼的執行個體。在這種情況下,您應該關閉略過比對功能,以確保所有執行個體都能收到最新的程式碼,即使沒有啟動範本版本更新也是如此。

本節包含在啟用略過比對的情況下啟動執行個體重新整理的 AWS CLI 指示。如需使用主控台的說明,請參閱「啟動執行個體重新整理 (主控台)」。

請遵循本節中的步驟 AWS CLI 來執行下列操作:

  • 建立您要套用到執行個體的啟動範本。

  • 啟動執行個體重新整理,以將啟動範本套用到 Auto Scaling 群組。如果您沒有啟用略過相符項目,則會取代所有執行個體。即使用於佈建執行個體的啟動範本與您為所需組態指定的啟動範本相同,也是如此。

將略過相符項目功能與新啟動範本搭配使用
  1. 使用指create-launch-template令為您的「Auto Scaling」群組建立新的啟動範本。請包含 --launch-template-data 選項,以及定義已為您 Auto Scaling 群組建立的執行個體詳細資訊的 JSON 輸入。

    例如,使用下列命令建立具有 AMI ID ami-0123456789abcdef0t2.micro 執行個體類型的基本啟動範本。

    aws ec2 create-launch-template --launch-template-name my-template-for-auto-scaling --version-description version1 \ --launch-template-data '{"ImageId":"ami-0123456789abcdef0","InstanceType":"t2.micro"}'

    如果成功,此命令傳回的輸出會類似如下。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-068f72b729example", "LaunchTemplateName": "my-template-for-auto-scaling", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "CreateTime": "2023-01-30T18:16:06.000Z", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

    如需詳細資訊,請參閱 使用建立和管理啟動範本的範例 AWS CLI

  2. 使用指start-instance-refresh令啟動執行個體取代工作流程,並使用 ID 套用新的啟動範本lt-068f72b729example。由於啟動範本是全新內容,因此只有一個版本。這表示啟動範本第 1 版是此執行個體重新整理的目標。如果在執行個體重新整理期間發生橫向擴展事件,而 Amazon EC2 Auto Scaling 使用此第 1 版啟動範本佈建新執行個體,它們則不會遭到取代。成功完成此操作後,新啟動範本便已成功套用到 Auto Scaling 群組。

    aws autoscaling start-instance-refresh --cli-input-json file://config.json

    config.json 的內容。

    { "AutoScalingGroupName": "my-asg", "DesiredConfiguration": { "LaunchTemplate": { "LaunchTemplateId": "lt-068f72b729example", "Version": "$Default" } }, "Preferences": { "SkipMatching": true } }

    如果成功,此命令傳回的輸出會類似如下。

    { "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" }

如果您有具有混合執行個體政策的 Auto Scaling 群組,請遵循本節中的步驟,使用啟動執行個體重新整理並跳過比對。 AWS CLI 您有下列選項:

  • 提供新啟動範本,以套用到政策中指定的所有執行個體類型。

  • 提供一組更新的執行個體類型 (不論是否變更政策中的啟動範本)。例如,您可能會想要從不需要的執行個體類型遷移。您可以依現狀使用啟動範本,而不變更要取代之執行個體的 AMI、安全群組或其他具體內容。

根據符合您需求的選項,依照下列其中一節中的步驟進行操作。

將略過相符項目功能與新啟動範本搭配使用
  1. 使用指create-launch-template令為您的「Auto Scaling」群組建立新的啟動範本。請包含 --launch-template-data 選項,以及定義已為您 Auto Scaling 群組建立的執行個體詳細資訊的 JSON 輸入。

    例如,使用下列命令建立具有 AMI ID ami-0123456789abcdef0 的啟動範本。

    aws ec2 create-launch-template --launch-template-name my-new-template --version-description version1 \ --launch-template-data '{"ImageId":"ami-0123456789abcdef0"}'

    如果成功,此命令傳回的輸出會類似如下。

    { "LaunchTemplate": { "LaunchTemplateId": "lt-04d5cc9b88example", "LaunchTemplateName": "my-new-template", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "CreateTime": "2023-01-31T15:56:02.000Z", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

    如需詳細資訊,請參閱 使用建立和管理啟動範本的範例 AWS CLI

  2. 若要檢視 Auto Scaling 群組的現有混合執行個體政策,請執行describe-auto-scaling-groups命令。當您啟動執行個體重新整理時,您在下一個步驟中會需要此資訊。

    下列命令範例會傳回針對名為 my-asg 之 Auto Scaling 群組所設定的混合執行個體政策。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    如果成功,此命令傳回的輸出會類似如下。

    { "AutoScalingGroups":[ { "AutoScalingGroupName":"my-asg", "AutoScalingGroupARN":"arn", "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "LaunchTemplateName":"my-old-template", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } }, "MinSize":1, "MaxSize":5, "DesiredCapacity":4, ... } ] }
  3. 使用指start-instance-refresh令啟動執行個體取代工作流程,並使用 ID 套用新的啟動範本lt-04d5cc9b88example。由於啟動範本是全新內容,因此只有一個版本。這表示啟動範本第 1 版是此執行個體重新整理的目標。如果在執行個體重新整理期間發生橫向擴展事件,而 Amazon EC2 Auto Scaling 使用此第 1 版啟動範本佈建新執行個體,它們則不會遭到取代。成功完成此操作後,更新的混合執行個體政策便已成功套用到 Auto Scaling 群組。

    aws autoscaling start-instance-refresh --cli-input-json file://config.json

    config.json 的內容。

    { "AutoScalingGroupName":"my-asg", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-04d5cc9b88example", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } } } }, "Preferences":{ "SkipMatching":true } }

    如果成功,此命令傳回的輸出會類似如下。

    { "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" }

在接下來的這個程序中,您會提供一組更新的執行個體類型,而不變更啟動範本。

將略過相符項目與一組更新的執行個體類型搭配使用
  1. 若要檢視 Auto Scaling 群組的現有混合執行個體政策,請執行describe-auto-scaling-groups命令。當您啟動執行個體重新整理時,您在下一個步驟中會需要此資訊。

    下列命令範例會傳回針對名為 my-asg 之 Auto Scaling 群組所設定的混合執行個體政策。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    如果成功,此命令傳回的輸出會類似如下。

    { "AutoScalingGroups":[ { "AutoScalingGroupName":"my-asg", "AutoScalingGroupARN":"arn", "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "LaunchTemplateName":"my-template-for-auto-scaling", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" }, { "InstanceType":"m5a.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } }, "MinSize":1, "MaxSize":5, "DesiredCapacity":4, ... } ] }
  2. 使用指start-instance-refresh令啟動執行個體取代工作流程並套用更新。若要取代使用特定執行個體類型的執行個體,所需組態必須指定僅包含您需要的執行個體類型的混合執行個體政策。您可以選擇是否在原處新增新的執行個體類型。

    下列命令範例會啟動執行個體重新整理,而不包含不需要的執行個體類型 m5a.large。當群組中的某個執行個體類型與剩下三個執行個體類型的其中一個不相符時,執行個體就會遭到取代。(請注意,執行個體重新整理不會選擇要從中佈建新執行個體的執行個體類型,分配策略才會這樣做。) 成功完成此操作後,更新的混合執行個體政策便已成功套用到 Auto Scaling 群組。

    aws autoscaling start-instance-refresh --cli-input-json file://config.json

    config.json 的內容

    { "AutoScalingGroupName":"my-asg", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate":{ "LaunchTemplateSpecification":{ "LaunchTemplateId":"lt-073693ed27example", "Version":"$Default" }, "Overrides":[ { "InstanceType":"c5.large" }, { "InstanceType":"c5a.large" }, { "InstanceType":"m5.large" } ] }, "InstancesDistribution":{ "OnDemandAllocationStrategy":"prioritized", "OnDemandBaseCapacity":1, "OnDemandPercentageAboveBaseCapacity":50, "SpotAllocationStrategy":"price-capacity-optimized" } } } }, "Preferences":{ "SkipMatching":true } }