You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS自动扩缩容组(ASG)缩容时如何选择要移除的EC2实例?

AWS Auto Scaling Group(ASG)缩容实例选择逻辑及任务状态感知机制

一、ASG缩容时的实例选择规则

ASG提供了多种预设的实例选择策略,你可以在ASG配置中指定,默认策略为OldestLaunchConfiguration,常见策略包括:

  • OldestLaunchConfiguration:优先移除使用最旧启动配置的实例;若所有实例使用同一种启动配置,则自动切换为OldestInstance策略
  • OldestInstance:优先移除创建时间最早的实例
  • NewestInstance:优先移除创建时间最晚的实例
  • ClosestToNextInstanceHour:优先移除距离下一个计费小时最近的实例,适合成本优化场景
  • Default:与OldestLaunchConfiguration逻辑一致

另外,你可以通过实例保护功能锁定特定实例:启用该功能后,ASG在缩容时会直接跳过这些实例,除非你手动关闭保护或执行强制缩容操作。

二、ASG如何感知实例的任务运行状态

ASG本身不会主动检测实例内部的任务执行状态,需要通过以下方式实现状态反馈,让ASG在缩容时避开正在工作的实例:

1. 生命周期钩子(Lifecycle Hooks)

这是最灵活的解决方案:当ASG触发缩容流程时,会先触发一个Terminating:Wait类型的生命周期钩子,暂停实例的终止操作。此时你可以通过自定义脚本或Lambda函数完成以下操作:

  • 检查实例上的任务状态(比如通过ps aux | grep "running-task"查看进程,或读取任务状态文件)
  • 如果实例正在执行任务,保持钩子的等待状态,直到任务完成
  • 确认实例空闲后,调用AWS CLI或SDK发送CompleteLifecycleAction命令,允许ASG继续终止实例

示例CLI命令:

aws autoscaling complete-lifecycle-action \
  --lifecycle-hook-name my-task-protection-hook \
  --auto-scaling-group-name my-production-asg \
  --lifecycle-action-result CONTINUE \
  --instance-id i-0abc123def456ghi7

2. 负载均衡器连接 draining(适用于网络请求类任务)

如果ASG关联了ALB/NLB,缩容时负载均衡器会自动启动连接 draining 流程:

  • 停止向待终止实例发送新请求
  • 等待现有连接处理完成(可配置超时时间),之后再允许ASG终止实例
    这种方式仅适用于HTTP/HTTPS、TCP等网络连接类任务,无法覆盖后台离线任务场景。

3. 自定义健康状态上报

你可以在实例上运行健康检查脚本,通过PutInstanceHealth API向ASG上报实例状态:

  • 当实例正在执行任务时,上报Healthy状态,结合缩容策略避免被优先选中
  • 当实例空闲时,可上报Unhealthy状态(需注意:ASG会自动替换不健康实例,仅适合需要主动回收空闲实例的场景)

内容的提问来源于stack exchange,提问作者Mandroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:52:12