AWS AutoScaling 是不是有可能在计费时间界限之前从不终止实例?
Posted
技术标签:
【中文标题】AWS AutoScaling 是不是有可能在计费时间界限之前从不终止实例?【英文标题】:Is it possible with AWS AutoScaling to never terminate instances until a billable hour boundary?AWS AutoScaling 是否有可能在计费时间界限之前从不终止实例? 【发布时间】:2015-11-14 07:17:05 【问题描述】:由于 AWS 实例按小时计费,因此如果您有可能再次需要它,终止运行时间不足一小时的实例是没有意义的。
我想避免自动缩放的情况,即我添加一个实例,然后终止它,然后在同一小时内添加另一个实例。这将导致两个计费小时。
我编写了自己的自动缩放器,它会跳过终止运行时间少于 55 分钟的任何实例,并且对于快速变化的负载,这为我们节省了很多费用。只是想知道 AWS 本身是否有能力。
【问题讨论】:
据我所知它不支持。最接近的可能是将终止策略设置为 ClosestToNextInstanceHour。这样,如果您有两个实例,一个在下一小时前 5 分钟,另一个在 55 分钟前,前者会被杀死。参考:Customizing the Termination Policy 更多信息在这里shlomoswidler.com/2011/02/play-chicken-with-spot-instances.html 【参考方案1】:Auto Scaling 不能“等待”到一个小时结束才能终止实例。但是,有几个选项可供探索!
当触发指示 Auto Scaling 缩减(删除 Amazon EC2 实例)的扩展策略时,它首先选择具有最多实例的可用区,然后确定要在该可用区内终止哪个实例。这个选择是由Termination Policy 做出的,它的值可以是:
OldestInstance:Auto Scaling 终止组中最旧的实例。当您将 Auto Scaling 组中的实例升级到新的 EC2 实例类型并希望最终用较新的实例替换旧实例时,此选项很有用。 NewestInstance:Auto Scaling 终止组中的最新实例。当您测试新的启动配置但不想将其保留在生产环境中时,此策略很有用。 OldestLaunchConfiguration:Auto Scaling 终止具有最旧启动配置的实例。当您更新组并从以前的配置中逐步淘汰实例时,此策略很有用。 ClosestToNextInstanceHour:Auto Scaling 终止最接近下一个计费小时的实例。此政策可帮助您最大限度地利用实例并管理成本。
最后一个选项 ClosestToNextInstanceHour 几乎是您所寻求的,因为它将终止一个实例,该实例接下来将产生每小时收费。但是,它不会“等到”一小时结束。
一种选择是编写您自己的应用程序来确定何时缩减实例,等待实例提供其全部价值。然后应用程序可以调用TerminateInstanceInAutoScalingGroup
来删除和终止实例。
如果将实例用作“后端”(不直接处理 Web 请求),则另一种选择是使用 Auto Scaling Lifecycle Hook,它会在实例从 Auto Scaling 组中删除时发送信号,但在此之前它被终止。这通常用于让实例有机会“完成”工作,例如复制日志文件和完成任务。如果实例用于处理长时间运行的后台任务,则生命周期挂钩可用于等待工作完成或计费时间几乎结束,然后才允许终止实例。
然而,所有这些都需要一些自定义脚本。开箱即用的 Auto Scaling 配置将响应扩展策略立即终止实例(除非Connection Draining 生效)。
【讨论】:
感谢您提供非常详细的回答。我还想知道如何制作自定义 Cloudwatch 指标来触发缩减。如果距下一个小时最近的实例时间超过 5-10 分钟,则该自定义指标可以查看时间并返回“无需缩减”。 Amazon CloudWatch 无法查看实例下次计费之前的剩余时间。您必须将该信息“推送”到 CloudWatch,这与您自己控制 Auto Scaling 相比没有任何好处。您始终可以在需要的时间执行扩展策略,告诉 Auto Scaling 缩减,但它无法控制 哪个 实例被终止。以上是关于AWS AutoScaling 是不是有可能在计费时间界限之前从不终止实例?的主要内容,如果未能解决你的问题,请参考以下文章
减少 (AWS::AutoScaling::AutoScalingGroup) 中的所需实例是不是会终止实例而不停止它
我们可以从 AWS 的 Auto Scaling 组停止 EC2 实例吗
AWS:同一个 Auto Scaling 组中是不是可以有多个资源?