我的第一个直觉是,最好的方法是让Jenkins每小时执行一次工作,运行
aws ec2 describe-spot-instance-requests
并检查失败的请求(然后让我们放松)。但是我想知道是否有一种更干净的方法,它涉及实际比较硬价格(因此可以告诉我们确切的情况,减少多少),而不是查看成功/失败的请求。 有人设置类似的东西吗?你怎么样
#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.medium
与t2.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*X
,0.6*X
,0.8*X
,X
,这意味着我们正在尝试将竞价的价格范围设为按需价格的40%,60%,80%。如果所有方法都失败了,那么我们将退回到创建按需实例。此外,由于这独立于AWS当前的现货定价,因此我们绝不会支付高于按需价格的价格。
但是,如果您正在寻找一种快速实现此目标的方法,那么Hashfyre的解决方案应该是可行的方法。
评论
我想这是一个合理的问题...但是,为什么您不只是竞标实例对您真正有价值,而是选择多个实例类型(包括比您需要的实例大的实例,当较小的实例现货价格上涨时,这些实例有时会便宜些...)偶尔-包括现在就在我撰写本文时-我发现自己使用的是cc2.8xlarge,因为它目前比我需要的c3.2xlarge便宜,尽管它的内核数是4倍,内存是4倍,并且让系统处理实例市场选择类型选择和可用区放置?@ Michael-sqlbot我在过程的那部分没有说;我们有文档说明,我们出于审计目的购买了一定大小的实例,因此这就是我们所坚持的。只是想充分利用一个不理想的情况。
很公平,@ Alex。只是以为我会把它扔进去,以防万一您没有考虑到它。
@Alex出于兴趣,实例大小是否一定,因此可以轻松在账单上看到?因为您(而是他们!)可以使用标签,然后在Cost Explorer中查看它们。