【发布时间】:2021-08-23 08:07:18
【问题描述】:
背景
我在 EC2 应用程序负载均衡器 (ALB) 下运行多实例服务。我正在使用 Auto Scaling Group (ASG) 根据负载增加和减少实例。
当 ASG 进行 Scale-In 并终止实例时,我需要在实例运行之前对其执行一项任务。所以我设置了一个触发 AWS Lambda 函数的 Termination Lifecycle Hook。这反过来会调用即将终止的实例上的程序,该程序执行必要的任务。 这本身就可以正常工作。
问题
以下时间点之间似乎有很长的时间滞后:
- 实例被标记为终止,ALB 停止向其转发请求。
- Lambda 函数被调用。
这两点之间似乎需要几分钟。
我需要尽可能缩短这个时间延迟。 (我的原因很复杂,可能不相关,但如果被要求我会详细说明)。理想情况下,它会立即生效。
但是我没有找到可以缩短的设置。有一个名为“心跳超时”的设置,最小值为 30 秒。然而,调用 Lambda 函数所需的时间比这要长得多。所以心跳超时似乎不是瓶颈。
有谁知道导致这种长时间滞后的原因,以及我可以做些什么来缩短它?
【问题讨论】:
-
“扩展冷却时间可帮助您防止 Auto Scaling 组在先前活动的影响可见之前启动或终止其他实例。”我认为您需要减少自动缩放的冷却时间,默认为 300 秒,以降低值。 docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html
-
我在 ASG 高级配置下的“默认冷却时间”只有 15 秒。这不考虑这么长时间的滞后。
标签: amazon-web-services amazon-ec2 aws-lambda aws-auto-scaling