Amazon EC2 为什么会终止我的 Spot 实例?

上次更新时间:2021 年 9 月 17 日

我在转发 Amazon CloudFront 分配的源标头时收到错误“No 'Access-Control-Allow-Origin' header is present on the requested resource”(请求的资源中无“Access-Control-Allow-Origin”标头)。Amazon EC2 为什么会终止我的 Spot 实例?

解决方法

如果出现以下原因,Amazon EC2 可能会在两分钟内随时中断您的 Spot 实例:

  • Spot 容量不足:Amazon EC2 可能会其容量需要时中断您的 Spot 实例。大多数情况下,Amazon EC2 会回收您的实例以重新利用容量。Amazon EC2 还可能因主机维护或硬件停用等问题而终止您的 Spot 实例。
  • Amazon EC2 无法满足您的 Spot 实例请求约束条件:如果您的 Spot 请求包含约束条件(例如启动组或特定可用区组),则当不再能够满足该约束条件时,将会中止该组的 Spot 实例。
  • Spot 价格高于您设置的最高价格:当您请求 Spot 实例时,您可以选择指定实例的最高价格。默认情况下,此最高价格等于该实例类型的按需定价。当 Spot 价格上涨超过设定的最高价格时,您的 Spot 实例将被中断。如果您将中断行为设置为“stop”(停止)或“hibernate”(休眠),则当 Spot 价格降至低于您的最高价格时,您的 Spot 实例将会重新启动。设置较高的最高价格并不意味着 Spot 实例一定可用。有关更多信息,请参阅 Spot 实例工作原理

由于存在这些中断,最佳实践是将 Spot 实例用于无状态、容错且足够灵活以承受中断的工作负载。

注意:当 Amazon EC2 中断 Spot 实例时,默认情况下 Spot 实例将会终止。您可以将此默认行为更改为 hibernate(休眠)或 stop(停止),而不是终止实例。有关更多信息,请参阅中断行为

要确定 Amazon EC2 中断 Spot 实例的原因,请执行以下操作:

  1. 打开 Amazon EC2 控制台,然后选择 Spot Requests(Spot 请求)。
  2. 选择已终止的 Spot 实例的 Request ID(请求 ID)。
  3. 查看 Description(描述)部分下的 Status(状态)字段,以查看实例终止的原因代码。例如,如果 Amazon EC2 的 Spot 容量不足,则 Status(状态)字段将显示“instance-terminated-no-capacity”(容量不足,实例已终止)。有关原因代码的完整列表,请参阅 Spot 请求状态代码

您可以使用 Spot 实例中断通知来绕过潜在的中断问题。有关更多信息,请参阅 Taking advantage of Amazon EC2 Spot Instance interruption notices