Spot 实例支持 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Spot 实例支持

要利用 Amazon EC2 Spot 实例,您可以为您的环境启用 Spot 选项。然后,您环境的 Auto Scaling 组会将 Amazon EC2 购买选项组合在一起,并将按需实例和 Spot 实例组合在一起。

注意

EnableSpot 选项设置可能导致 Elastic Beanstalk 使用启动模板创建环境或将现有环境从启动配置更新为启动模板。有关更多信息,请参阅 启动模板

以下本主题将介绍为您的环境启用 Spot 实例请求的方法:

重要

对 Spot 实例的需求在不同时间可能有显著的差异,Spot 实例的可用性也会因为未使用 Amazon EC2 实例的可用数量而差别巨大。Spot 实例可能会中断。

为了有助于最大限度地减少这些中断对应用程序的影响,您可以启用 Amazon EC2 Auto Scaling 随附的“容量再平衡”选项。启用此功能后,EC2 会在中断前自动尝试替换 Auto Scaling 组中的 Spot 实例。要启用此功能,请使用 Elastic Beanstalk 控制台以配置 Auto Scaling 组。或者,您可以在 aws:autoscaling:asg 命名空间中将 Elastic Beanstalk EnableCapacityRebalancing 配置选项设置为 true

有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的 Capacity Rebalancing 和《Amazon EC2 用户指南》中的竞价型实例中断

Elastic Beanstalk 提供了多个配置选项来支持 Spot 功能。这些内容将在以下与配置 Auto Scaling 组相关的章节中讨论。

aws:ec2:instances 命名空间中,这些选项里有两个值得特别注意:

  • SpotFleetOnDemandBase

  • SpotFleetOnDemandAboveBasePercentage

这两个选项与 aws:autoscaling:asg 命名空间中的 MinSize 选项相关联。

  • 只有 MinSize 决定了您环境的初始容量,即您希望运行的最低实例数。

  • SpotFleetOnDemandBase 不会影响初始容量。启用 Spot 时,此选项仅确定在考虑任何 Spot 实例前预置的按需实例数。

  • 考虑何时 SpotFleetOnDemandBase 小于 MinSize。您仍然会得到完全的 MinSize 实例作为初始容量。至少这些实例中的 SpotFleetOnDemandBase 必须是按需实例。

  • 考虑何时 SpotFleetOnDemandBase 大于 MinSize。随着环境的扩展,将保证您至少可获得等于两个值之间的差值的额外实例数。换句话说,可以保证您在满足 SpotFleetOnDemandBase 要求之前至少获得额外的按需 (SpotFleetOnDemandBase - MinSize) 实例。

在生产环境中,将 Spot 实例作为可扩展、负载均衡的环境的一部分尤其有用。我们建议不要在单实例环境中使用 Spot。如果 Spot 实例不可用,您可能会丢失环境的所有容量(单实例)。您仍可以在单实例环境中使用 Spot 实例进行开发或测试。此种情况下,请务必将 SpotFleetOnDemandBaseSpotFleetOnDemandAboveBasePercentage 均设置为零。任何其他设置都会导致使用按需实例。

注意
  • 某些较旧的AWS账户可能会向 Elastic Beanstalk 提供不支持 Spot 实例的默认实例类型(例如,t1.micro)。如果启用 Spot 实例请求,并且显示 None of the instance types you specified supports Spot (您指定的所有实例类型均不支持 Spot) 错误,请务必配置支持 Spot 的实例类型。要选择 Spot 实例类型,请使用 Spot Instance Advisor

  • 启用 Spot 实例请求需要使用 Amazon EC2 启动模板。在创建或更新环境过程中配置此功能时,Elastic Beanstalk 尝试将环境配置为使用 Amazon EC2 启动模板(如果环境尚未使用启动模板)。在这种情况下,如果您的用户策略缺乏必要的权限,则创建或更新环境可能会失败。因此,我们建议您使用托管用户策略,或者将所需的权限添加到自定义策略中。有关所需权限的详细信息,请参阅创建自定义用户策略

以下示例演示了设置各种调整选项的不同方案。所有示例都采用已启用 Spot 实例请求的负载均衡环境。

例 1:初始容量包含按需实例和 Spot 实例
选项设置
选项 命名空间

MinSize

aws:autoscaling:asg

10

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

在此示例中,环境的初始实例数是十个,其中七个是按需实例(四个基本实例,以及基本实例以外的六个实例的 50%),三个是 Spot 实例。该环境最多可扩展到 24 个实例。扩展时,队列中四个基本按需实例以外的按需实例比例保持为 50%,该队列整体最多可包含 24 个实例,其中 14 个是按需实例(4 个基本实例,以及基本实例以外的 20 个实例的 50%),10 个是 Spot 实例。

例 2:所有按需初始容量
选项设置
选项 命名空间

MinSize

aws:autoscaling:asg

4

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

在此示例中,环境的初始实例数是四个,所有这些实例都是按需实例。该环境最多可扩展到 24 个实例。扩展时,队列中四个基本按需实例以外的按需实例比例保持为 50%,该队列整体最多可包含 24 个实例,其中 14 个是按需实例(4 个基本实例,以及基本实例以外的 20 个实例的 50%),10 个是 Spot 实例。

例 3:初始容量以外的额外按需基本实例
选项设置
选项 命名空间

MinSize

aws:autoscaling:asg

3

MaxSize

aws:autoscaling:asg

24

SpotFleetOnDemandBase

aws:ec2:instances

4

SpotFleetOnDemandAboveBasePercentage

aws:ec2:instances

50

在此示例中,环境的初始实例数是三个,所有这些实例都是按需实例。该环境最多可扩展到 24 个实例。除开三个初始实例以外添加的第一个实例是按需实例,用于凑齐四个基本按需实例。随着进一步扩展,队列中四个基本按需实例以外的按需实例比例保持为 50%,该队列整体最多可包含 24 个实例,其中 14 个是按需实例(4 个基本实例,以及基本实例以外的 20 个实例的 50%),10 个是 Spot 实例。