由于AWS实例按小时计费,如果有可能再次需要,则终止已运行不到一小时的实例是没有意义的。
我想避免一种自动缩放的情况,我添加一个实例,然后终止它,然后在同一小时内添加另一个实例。这将导致两个计费小时。
我编写了自己的自动缩放器,它会跳过终止任何运行时间少于55分钟的实例,并且为了快速更改负载,这为我们节省了大量的费用。只是想知道AWS本身是否具备此功能。
答案 0 :(得分:7)
Auto Scaling无法“等待”,直到一小时结束才能终止实例。但是,有一些选择可以探索!
当触发扩展策略以指示Auto Scaling扩展(删除Amazon EC2实例)时,它首先选择具有最多实例的可用区,然后确定在该可用区内终止的实例。此选择由Termination Policy进行,其值可以为:
- OldestInstance :Auto Scaling终止组中最旧的实例。当您将Auto Scaling组中的实例升级到新的EC2实例类型,并希望最终用较新的实例替换具有较新实例的实例时,此选项很有用。
- 最新实例:Auto Scaling终止组中的最新实例。当您测试新的启动配置但不想将其保留在生产环境中时,此策略非常有用。
- OldestLaunchConfiguration :Auto Scaling终止具有最早启动配置的实例。当您更新组并逐步淘汰以前配置中的实例时,此策略非常有用。
- ClosestToNextInstanceHour :Auto Scaling终止最接近下一个结算小时的实例。此政策可帮助您最大限度地利用实例并管理成本。
最后一个选项 ClosestToNextInstanceHour ,几乎就是你要求的,因为它会终止一个下一次会导致每小时收费的实例。但是,它不会等到小时结束。
一种选择是编写自己的应用程序,确定何时扩展实例,等待实例提供其完整值。然后,应用程序可以调用TerminateInstanceInAutoScalingGroup
来删除并终止实例。
另一个选择,如果实例被用作“后端”(不直接处理Web请求),则使用Auto Scaling Lifecycle Hook,当从自动缩放组中删除实例时,该Connection Draining发送信号,但在终止之前。这通常用于为实例提供“完成”工作的机会,例如复制日志文件和完成任务。如果实例用于处理长时间运行的后台任务,则生命周期挂钩可用于等待工作完成或直到计费时间快结束,然后才允许实例终止。
但是,所有这些都需要一些自定义脚本。开箱即用的自动扩展配置将立即终止实例以响应扩展策略(除非{{3}}生效)。