我希望通过让自动扩展 EC2 组启动现货实例而不是按需实例来优化其成本。
我真正想要的是能够将组中的某些服务器保留为按需实例,无论现货实例定价市场如何变化。然后,我希望组中任何超出我配置的最低限度的额外服务器都是现货实例。我通常可以接受通过现货请求添加服务器的延迟。
我似乎找不到任何方法来做到这一点,我尝试搜索 AWS 文档。看来 ASG 可以是按需的,也可以是现货的,但不能是混合的。
我可以手动将按需实例添加到分配给自动扩展组的弹性负载均衡器,但该服务器的负载将不会被计入自动扩展测量和触发器中。
我想我可以输入一个非常高的出价,以确保我总能得到我需要的服务器,但是当我查看定价历史记录时,发现偶尔会出现大幅上涨。
AWS 文档自相矛盾,因为在某个地方它说如果你输入服务器最小数量,那么这个数字“保证”存在。但是当你阅读有关现货实例的内容时,却没有任何保证。现货的价格差异很有吸引力,所以我想尽可能地利用这一点,同时仍然保持始终在线的基线。这可能吗?
答案1
眼下您可以混合按需实例和现货实例跨单个 ASG
Amazon EC2 Auto Scaling 现在允许您在单个 Auto Scaling 组 (ASG) 中跨购买选项、可用区 (AZ) 和实例系列配置和自动扩展实例,以优化规模、性能和成本。现在,您可以在单个 ASG 中包含带有按需实例和预留实例的 Spot 实例,节省高达 90% 的计算成本。
答案2
上面讨论的方法有点混乱,而且不太灵活。更规范的方法是创建 2 个 ASG(一个用于现货,一个用于按需),然后注册它们两个都使用相同的 ELB(讨论这里)。这样,您就可以独立控制每个 ASG,而不必尝试在单个 ASG 中处理 LC 交换。
答案3
这杂交种 自动扩展不幸的是,这种方法似乎确实不能立即使用。
但是,您也许能够通过如下方式解决此限制(未经测试,只是我已经考虑了一段时间的系统设计):
潜在的解决方法
正如使用 Auto Scaling 启动 Spot 实例,现货价格投标是启动配置正在使用。正如你所指出的,没有杂交种启动配置可用,而是必须是按需或现场的,这意味着用例需要两种不同的启动配置。
这似乎并不能立即起到作用,因为每次只能将一个启动配置附加到 Auto Scaling 组,具有以下(部分过时的)约束(参见启动配置):
当您将新的或更新的启动配置附加到 Auto Scaling 组时,任何新实例都将使用新的配置参数启动。现有实例不受影响当 Auto Scaling 需要缩减规模时,它首先终止具有较旧启动配置的实例。[重点是我的]
但强调的部分是关键,前者涵盖了从各自的初始按需启动配置更改为附加现货启动配置后保持按需实例运行的要求,以及后者不再是这种情况由于最近推出的Auto Scaling 终止策略(这次没有像往常一样通过 AWS 博客文章进行宣传),记录在您的 Auto Scaling 组的实例终止策略:
Auto Scaling 在选择要终止的实例之前,会先确定比该组使用的其他可用区拥有更多实例的可用区。如果所有可用区的实例数相同,则会确定一个随机可用区。在确定的可用区域内,Auto Scaling 使用终止策略来选择要终止的实例。[重点是我的]
正如你的解雇政策如何运作,您现在可以指定最新实例,如果你想终止最后启动的实例,这是最近推出的竞价实例之一:
Auto Scaling 使用实例启动时间来识别最后启动的实例。
显然,这可能还不够,例如您可以将其中任何一项策略指定为独立策略,也可以在有序列表中列出多项策略,但这种方法应该确保所有实例的负载计入自动缩放测量和触发器;但仍有一点需要注意:
警告
如果负载均衡器因任何其他原因(例如,由于其本身变得不健康)终止其中一个按需实例,则不会自动将其替换为按需实例。因此,您需要单独监控和考虑此事件,例如,通过临时再次激活按需启动配置。
祝你好运!
答案4
如果您只想要 1 个具有静态数量按需实例的 ASG,则以下方法应该可行:
根据 Spot 实例启动配置创建 Auto Scaling 组。
暂停 ASG 上的 Auto Scaling
手动将按需实例(静态基本负载)添加到 ASG,并为这些实例启用实例保护。
在 ASG 上恢复自动扩缩
默认的自动扩展策略现在将忽略按需实例(出于保护目的),并终止与按需实例相同数量的现货实例,以达到组所需的数量。任何缩减或扩展活动都只会启动或终止现货实例。