基于最大实例生命周期替换 Auto Scaling 实例
最大实例生命周期指定实例在终止和替换之前可提供服务的最长时间(以秒为单位)。由于内部安全策略或外部合规性控制,常见使用案例可能需要按计划替换您的实例。
您必须指定至少 86,400 秒(一天)的值。要清除以前设置的值,请指定新值 0。此设置适用于 Auto Scaling 组中的所有当前和未来实例。
将此值设置得太低可能会导致实例的替换速度超出预期。一般来说,Amazon EC2 Auto Scaling 一次替换一个实例,两次替换之间会有暂停。但是,如果您指定的最大实例生命周期无法足够时间来单独替换每个实例,Amazon EC2 Auto Scaling 必须一次替换多个实例。可能会一次替换多个实例,最多可达 Auto Scaling 组当前容量的 10%。
要管理替换率,您可以执行以下操作:
-
应将最大实例生命周期限制设置为较长的时间段。这会将替换分隔开,对于有大量实例要替换的组很有帮助。
-
可以使用实例保护在特定替换之间添加额外时间。这将暂时防止替换 Auto Scaling 组中的单个实例。当您准备好替换这些实例时,请从每个单独的实例中删除实例保护。有关更多信息,请参阅实例横向缩减保护。
注意
每当替换旧实例并启动新实例时,新实例都会使用当前与自动扩缩组关联的启动模板或启动配置。如果启动模板或启动配置指定了其他版本应用程序的 AMI ID,则将自动部署此版本的应用程序。
设置最大实例生命周期
在控制台中创建 Auto Scaling 组时,您将无法设置最大实例生命周期。但在创建该组后,您就可以对其进行编辑,以设置最大实例生命周期。
为组设置最大实例生命周期(控制台)
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中 Auto Scaling 组旁边的复选框。
将在 Auto Scaling groups(Auto Scaling 组)页面底部打开一个拆分窗格,其中显示有关您选择的组的信息。
-
在 Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。
-
对于 Maximum instance lifetime (最大实例生命周期),输入实例可使用的最长秒数。
-
选择 Update(更新)。
在 Activity(活动)选项卡上的 Activity history(活动历史记录)下,您可以通过其整个历史记录查看该组中实例的替换情况。
为组设置最大实例生命周期 (Amazon CLI)
您也可以使用 Amazon CLI 为新的或现有 Auto Scaling 组设置最大实例生命周期。
对于新的 Auto Scaling 组,请使用 create-auto-scaling-group 命令。
aws autoscaling create-auto-scaling-group --cli-input-jsonfile://~/config.json
以下示例 config.json 文件显示的最长实例生命周期为 2592000 秒(30 天)。
{ "AutoScalingGroupName": "my-asg", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "MinSize":, "MaxSize":1, "MaxInstanceLifetime":5, "VPCZoneIdentifier": "2592000subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }
对于现有的 Auto Scaling 组,请使用 update-auto-scaling-group 命令。
aws autoscaling update-auto-scaling-group --auto-scaling-group-namemy-existing-asg--max-instance-lifetime2592000
验证 Auto Scaling 组的最大实例生命周期
使用 describe-auto-scaling-groups 命令。
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-namemy-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
}
]
}
限制
-
不能保证每个实例的最大生命周期都是准确的:不能保证仅在实例最大持续时间结束时替换实例。在某些情况下,Amazon EC2 Auto Scaling 可能需要在您更新最大实例生命周期参数后立即开始替换实例。此行为的原因是避免同时替换所有实例。
-
实例在启动前终止:当 Auto Scaling 组中只有一个实例时,最大实例生命周期功能可能会导致中断,因为 Amazon EC2 Auto Scaling 会终止实例,然后启动新实例。