更换 Auto Scaling 基于最大实例寿命的实例 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

更换 Auto Scaling 基于最大实例寿命的实例

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

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

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

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

根据指定的最长持续时间和 Auto Scaling 组的规模,替换率可能会有所不同。一般来说,Amazon EC2 Auto Scaling 一次替换一个实例,两次替换之间会有暂停。但是,在没有足够的时间来根据您指定的最长持续时间单独替换每个实例时,替换率将会更高。在这种情况下, Amazon EC2 Auto Scaling 将一次更换多个实例,最多可以使用 Auto Scaling 一次的组。

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

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

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

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

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

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

在指定使用 AWS 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 组的最大实例生命周期

使用 describe-auto-scaling-groups 命令。

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