通过AWS降低价格(EC2和现货实例)

时间:2017-06-13 14:39:45

标签: amazon-web-services amazon-ec2 scaling

我有一个作业队列并运行处理作业的AWS EC2实例。我们为现场和按需版本的每个c4。*实例类型都有一个AutoScaling组。

每个实例的功率都是一个等于CPU实例数的数字。 (例如c4.large的power = 2,因为它有2个CPU)。

我们所需的确切功率只需根据队列中的作业数量计算得出。

我想实现一种算法,该算法会定期检查队列中的作业数量,并通过AWS SDK更改特定AutoScaling组的所需值,以节省尽可能多的资金并保持实例的总功率已完成的工作。

特别是:

  1. 我更喜欢现场实例,因为它们更便宜
  2. EC2实例每小时收费,我们只想在1小时正常运行时间的最后一分钟关闭实例。
  3. 我们希望尽可能使用spot实例替换按需实例。因此,在55分钟增加spot-group,在58检查新的spot实例正在运行,如果是,则减少按需组。
  4. 如果出价过高,我们希望按需更换现货实例。只需关闭按需一个并打开现场一个。
  5. 似乎问题真的很难处理。有人有经验或类似的解决方案实施?

2 个答案:

答案 0 :(得分:1)

您当然可以编写自己的代码来有效地告诉Auto Scaling组何时添加/删除实例。

另外,请注意,使用竞价型实例降低成本的一个好策略是要了解现货实例的价格因而异:

  • 区域
  • 可用区
  • 实例类型

因此,如果c4.xlarge的现货价格在一个AZ中上涨,则在另一个AZ中可能仍然是相同的成本。此外,c4.2xlarge的价格可能低于c4.xlarge,价格是其两倍。

因此,您应该针对多个AZ和多个实例类型的多样性您的专色实例。这意味着现货价格的变化只会影响您车队的一小部分,而不是一次性影响。

您可以使用Spot Fleet来协助此{甚至是第三方产品,例如SpotInst

它还值得关注AWS Batch(目前并非在每个地区都可用),它旨在智能地为批处理作业提供容量。

答案 1 :(得分:0)

自动缩放组允许您使用在自动缩放组之外定义的警报和指标。

如果您正在使用SNS,您应该能够在SNS队列上设置警报并使用它来扩展和缩小您的缩放组。

如果您使用的是自定义队列系统,则可以将指标推送到cloudwatch以创建类似的警报。

您可以确定缩放操作发生的频率,但可能很难将运行时间缩短到一小时。