使用实例刷新和跳过匹配 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用实例刷新和跳过匹配

跳过匹配将通知 Amazon EC2 Auto Scaling 忽略已有最新更新的实例。这样,您就无需替换超过所需数量的实例。当您希望确保自动扩缩组使用特定版本的启动模板,并且只替换那些使用其他版本的实例时,这是很有用的。

在跳过匹配时,请注意以下事项:

  • 如果您在启动实例刷新时同时使用跳过匹配和所需配置,Amazon EC2 Auto Scaling 将检查是否有任何实例与所需配置匹配。然后,它只会替换与所需配置不匹配的实例。在实例刷新成功后,Amazon EC2 Auto Scaling 会更新组以反映您的所需配置。

  • 如果您使用跳过匹配启动实例刷新,但没有指定所需的配置,Amazon EC2 Auto Scaling 会检查是否有任何实例与您上次保存在自动扩缩组中的配置相匹配。然后,它只会替换与您上次保存的配置不匹配的实例。

  • 您可以将跳过匹配与新的启动模板、启动模板的新版本或一组实例类型配合使用。如果您启用了跳过匹配,但这些内容都没有更改,则实例刷新将立即成功,而无需替换任何实例。如果您对所需配置进行了任何其他更改(例如更改竞价型分配策略),Amazon EC2 Auto Scaling 将等待实例刷新成功。然后,它会更新自动扩缩组设置以反映新的所需配置。

  • 您不能将跳过匹配与新的启动配置配合使用。

  • 当您开始实例刷新并提供所需的配置时,Amazon EC2 Auto Scaling 可确保所有实例都使用所需的配置。因此,当您为启动模板指定$Default$Latest作为所需版本,然后在实例刷新过程中创建启动模板的新版本时,任何已被替换的实例都将再次被替换。

  • 跳过匹配不知道启动模板中的用户数据脚本是否会提取更新的代码并将其安装在新实例上。因此,跳过匹配可能会跳过替换已安装过时代码的实例。在这种情况下,您应该关闭跳过匹配功能,以确保即使没有启动模板版本更新,所有实例也都能收到您的最新代码。

本节包含 Amazon CLI 有关在启用跳过匹配的情况下开始实例刷新的说明。有关如何使用控制台的说明,请参阅启动实例刷新(控制台)

按照本节中的步骤使用 Amazon CLI 来执行以下操作:

  • 创建您希望应用于实例的启动模板。

  • 启动实例刷新,将启动模板应用到自动扩缩组。如果您不启用跳过匹配,则所有实例都将被替换。即使用于预置实例的启动模板与您为所需配置指定的启动模板相同,也是如此。

将跳过匹配与新的启动模板配合使用
  1. 使用create-launch-template命令为您的 Auto Scaling 组创建新的启动模板。包括定义为您的自动扩缩组创建的实例详细信息的 --launch-template-data 选项和 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 } }

    有关更多信息,请参阅 使用 Amazon Command Line Interface (Amazon CLI) 创建和管理启动模板的示例

  2. 使用start-instance-refresh命令启动实例替换工作流程,并应用带有 ID 的新启动模板lt-068f72b729example。因为启动模板是新的,所以它只有一个版本。这意味着启动模板的版本 1 是本次实例刷新的目标。如果在实例刷新期间发生横向扩展事件,并且 Amazon EC2 Auto Scaling 使用本启动模板的版本 1 预置新的实例,则它们不会被替换。成功完成操作后,新的启动模板即成功应用到自动扩缩组。

    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 组采用混合实例策略,请按照本节中的步骤使用跳过匹配开始实例刷新。 Amazon CLI 您有以下选项:

  • 提供新的启动模板,以应用于在策略中指定的所有实例类型。

  • 提供一组更新的实例类型,无论是否更改策略中的启动模板。例如,您可能想要从不需要的实例类型迁移。您可以按原样使用启动模板,无需更改 AMI、安全组或要替换实例的其他具体信息。

请按照以下部分之一的步骤操作,具体取决于哪个选项适合您的需求。

将跳过匹配与新的启动模板配合使用
  1. 使用create-launch-template命令为您的 Auto Scaling 组创建新的启动模板。包括定义为您的自动扩缩组创建的实例详细信息的 --launch-template-data 选项和 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 } }

    有关更多信息,请参阅 使用 Amazon Command Line Interface (Amazon CLI) 创建和管理启动模板的示例

  2. 要查看您的 Auto Scaling 组的现有混合实例策略,请运行describe-auto-scaling-groups命令。在下一步中,当您开始刷新实例时,您将需要这些信息。

    以下示例命令返回为名为 my-asg 的自动扩缩组配置的混合实例策略。

    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 预置新的实例,则它们不会被替换。成功完成操作后,更新的混合实例策略将成功应用到自动扩缩组。

    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 的自动扩缩组配置的混合实例策略。

    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 的情况下启动实例刷新。当组中的实例类型与其余三个实例类型之一不匹配时,实例将被替换。(请注意,实例刷新不会选择要从中预置新实例的实例类型;而是由分配策略来选择。) 成功完成操作后,更新的混合实例策略将成功应用到自动扩缩组。

    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 } }