根据最大实例生命周期替换 Auto Scaling 实例 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

根据最大实例生命周期替换 Auto Scaling 实例

当您在使用Amazon Web Services Management Console更新 Auto Scaling 组,或者当您使用Amazon CLI或 SDK 来创建或更新 Auto Scaling 组,您可以设置可选的最大实例生命周期参数。最大实例生命周期功能执行替换已在允许的最长时间内使用的实例的工作。例如,此功能支持常见的合规性使用案例,如由于内部安全策略或外部合规性控制,需要按计划替换您的实例。本主题介绍此功能的主要方面以及如何为 Auto Scaling 组配置该功能。

最大实例生命周期指定实例可使用的最长时间(以秒为单位)。最长持续时间适用于组中的所有当前和未来实例。当实例接近其最长持续时间时,该实例将被终止和替换,不能再次使用。

为 Auto Scaling 组配置最长实例生命周期时,您必须指定至少为 86,400 秒(1 天)的值。要清除以前设置的值,请指定新值 0。

请注意,不能保证在仅在实例最长持续时间结束时替换实例。在某些情况下,Amazon EC2 Auto Scaling 可能需要在您配置最长实例生命周期参数后立即开始替换实例。这种更激进行为的目的是避免同时替换所有实例。

根据指定的最长持续时间和 Auto Scaling 组的大小,替换率可能会有所不同。通常,Amazon EC2 Auto Scaling 会一次替换一个实例,两次替换之间会有暂停。但是,在没有足够的时间来根据您指定的最长持续时间单独替换每个实例时,替换率将会更高。在这种情况下,Amazon EC2 Auto Scaling 将一次替换多个实例,一次最多可达 Auto Scaling 组当前容量的 10%。

要管理替换率,您可以执行以下操作:

  • 将最大实例生命周期限制设置为较长的时间段,以便间隔替换。这对于有大量实例要替换的组很有帮助。

  • 使用实例保护来暂时防止替换 Auto Scaling 组中的单个实例,从而在特定替换之间增加额外的时间。当您准备好替换这些实例时,请从每个单独的实例中删除实例保护。有关更多信息,请参阅 使用实例缩减保护

配置最大实例生命周期(控制台)

按常规方式创建 Auto Scaling 组。创建 Auto Scaling 组后,编辑组以指定最长实例生命周期。

配置最大实例生命周期 (Amazon CLI)

在使用指定最大实例生命周期时Amazon CLI,您可以将此限制应用于现有 Auto Scaling 组。您还可以在创建新 Auto Scaling 组时将此限制应用于该组。

对于新的 Auto Scaling 组,请使用create-auto-scaling-group命令。

aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

以下示例 config.json 文件显示的最长实例生命周期为 2592000 秒(30 天)。

{ "AutoScalingGroupName": "my-asg", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "MinSize": 1, "MaxSize": 5, "MaxInstanceLifetime": 2592000, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

对于现有的 Auto Scaling 组,请使用update-auto-scaling-group命令。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-existing-asg --max-instance-lifetime 2592000

验证 Auto Scaling 组的最大实例生命周期

使用Auto Scaling group命令。

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

以下为响应示例。

{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", "LaunchTemplate": { "LaunchTemplateId": "lt-0b97f1e282EXAMPLE", "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 1, "DefaultCooldown": 300, "AvailabilityZones": [ "us-west-2a", "us-west-2b", "us-west-2c" ], "LoadBalancerNames": [], "TargetGroupARNs": [], "HealthCheckType": "EC2", "HealthCheckGracePeriod": 0, "Instances": [ { "InstanceId": "i-04d180b9d5fc578fc", "InstanceType": "t2.small", "AvailabilityZone": "us-west-2b", "LifecycleState": "Pending", "HealthStatus": "Healthy", "LaunchTemplate": { "LaunchTemplateId": "lt-0b97f1e282EXAMPLE", "LaunchTemplateName": "my-launch-template", "Version": "7" }, "ProtectedFromScaleIn": false } ], "CreatedTime": "2019-11-14T22:56:15.487Z", "SuspendedProcesses": [], "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "EnabledMetrics": [], "Tags": [], "TerminationPolicies": [ "Default" ], "NewInstancesProtectedFromScaleIn": false, "ServiceLinkedRoleARN": "arn", "MaxInstanceLifetime": 2592000 } ] }