我已经使用 AWS 几十年了,出于各种原因(包括专业原因,例如测试我开发的软件等),我开始使用 Spot 实例。我主要使用使用 RDP 连接到的 Windows Server 2022 实例。
我自己构建了一组脚本,以便在需要时根据快照生成新实例,并在不需要时自动将它们保存回快照中。
在过去一年左右的时间里,一切进展顺利。我遇到过一些实例,它们会突然关闭,我一直认为这是因为服务器需要更多资源来为愿意支付更多费用或使用按需实例的用户提供资源。
在过去的两个月里,我经历了几次关闭,有时是连续的。有时这种情况会在短时间内发生多次,然后几周后根本不会发生。
我尝试将现货请求的价格提高到尽可能高,只是出于测试目的,但一段时间后它仍然会下降。如果我查看定价历史记录,一切都很低,并且我看到一条非常稳定且平坦的线,表明价格没有波动。每次我更详细地研究它时,我都会看到:
- EC2 中实例的详细信息:我会看到
State transition reason / User initiated
- EC2 中现货请求的详细信息:我会看到
Status failed, bad-parameters
- 但在Cloudtrail中我看到的却是一个不同的故事。在日志中我会看到:
// most of this is redacted but here are some relevant parts:
"invokedBy": "spot.amazonaws.com",
"eventType": "AwsApiCall",
"managementEvent": true,
"eventCategory": "Management"
所以Cloudtrail基本上告诉我它不是用户发起的,这告诉我问题不在于我的实例。因为一开始我想,也许我的 Windows Server 实例只是崩溃了,这就是为什么它显示“用户启动”但没有。
这非常烦人,是的,我想解决方案是使用按需实例,但我在 AWS 上花了很多钱,并且希望继续使用现货实例。
有人有过类似的经历吗?任何人都可以帮助进一步调试这个问题吗?
谢谢!
“优雅地处理 Spot 实例中断的最佳方法是将您的应用程序设计为具有容错能力。为此,您可以利用 Spot 实例中断通知。我们建议您每 5 秒检查一次这些中断通知。
“中断通知作为 EventBridge 事件和 Spot 实例上的实例元数据中的项目提供。中断通知是在尽力而为的基础上发出的。 ”
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-instance-termination-notices.html#ec2-spot-instance-interruption-warning-event
https://aws.amazon.com/blogs/compute/take-advantage-of-amazon-ec2-spot-instance-interruption-notices/
AWS 可以随时关闭 Spot 实例,恕不另行通知。如果有人想要按需实例,但没有可用容量的现货实例,无论出价如何,都会被关闭。
如果您无法应对实例被关闭的情况,请使用按需实例。