我一直在考虑詹金斯(Jenkins)的工作,以检查我们所启动的代理箱的价格;价格每隔一段时间就会飙升,一两个小时后,任何人就会注意到没有新的代理商来,然后我们必须手动进入并检查现货价格并进行相应调整,或​​者切换区域等。

我的第一个直觉是,最好的方法是让Jenkins每小时执行一次工作,运行aws ec2 describe-spot-instance-requests并检查失败的请求(然后让我们放松)。但是我想知道是否有一种更干净的方法,它涉及实际比较硬价格(因此可以告诉我们确切的情况,减少多少),而不是查看成功/失败的请求。

有人设置类似的东西吗?你怎么样

评论

我想这是一个合理的问题...但是,为什么您不只是竞标实例对您真正有价值,而是选择多个实例类型(包括比您需要的实例大的实例,当较小的实例现货价格上涨时,这些实例有时会便宜些...)偶尔-包括现在就在我撰写本文时-我发现自己使用的是cc2.8xlarge,因为它目前比我需要的c3.2xlarge便宜,尽管它的内核数是4倍,内存是4倍,并且让系统处理实例市场选择类型选择和可用区放置?

@ Michael-sqlbot我在过程的那部分没有说;我们有文档说明,我们出于审计目的购买了一定大小的实例,因此这就是我们所坚持的。只是想充分利用一个不理想的情况。

很公平,@ Alex。只是以为我会把它扔进去,以防万一您没有考虑到它。

@Alex出于兴趣,实例大小是否一定,因此可以轻松在账单上看到?因为您(而是他们!)可以使用标签,然后在Cost Explorer中查看它们。

#1 楼

发现了一个名为autospotting的开源工具,该工具可能会对此有所帮助:


在现有的按需AutoScaling组上启用后,它将启动更便宜的EC2 Spot实例,至少大型且配置与您当前的按需实例相同。新实例就绪后,将其添加到组中,然后将按需实例从组中分离并终止。


我们将其放入待办事项管道中,一旦完成,便可以添加更多上下文。

更新:

最近在会议上演示的另一个工具是mapbox / spotswap

这有点不同。它使用按需实例或预留实例监视正常的ASG,然后,如果规模扩大,则出价和准备金将在单独的ASG上发现具有相似计算级别的实例。

评论


欢迎来到该网站,Hashfyre :)

– Dawny33♦
17年4月17日在16:52

我是AutoSpotting的作者,感谢您提及它!您尝试过了吗?我很想听听用户的反馈意见。

– Cristian Măgherușan-Stanciu
17-10-15在22:10



#2 楼

我个人会考虑这样的模型:

Timed Lambdas -> Checks spot price -> Push to ElastiCache


然后当您需要实例时:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price


您也可以在lambda内设置一些公差(例如,根据重要性增加10%,25%,50%)和按需设置硬上限。这也是构建逻辑处理的好地方,例如,找到最便宜的可用区,找到相对最便宜的现货价格(2xt2.mediumt2.large)等。

评论


仅作为参考,您可以编辑已删除的答案并标记为要求删除。 (没有伤害,只是提供信息:))

–滕西拜
17年4月19日在16:16

我会sha愧不屈,让我想起我永远被误导的日子。

–亨利
17年4月19日在16:42

Rofl,真的没有羞耻,请放心:)

–滕西拜
17年4月19日在19:02

我的疤痕定义

–亨利
17年4月19日在19:04

很棒的主意-也许值得一提的是,如果他们还没有ElastiCache集群,可以将价格推到DynamoDB表上。或者甚至是S3存储桶中的JSON文件。

–蒂姆·马隆(Tim Malone)
18年6月17日在3:35

#3 楼

让我给您提供一种与工具无关的方法来尝试执行此操作。


价格经常上涨,一两个小时后,任何人都会注意到没有新的代理商出现,然后我们必须手动检查现货价格并进行相应调整,或​​切换区域等。


我们在构建的基础架构中也遇到了同样的问题。因此,我们使用if-else样式块来设置出价,具体取决于实例的按需价格。

AWS具有用于获取实例的按需价格的API。为此,我们使用了此Python包装器。

因此,一旦获得按需价格(假设为X),我们便插入了if-else样式块,分别是0.4*X0.6*X0.8*XX,这意味着我们正在尝试将竞价的价格范围设为按需价格的40%,60%,80%。如果所有方法都失败了,那么我们将退回到创建按需实例。

此外,由于这独立于AWS当前的现货定价,因此我们绝不会支付高于按需价格的价格。

但是,如果您正在寻找一种快速实现此目标的方法,那么Hashfyre的解决方案应该是可行的方法。