Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Spot 实例请求

要使用 Spot 实例,您需要创建 Spot 实例请求,其中包括实例数量、实例类型、可用区以及您愿意为每小时实例使用时间支付的最高价格 (您的出价)。如果您的出价超过当前现货价格,则 Amazon EC2 将立即执行您的请求。否则,Amazon EC2 将等待直至可以执行您的请求,或者直至您取消请求。

以下演示了竞价请求的运行方式。请注意,为 Spot 实例中断采取的操作取决于请求类型 (一次性还是持久性) 和中断行为 (停止还是终止)。如果请求是持久性请求,则在 Spot 实例中断之后将重新打开请求。

 竞价生命周期

Spot 实例请求状态

Spot 实例请求可以处于以下某种状态:

  • open — 请求正在等待执行。

  • active — 请求已执行并有关联的 Spot 实例。

  • failed — 请求的一个或多个参数错误。

  • closed — Spot 实例被中断或终止。

  • cancelled - 您取消了请求,或者请求已过期。

以下显示了请求状态之间的转换。请注意,转换取决于请求类型 (一次性还是持久性)。

 竞价请求状态

一次性 Spot 实例请求在 Amazon EC2 启动 Spot 实例、请求过期前或者您取消请求前保持有效。如果现货价格上涨超过您的出价,您的 Spot 实例会终止, Spot 实例请求关闭。

持久性 Spot 实例请求在过期或您取消它之前保持有效,即使该请求之前已完成。例如,如果您在现货价格为 0.25 美元时为一个实例创建持久性 Spot 实例请求,则当您的出价超过 0.25 美元时,Amazon EC2 将启动您的 Spot 实例。如果现货价格上涨超过您的出价,则您的 Spot 实例将中断 (停止或终止);但是,当现货价格下跌低于您的出价时, Spot 实例将启动 (如果已停止) 或 Spot 实例请求将重新打开,并且 Amazon EC2 将启动新的 Spot 实例 (如果已终止)。

您可以通过出价状态跟踪您的 Spot 实例请求状态以及启动的 Spot 实例状态。有关更多信息,请参阅 竞价出价状态

指定 Spot 实例的持续时间

当现货价格发生更改时,Amazon EC2 不会终止带有指定持续时间的 Spot 实例 (也称为 Spot 限制)。这使得此实例非常适合需在有限时间内完成的任务,如批处理、编码和渲染、建模和分析以及连续集成。

您可将持续时间指定为 1、2、3、4、5 或 6 小时。您支付的价格取决于指定的持续时间。要查看 1 小时持续时间或 6 小时持续时间的当前价格,请参阅 Spot 实例价格。您可使用这些价格来估计 2、3、4 和 5 小时持续时间的费用。在完成带持续时间的请求时,您的 Spot 实例的价格是固定的,而且此价格在实例终止前保持有效。您需要按照此价格为实例运行的每个小时或不足一小时支付费用。未满 1 小时的实例小时,将按 1 小时计费。

在您的竞价请求中指定持续时间时,每个 Spot 实例的持续时间段将在该实例收到其实例 ID 后立即开始。 Spot 实例将运行,直到您终止它或其持续时间段结束。在持续时间段结束后,Amazon EC2 将 Spot 实例标记为终止并提供一个 Spot 实例终止通知,这将在实例终止前为其提供两分钟时间的警告。

使用控制台启动具有指定持续时间的 Spot 实例

选择合适的请求类型。有关更多信息,请参阅 创建 Spot 实例请求

使用 AWS CLI 启动具有指定持续时间的 Spot 实例

要为您的 Spot 实例指定持续时间,请将 --block-duration-minutes 选项与 request-spot-instances 命令包含在一起。例如,以下命令可创建一个竞价请求,启动运行时间为两小时的 Spot 实例:

Copy
aws ec2 request-spot-instances --spot-price "0.050" --instance-count 5 --block-duration-minutes 120 --type "one-time" --launch-specification file://specification.json

使用 AWS CLI 检索具有指定持续时间的 Spot 实例的费用

使用 describe-spot-instance-requests 命令可检索具有指定持续时间的 Spot 实例的固定费用。该信息位于 actualBlockHourlyPrice 字段中。

指定 Spot 实例租赁

您可以在单租户硬件上运行 Spot 实例。专用 Spot 实例与属于其他 AWS 账户的实例物理隔离。有关更多信息,请参阅专用实例Amazon EC2 专用实例产品页面。

要运行专用 Spot 实例,请执行以下操作之一:

  • 在创建 Spot 实例请求时,指定租赁 dedicated。有关更多信息,请参阅 创建 Spot 实例请求

  • 请求 VPC 中实例租赁为 dedicated 的 Spot 实例。有关更多信息,请参阅 创建有专用实例租期的 VPC。如果您在 VPC 中请求实例租赁为 dedicated 的 Spot 实例,则无法请求租赁为 default 的 Spot 实例。

以下实例类型支持专用 Spot 实例。

最新一代

  • c3.8xlarge

  • c4.8xlarge

  • c5.18xlarge

  • d2.8xlarge

  • g2.8xlarge

  • i2.8xlarge

  • i3.16xlarge

  • m4.10xlarge

  • m4.16xlarge

  • p2.16xlarge

  • r3.8xlarge

  • r4.16xlarge

  • x1.32xlarge

上一代

  • cc2.8xlarge

  • cg1.4xlarge

  • cr1.8xlarge

Spot 实例请求的服务相关角色

当您请求 Spot 实例时,Amazon EC2 将创建一个服务相关角色。服务相关角色包含 Amazon EC2 代表您调用其他 AWS 服务所需的一切权限。有关更多信息,请参阅 IAM 用户指南 中的使用服务相关角色

Amazon EC2 使用名为 AWSServiceRoleForEC2Spot 的服务相关角色完成以下操作:

  • ec2:DescribeInstances - 描述 Spot 实例

  • ec2:StopInstances - 停止 Spot 实例

  • ec2:StartInstances - 启动 Spot 实例

如果您为 Spot 实例指定了加密 EBS 快照,并使用自定义 KMS 密钥来进行加密,则必须为 AWSServiceRoleForEC2Spot 角色授予对这些 KMS 密钥的访问权限,以便让 Amazon EC2 代表您启动 Spot 实例。委托人是 AWSServiceRoleForEC2Spot 角色的 Amazon 资源名称 (ARN)。有关更多信息,请参阅在 AWS KMS 中使用密钥策略

如果您在 2017 年 10 月前有一个活动的 Spot 实例请求,当 Amazon EC2 开始支持此服务相关角色时,Amazon EC2 在您的 AWS 账户中创建了 AWSServiceRoleForEC2Spot 角色。有关更多信息,请参阅 IAM 用户指南 中的我的账户中出现新角色

如果您不再需要使用 Spot 实例,我们建议您删除 AWSServiceRoleForEC2Spot 角色。当此角色从您的账户中删除后,如果您请求 Spot 实例,Amazon EC2 将再次创建此角色。

创建 Spot 实例请求

请求 Spot 实例的过程与启动按需实例的过程相似。提交请求之后,您无法更改竞价请求的参数,包括出价。

如果您一次请求了多个 Spot 实例,Amazon EC2 将创建单独的 Spot 实例请求,这样您可以分别跟踪各个请求的状态。有关跟踪竞价请求的更多信息,请参阅竞价出价状态

先决条件

在开始之前,请确定您的出价、需要多少个 Spot 实例以及要使用的实例类型。要查看现货价格趋势,请参阅 Spot 实例定价历史记录

使用控制台创建 Spot 实例请求

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,请选择 Spot Requests

  3. 如果您是首次接触 Spot 实例,则会看到一个欢迎页面;请选择 Get started。否则,请选择 Request Spot Instances

  4. Find instance types 页面中,执行以下操作:

    1. 对于 Request type,默认值为 Request,它指定使用 Spot 队列创建的一次性竞价请求。要改为使用 Spot 限制,请选择 Reserve for duration

      如果您更喜欢使用 Request and Maintain,请参阅创建 Spot 队列请求

    2. 对于 Target capacity,输入要请求的单位数量。您可以选择实例或是对应用程序工作负载十分重要的性能特征 (如 vCPU、内存和存储)。

    3. [ Spot 限制] 对于 Reserved duration,选择完成工作所需的小时数。

    4. 对于 AMI,选择 AWS 提供的一个基本 Amazon 系统映像 (AMI),或选择 Use custom AMI 以指定您自己的 AMI。

    5. 对于 Instance type(s),选择 Select。选择具有您所需最低硬件规格的实例类型 (虚拟 CPU、内存和存储)。

    6. [ Spot 队列] 对于 Allocation strategy,请选择满足您需求的策略。有关更多信息,请参阅 Spot 队列分配策略

    7. 对于 Network,您的账户可能支持 EC2-Classic 和 EC2-VPC 平台,或者仅支持 EC2-VPC 平台。要查明您的账户支持的平台,请参阅 支持的平台

      [现有 VPC] 选择 VPC。

      [新 VPC] 选择 Create new VPC 以前往 Amazon VPC 控制台。完成之后,请返回向导并刷新列表。

      [EC2-Classic] 选择 EC2-Classic

    8. (可选) 对于 Availability Zones,默认为由 AWS 为您的 Spot 实例选择可用区。如果希望,您可以指定特定可用区。

      [EC2-VPC] 选择一个或多个可用区。如果您在一个可用区中有多个子网,则请从 Subnet 中选择合适的子网。要添加子网,请选择 Create new subnet 以前往 Amazon VPC 控制台。完成之后,请返回向导并刷新列表。

      [EC2-Classic] 选择 Select specific zone/subnet,然后选择一个或多个可用区。

    9. [ Spot 队列] 对于 Maximum price,您可以使用自动出价,也可以指定一个出价。如果您的出价低于所选实例类型的现货价格,则您的 Spot 实例不会启动。

    10. 选择 Next

  5. Configure (配置实例详细信息) 页面中,执行以下操作:

    1. (可选) 要添加存储,请根据实例类型指定实例存储卷或 EBS 卷。您还可以启用 EBS 优化。

    2. (可选) 默认情况下,已为您的实例启用基本监控。要启用详细监控,请选择 Enable CloudWatch detailed monitoring

    3. (可选) 要运行专用 Spot 实例,对于 Tenancy,请选择 Dedicated - run a dedicated instance

    4. (可选) 要运行启动脚本,请将其复制到 User data

    5. [ Spot 队列] 要添加标签,请选择 Add new tag,然后键入该标签的键和值。对每个标签重复此操作。

    6. (可选) 要连接到您的实例,请使用 Key pair name 指定您的密钥对。

    7. (可选) 要启动具有 IAM 角色的 Spot 实例,请使用 IAM instance profile 指定实例。

    8. 对于 Security groups,选择一个或多个安全组。

    9. [EC2-VPC] 要连接到 VPC 中您的实例,请启用 Auto-assign IPv4 Public IP

    10. (可选) 要创建仅在特定时段内有效的请求,请编辑 Request valid fromRequest valid to

    11. [ Spot 队列] 默认情况下,我们会在请求过期时终止您的 Spot 实例。要维持实例在请求过期之后继续运行,请清除 Terminate instances at expiration

    12. 选择 Review

  6. Review 页面上,确认启动配置。要进行更改,请选择 Previous。要下载启动配置的副本以便与 AWS CLI 结合使用,请选择 JSON config。如果准备就绪,请选择 Launch

  7. 在确认页面上,请选择 OK

    [ Spot 队列] 请求类型为 fleet。执行请求后,系统会添加请求类型 instance,此时其状态为 activefulfilled

    [ Spot 限制] 请求类型为 block,且初始状态为 open。执行请求后,状态为 activefulfilled

使用 AWS CLI 创建 Spot 实例请求

使用以下 request-spot-instances 命令可创建一次性请求:

Copy
aws ec2 request-spot-instances --spot-price "0.05" --instance-count 5 --type "one-time" --launch-specification file://specification.json

使用以下 request-spot-instances 命令可创建持久性请求:

Copy
aws ec2 request-spot-instances --spot-price "0.05" --instance-count 5 --type "persistent" --launch-specification file://specification.json

有关要用于这些命令的启动规范文件的示例,请参阅竞价请求示例启动说明。如果您从控制台下载启动说明文件,必须改为使用 request-spot-fleet 命令 (控制台使用 Spot 队列指定竞价请求)。

当现货价格低于您的出价时,Amazon EC2 将启动您的 Spot 实例。 Spot 实例将一直运行到中断或您自行终止它。使用以下 describe-spot-instance-requests 命令可监控您的 Spot 实例请求:

Copy
aws ec2 describe-spot-instance-requests --spot-instance-request-ids sir-08b93456

查找正在运行的 Spot 实例

当现货价格低于您的出价时,Amazon EC2 将启动 Spot 实例。 Spot 实例将一直运行至其出价不再高于现货价格或您自行终止它。如果您的出价与现货价格完全一致,那么根据需求情况,您的 Spot 实例有机会保持运行。

使用控制台查找正在运行的 Spot 实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,请选择 Spot Requests

    您可以看到 Spot 实例请求和 Spot 队列请求。如果 Spot 实例请求已执行,那么 Capacity 就是 Spot 实例的 ID。对于 Spot 队列,Capacity 表示已执行的请求容量。要查看 Spot 队列中实例的 ID,请选择展开箭头,或者选择队列,然后选择 Instances 选项卡。

  3. 或者,在导航窗格中,选择 Instances。在右上角,选择 Show/Hide 图标,然后选择 Lifecycle。对于每个实例,Lifecyclenormalspotscheduled

使用 AWS CLI 查找正在运行的 Spot 实例

要枚举您的 Spot 实例,请结合使用 describe-spot-instance-requests 命令和 --query 选项,如下所示:

Copy
aws ec2 describe-spot-instance-requests --query SpotInstanceRequests[*].{ID:InstanceId}

下面是示例输出:

[
    {
        "ID": "i-1234567890abcdef0"
    },
    {
        "ID": "i-0598c7d356eba48d7"
    }
]

或者,您可结合使用 describe-instances 命令和 --filters 选项来枚举您的 Spot 实例,如下所示:

Copy
aws ec2 describe-instances --filters "Name=instance-lifecycle,Values=spot"

标记 Spot 实例请求

要对您的 Spot 实例请求进行分类和管理,您使用您选择的元数据为它们做标记。有关更多信息,请参阅 标记 Amazon EC2 资源

您可以在创建 Spot 实例请求之后为其分配标签。您为 Spot 实例请求创建的标签只适用于该请求。这些标签不会自动添加到竞价服务为完成请求所启动的 Spot 实例中。在 Spot 实例启动后,您必须自行将标签添加到 Spot 实例。

使用 AWS CLI 向您的 Spot 实例请求或 Spot 实例添加标签

使用以下 create-tags 命令标记您的资源:

Copy
aws ec2 create-tags --resources sir-08b93456 i-1234567890abcdef0 --tags Key=purpose,Value=test

取消 Spot 实例请求

如果您不再需要竞价请求,您可以将其取消。您只能取消 openactive 的 Spot 实例请求。当您的请求未执行,且实例没有启动时,您的竞价请求处于 open 状态。当您的请求完成,且 Spot 实例已启动时,您的竞价请求处于 active 状态。如果您的竞价请求 active 并且具有关联的运行中 Spot 实例,则取消此请求不会终止该实例;您必须手动终止该运行的 Spot 实例。

如果竞价请求是持久性竞价请求,则会返回 open 状态,这样就可以启动新的 Spot 实例。要取消持久性竞价请求并终止其 Spot 实例,您必须先取消竞价请求,然后终止 Spot 实例。否则,竞价请求可以启动新实例。

使用控制台取消 Spot 实例请求

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,请选择 Spot Requests,然后选择竞价请求。

  3. 选择 Actions,然后选择 Cancel spot request

  4. (可选) 如果您使用完关联的 Spot 实例,则可以终止这些实例。在导航窗格中,请选择 Instances 并选择实例,然后依次选择 ActionsInstance StateTerminate

使用 AWS CLI 取消 Spot 实例请求

使用以下 cancel-spot-instance-requests 命令可取消指定的竞价请求:

Copy
aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-08b93456

如果您已完成关联的 Spot 实例,则可使用以下 terminate-instances 命令手动终止这些实例:

Copy
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 i-0598c7d356eba48d7