Spot 实例 请求 - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Spot 实例 请求

要使用 Spot 实例,您需要创建 Spot 实例 请求,其中包括所需实例数量、实例类型、可用区以及您愿意为每实例小时支付的最高价。如果具有可用的容量,并且您的最高价超过当前 Spot 价格,Amazon EC2 将立即完成您的请求。否则,Amazon EC2 将等待直至可以完成您的请求,或者直至您取消请求。

以下演示了 Spot 请求的运行方式。请注意,请求类型(一次性或持久性)确定在 Amazon EC2 中断 Spot 实例时或者在您停止 Spot 实例时是否重新打开请求。如果请求是持久性请求,则在Spot 实例中断之后将重新打开请求。如果请求是持久性的,并且您停止了 Spot 实例,则请求仅在您启动 Spot 实例后打开。


				Spot 实例 请求的工作方式

Spot 实例请求状态

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

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

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

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

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

  • disabled – 您停止了 Spot 实例。

  • cancelled – 您取消了请求或请求已过期。

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


					Spot 实例 请求状态

一次性 Spot 实例 请求在 Amazon EC2 启动 Spot 实例、请求过期前或者您取消请求前保持有效。如果 Spot 价格超过您的最高价或容量不可用,将终止您的 Spot 实例 并关闭 Spot 实例 请求。

持久性Spot 实例请求在过期或您取消它之前保持有效,即使该请求已完成也如此。如果 Spot 价格超过您的最高价或没有可用的容量,您的Spot 实例将会中断。在您的实例中断后,在最高价超过 Spot 价格或再次具有可用的容量时,将会启动 Spot 实例(如果已停止)或将其恢复(如果已休眠)。您可以停止 Spot 实例,如果容量可用并且您的最高价格超过当前 Spot 价格,则重新启动实例。如果终止了 Spot 实例(无论 Spot 实例处于停止状态还是正在运行状态),则会重新打开 Spot 实例请求并且 Amazon EC2 启动一个新的 Spot 实例。有关更多信息,请参阅停止 Spot 实例启动 Spot 实例终止 Spot 实例

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

定义 Spot 实例的持续时间

具有定义的持续时间(也称为 Spot 型限制)的 Spot 实例不会中断并且会在您选择的持续时间内连续运行。这使得此实例非常适合需在有限时间内完成的任务,如批处理、编码和渲染、建模和分析以及连续集成。

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

在您的 Spot 请求中定义持续时间时,每个 Spot 实例的持续时间段将在该实例收到其实例 ID 后立即开始。Spot 实例将运行,直到您终止它或其持续时间段结束。在持续时间期间结束后,Amazon EC2 将 Spot 实例 标记为终止并提供一个 Spot 实例 终止通知,这将在实例终止前为其提供两分钟时间的警告。在极少数情况下,Spot 型限制会由于 Amazon EC2 的容量需求而中断。在这种情况下,我们将在终止实例前提供两分钟的警告,即使您使用了此已终止的实例,也无需为其支付费用。

新账户或之前没有 AWS 账单记录的账户不能使用具有指定持续时间的 Spot 实例(也称为 Spot 块)。

启动具有定义的持续时间的 Spot 实例(控制台)

按照创建 Spot 队列请求过程操作。要启动具有定义的持续时间的 Spot 实例,请为告诉我们您的应用程序或任务需要选择已定义的持续时间工作负载

启动具有定义的持续时间的 Spot 实例 (AWS CLI)

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

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

检索具有定义的持续时间的 Spot 实例的费用 (AWS CLI)

使用 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 实例。

最新一代

  • c4.8xlarge

  • d2.8xlarge

  • i3.16xlarge

  • m4.10xlarge

  • m4.16xlarge

  • p2.16xlarge

  • r4.16xlarge

  • x1.32xlarge

上一代

  • c3.8xlarge

  • cc2.8xlarge

  • cr1.8xlarge

  • g2.8xlarge

  • i2.8xlarge

  • r3.8xlarge

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

Amazon EC2 使用服务相关角色获取代表您调用其他 AWS 服务所需的权限。服务相关角色是一种独特类型的 IAM 角色,它与 AWS 服务直接相关。服务相关角色提供了一种将权限委托给 AWS 服务的安全方式,因为只有相关服务才能代入服务相关角色。有关更多信息,请参阅 IAM 用户指南 中的使用服务相关角色

Amazon EC2 使用名为 AWSServiceRoleForEC2Spot 的服务相关角色代表您启动和管理 Spot 实例。

AWSServiceRoleForEC2Spot 授予的权限

Amazon EC2 使用 AWSServiceRoleForEC2Spot 完成以下操作:

  • ec2:DescribeInstances – 描述 Spot 实例

  • ec2:StopInstances – 停止 Spot 实例

  • ec2:StartInstances – 启动 Spot 实例

创建服务相关角色

在大多数情况下,您无需手动创建服务相关角色。在首次使用控制台请求 Spot 实例时,Amazon EC2 创建 AWSServiceRoleForEC2Spot 服务相关角色。

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

在使用 AWS CLI 或 API 请求 Spot 实例之前,请确保该角色存在。要创建该角色,请如下使用 IAM 控制台。

手动创建 AWSServiceRoleForEC2Spot 服务相关角色

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Roles

  3. 选择创建角色

  4. Select type of trusted entity (选择受信任实体的类型) 页面上,依次选择 EC2EC2 - Spot Instances (EC2 - Spot 实例)Next: Permissions (下一步: 权限)

  5. 在下一页上,选择 Next:Review(下一步:审核)

  6. Review (审核) 页面上,选择 Create role (创建角色)

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

授予对用于加密的 AMI 和 EBS 快照的 CMK 的访问权限

如果为 Spot 实例指定加密的 AMI加密的 Amazon EBS 快照,并且您使用客户托管客户主密钥 (CMK) 进行加密,则必须为 AWSServiceRoleForEC2Spot 角色授予使用 CMK 的权限,以便 Amazon EC2 可以代表您启动 Spot 实例。为此,您必须在 CMK 中添加授权,如以下过程中所示。

在提供权限时,授权是密钥策略的替代方法。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的使用授权在 AWS KMS 中使用密钥策略

为 AWSServiceRoleForEC2Spot 角色授予使用 CMK 的权限

  • 使用 create-grant 命令在 CMK 中添加授权,并指定授予权限的委托人(AWSServiceRoleForEC2Spot 服务相关角色)以执行授权允许的操作。CMK 是由 key-id 参数和 CMK 的 ARN 指定的。委托人是由 grantee-principal 参数和 AWSServiceRoleForEC2Spot 服务相关角色的 ARN 指定的。

    aws kms create-grant \ --region us-east-1 \ --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Spot \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

创建 Spot 实例请求

请求 Spot 实例的过程与启动个按需实例的过程相似。您可以通过以下方式请求 Spot 实例:

在提交 Spot 实例请求后,您无法更改该请求的参数。这意味着您无法更改您愿意支付的最高价。

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

要启动包含 Spot 实例和按需实例的队列,请参阅创建 Spot 队列请求

注意

您无法使用启动实例向导或 run-instances 命令在同一调用中启动 Spot 实例和个按需实例。

先决条件

在开始之前,请确定最高价、所需的 Spot 实例数以及要使用的实例类型。要查看 Spot 价格趋势,请参阅 Spot 实例定价历史记录

创建 Spot 实例 请求(控制台)

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

  2. 在屏幕顶部的导航栏中,选择一个区域。

  3. 从 Amazon EC2 控制台控制面板中,选择 Launch Instance

  4. 选择一个 Amazon 系统映像 (AMI) 页上,选择一个 AMI。有关更多信息,请参阅步骤 1:选择 Amazon 系统映像 (AMI)

  5. 选择实例类型页上,选择要启动的实例的硬件配置和大小,然后选择下一步: 配置实例详细信息。有关更多信息,请参阅步骤 2:选择实例类型

  6. 配置实例详细信息页上,按如下方式配置 Spot 实例请求:

    • Number of instances (实例的数量):输入要启动的实例的数量。

      注意

      Amazon EC2 为每个 Spot 实例创建一个单独的请求。

    • (可选)为帮助确保保持正确数量的实例来处理应用程序,您可选择启动至 Auto Scaling 组以创建启动配置和 Auto Scaling 组。Auto Scaling 根据您的规范缩放该组中的实例数量。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南

    • 购买选项:选择请求 Spot 实例以启动 Spot 实例。选择此选项后,将显示以下字段。

    • 当前价格:为选定的实例类型显示每个可用区中的当前 Spot 价格。

    • (可选)最高价:您可以将此字段留空,也可以指定您愿意支付的最高金额。

      • 如果您将此字段留空,则最高价默认为当前按需价格。您的 Spot 实例按当前 Spot 价格启动,而不会超过按需价格。

      • 如果您指定的最高价高于当前 Spot 价格,则您的 Spot 实例将启动并按当前 Spot 价格计费。

      • 如果您指定的最高价低于 Spot 价格,则不会启动您的 Spot 实例。

    • 持久性请求:如果您的 Spot 实例已中断,请选择持久性请求以重新提交 Spot 实例请求。

    • 中断行为:默认情况下,在 Spot 实例中断后,Spot 服务会将它终止。如果选择持久性请求,则可以指定 Spot 服务在 Spot 实例中断后将它停止或休眠。有关更多信息,请参阅中断行为

    • (可选)请求有效截止时间:选择编辑可指定 Spot 实例请求的过期时间。

    有关配置 Spot 实例的更多信息,请参阅步骤 3:配置实例详细信息

  7. 您选择的 AMI 包含一个或多个存储卷,包括根设备卷。在添加存储页面上,您可以选择添加新卷来指定要附加到实例的其他卷。有关更多信息,请参阅步骤 4:添加存储

  8. Add Tags 页面上,通过提供键和值组合来指定标签。有关更多信息,请参阅步骤 5:添加标签

  9. Configure Security Group (配置安全组) 页面上,使用安全组为实例定义防火墙规则。这些规则指定哪些传入的网络流量可传输到您的实例。所有其他的流量将被忽略。(有关安全组的更多信息,请参阅 Windows 实例的 Amazon EC2 安全组。) 选择或创建安全组,然后选择审核和启动。有关更多信息,请参阅步骤 6:配置安全组

  10. Review Instance Launch 页面上,检查您的实例的详细信息,然后选择相应的 Edit 链接进行任何必要更改。如果准备就绪,请选择 Launch。有关更多信息,请参阅步骤 7:查看实例启动并选择密钥对

  11. Select an existing key pair or create a new key pair (选择现有密钥对或创建新密钥对) 对话框中,您可以选择现有密钥对,也可以创建新的密钥对。例如,选择选择现有密钥对,然后选择您在进行设置时创建的密钥对。有关更多信息,请参阅Amazon EC2 密钥对和 Windows 实例

    重要

    如果您选择 Proceed without key pair 选项,则将无法连接到此实例,除非您选择配置为允许用户以其他方式登录的 AMI。

  12. 要启动您的实例,请选中确认复选框,然后选择 Launch Instances

    如果实例无法启动或状态立即转至 terminated 而非 running,请参阅 排查实例启动问题

使用 request-spot-instances 创建 Spot 实例请求 (AWS CLI)

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

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

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

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

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

使用 run-instances 创建 Spot 实例请求 (AWS CLI)

使用 run-instances 命令并在 --instance-market-options 参数中指定 Spot 实例选项。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type t2.micro \ --count 5 \ --subnet-id subnet-08fc749671b2d077c \ --key-name MyKeyPair \ --security-group-ids sg-0b0384b66d7d692f9 \ --instance-market-options file://spot-options.json

以下是要在 JSON 文件中为 --instance-market-options 指定的数据结构。您还可以指定 BlockDurationMinutesValidUntilInstanceInterruptionBehavior。如果未在数据结构中指定字段,则将使用默认值。此示例创建一个 one-time 请求,并指定 0.02 作为您愿意为 Spot 实例支付的最高价。

{ "MarketType": "spot", "SpotOptions": { "MaxPrice": "0.02", "SpotInstanceType": "one-time" } }

查找正在运行的 Spot 实例

在最高价超过 Spot 价格并具有可用的容量时,Amazon EC2 会启动 Spot 实例。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 (实例)

    注意

    对于由 Spot 队列创建的 Spot 实例请求,不会立即为这些请求添加用于指示它们所属的 Spot 队列的系统标签,并且这些请求在一段时间内可能会独立于 Spot 队列请求显示。

    或者,在导航窗格中,选择 Instances。在右上角,选择设置图标 ( ),然后在属性列下选择实例生命周期。对于每个实例,实例生命周期normalspotscheduled

查找正在运行的 Spot 实例 (AWS CLI)

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

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

下面是示例输出:

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

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

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

要描述单个 Spot 实例实例,请使用带 --spot-instance-request-ids 选项的 describe-spot-instance-requests 命令。

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

标记 Spot 实例请求

要对您的 Spot 实例请求进行分类和管理,您可使用自定义元数据标记它们。您可以在创建 Spot 实例请求时或之后为其分配标签。您可以使用 Amazon EC2 控制台或命令行工具分配标签。

在标记 Spot 实例请求时,不会自动标记由 Spot 实例请求启动的实例和卷。您需要明确标记由 Spot 实例请求启动的实例和卷。您可以在启动期间或之后为 Spot 实例和卷分配标签。

有关标签的工作原理的更多信息,请参阅给您的 Amazon EC2 资源加标签

先决条件

授予 IAM 用户标记资源的权限。有关 IAM 策略和示例策略的更多信息,请参阅示例:标记资源

您创建的 IAM 策略由您用于创建 Spot 实例请求的方法决定。

在使用启动实例向导或 run-instances 时向 IAM 用户授予权限以标记资源

创建包含以下内容的 IAM 策略:

  • ec2:RunInstances 操作。这将授予 IAM 用户授予启动实例的权限。

  • 对于 Resource,请指定 spot-instances-request。这将允许用户创建 Spot 实例请求,后者将请求 Spot 实例。

  • ec2:CreateTags 操作。这将授予 IAM 用户创建标签的权限。

  • 对于 Resource,请指定 *。这将允许用户标记在实例启动期间创建的所有资源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLaunchInstances", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "TagSpotInstanceRequests", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }
注意

当您使用 RunInstances 操作创建 Spot 实例请求并在创建时标记 Spot 实例请求时,您需要了解 Amazon EC2 如何在 RunInstances 语句中评估 spot-instances-request 资源。

在 IAM 策略中评估 spot-instances-request 资源,如下所示:

  • 如果您在创建时未标记 Spot 实例请求,则 Amazon EC2 不会在 RunInstances 语句中评估 spot-instances-request 资源。

  • 如果您在创建时标记 Spot 实例请求,则 Amazon EC2 会在 RunInstances 语句中评估 spot-instances-request 资源。

因此,对于 spot-instances-request 资源,以下规则适用于 IAM 策略:

  • 如果您使用 RunInstances 创建 Spot 实例请求,并且您不打算在创建时标记 Spot 实例请求,则无需明确允许 spot-instances-request 资源;调用将成功。

  • 如果您使用 RunInstances 创建 Spot 实例请求并打算在创建时标记 Spot 实例请求,则必须在 RunInstances 允许语句中包含 spot-instances-request 资源,否则调用将失败。

  • 如果您使用 RunInstances 创建 Spot 实例请求并打算在创建时标记 Spot 实例请求,则必须指定 spot-instances-request 资源或在 CreateTags 允许语句中包含 * 通配符,否则调用将失败。

有关示例 IAM 策略(包括 Spot 实例请求不支持的策略),请参阅使用 Spot 实例

在使用 request-spot-instances 时向 IAM 用户授予权限以标记资源

创建包含以下内容的 IAM 策略:

  • ec2:RequestSpotInstances 操作。这将授予 IAM 用户创建 Spot 实例请求的权限。

  • ec2:CreateTags 操作。这将授予 IAM 用户创建标签的权限。

  • 对于 Resource,请指定 spot-instances-request。这将允许用户仅标记 Spot 实例请求。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagSpotInstanceRequest", "Effect": "Allow", "Action": [ "ec2:RequestSpotInstances", "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:spot-instances-request/*" }

标记新的 Spot 实例请求

使用控制台标记新的 Spot 实例请求

  1. 按照创建 Spot 实例请求过程操作。

  2. 要添加标签,请在添加标签页上,选择添加标签,然后输入标签的键和值。为每个附加标签选择添加其他标签

    对于每个标签,您可以使用同一标签来标记 Spot 实例请求、Spot 实例和卷。要标记所有这三个项,请确保已选定实例Spot 实例请求。要仅标记其中的一个或两个项,请确保已选定要标记的资源,并清除其他资源。

  3. 填写必填字段以创建 Spot 实例请求,然后选择启动。有关更多信息,请参阅创建 Spot 实例请求

使用 AWS CLI 标记新的 Spot 实例请求

要在创建 Spot 实例请求时标记该请求,请按以下方式配置 Spot 实例请求配置:

  • 使用 --tag-specification 参数指定 Spot 实例请求的标签。

  • 对于 ResourceType,请指定 spot-instances-request。如果指定其他值,则 Spot 实例请求将失败。

  • 对于 Tags,指定键值对。您可以指定多个键值对。

在以下示例中,使用两个标签来标记 Spot 实例请求:键=环境,值=生产;键=成本中心,值=123。

aws ec2 request-spot-instances \ --instance-count 5 \ --type "one-time" \ --launch-specification file://specification.json \ --tag-specification 'ResourceType=spot-instances-request,Tags=[{Key=Environment,Value=Production},{Key=Cost-Center,Value=123}]'

标记现有 Spot 实例请求

使用控制台标记现有 Spot 实例请求

创建 Spot 实例请求后,您可以使用控制台向 Spot 实例请求添加标签。

  1. https://console.amazonaws.cn/ec2spot 处打开 Spot 控制台。

  2. 选择您的 Spot 实例请求。

  3. 选择 Tags (标签) 选项卡,然后选择 Create Tag (创建标签)

使用控制台标记现有 Spot 实例

在 Spot 实例请求启动 Spot 实例后,您可以使用控制台向实例添加标签。有关更多信息,请参阅为单个资源添加和删除标签

使用 AWS CLI 标记现有 Spot 实例请求或 Spot 实例

使用 create-tags 命令标记现有的资源。在以下示例中,使用以下标签标记现有 Spot 实例请求和 Spot 实例:键=目的,值=测试。

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

查看 Spot 实例请求标签

使用控制台查看 Spot 实例请求标签

  1. https://console.amazonaws.cn/ec2spot 处打开 Spot 控制台。

  2. 选择您的 Spot 实例请求并选择标签选项卡。

描述 Spot 实例请求标签

使用 describe-tags 命令可查看指定资源的标签。在以下示例中,您将描述指定请求的标签。

aws ec2 describe-tags \ --filters "Name=resource-id,Values=sir-11112222-3333-4444-5555-66666EXAMPLE"
{ "Tags": [ { "Key": "Environment", "ResourceId": "sir-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-instances-request", "Value": "Production" }, { "Key": "Another key", "ResourceId": "sir-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-instances-request", "Value": "Another value" } ] }

您还可以通过描述 Spot 实例请求来查看 Spot 实例请求的标签。

使用 describe-spot-fleet-requests 命令可查看指定的 Spot 实例请求的配置,其中包括为请求指定的任何标签。

aws ec2 describe-spot-instance-requests \ --spot-instance-request-ids sir-11112222-3333-4444-5555-66666EXAMPLE
{ "SpotInstanceRequests": [ { "CreateTime": "2020-06-24T14:22:11+00:00", "InstanceId": "i-1234567890EXAMPLE", "LaunchSpecification": { "SecurityGroups": [ { "GroupName": "launch-wizard-6", "GroupId": "sg-1234567890EXAMPLE" } ], "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": true, "VolumeSize": 8, "VolumeType": "gp2" } } ], "ImageId": "ami-1234567890EXAMPLE", "InstanceType": "t2.micro", "KeyName": "my-key-pair", "NetworkInterfaces": [ { "DeleteOnTermination": true, "DeviceIndex": 0, "SubnetId": "subnet-11122233" } ], "Placement": { "AvailabilityZone": "eu-west-1c", "Tenancy": "default" }, "Monitoring": { "Enabled": false } }, "LaunchedAvailabilityZone": "eu-west-1c", "ProductDescription": "Linux/UNIX", "SpotInstanceRequestId": "sir-1234567890EXAMPLE", "SpotPrice": "0.012600", "State": "active", "Status": { "Code": "fulfilled", "Message": "Your spot request is fulfilled.", "UpdateTime": "2020-06-25T18:30:21+00:00" }, "Tags": [ { "Key": "Environment", "Value": "Production" }, { "Key": "Another key", "Value": "Another value" } ], "Type": "one-time", "InstanceInterruptionBehavior": "terminate" } ] }

取消 Spot 实例请求

如果您不再需要 Spot 实例请求,您可以将其取消。您只能取消处于 openactivedisabled 状态的 Spot 实例 请求。

  • 当您的请求未执行,且实例没有启动时,您的 Spot 实例请求处于 open 状态。

  • 当您的请求完成且 Spot 实例因此已启动时,您的 Spot 实例请求处于 active 状态。

  • 在您停止 Spot 实例时,您的 Spot 实例请求 disabled

如果您的 Spot 实例 请求处于 active 状态,且关联的 Spot 实例 正在运行,那么取消请求不会终止该实例。有关终止 Spot 实例的更多信息,请参阅终止 Spot 实例

取消 Spot 实例 请求(控制台)

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

  2. 在导航窗格中,请选择 Spot Requests (Spot 请求),然后选择所需的 Spot 请求。

  3. 依次选择操作取消请求

  4. (可选) 如果不再使用关联的 Spot 实例,可以将其终止。在取消竞价请求对话框中,选择终止实例,然后选择确认

取消 Spot 实例 请求 (AWS CLI)

  • 使用 cancel-spot-instance-requests 命令可取消指定的 Spot 请求。

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

停止 Spot 实例

如果您现在不需要 Spot 实例,但希望在以后重启它们且不会丢失 Amazon EBS 卷中保留的数据,您可以停止它们。停止 Spot 实例的步骤与停止的个按需实例步骤类似。只有当 Spot 实例是从 persistent Spot 实例请求启动时,您才能停止 Spot 实例。

注意

在Spot 实例停止后,您可以修改其部分实例属性,但不能修改实例类型。

我们不会对已停止的 Spot 实例收费,也不会收取数据传输费,但我们会对所有 Amazon EBS 卷的存储收费。

限制

  • 如果 Spot 实例是某个队列或启动组、可用区组或 Spot 块的一部分,则无法停止它。

新控制台

停止 Spot 实例(控制台)

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

  2. 在导航窗格中,选择实例,然后选择 Spot 实例。

  3. 依次选择实例状态停止实例

  4. 当系统提示您确认时,选择 Stop

旧控制台

停止 Spot 实例(控制台)

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

  2. 在导航窗格中,选择实例,然后选择 Spot 实例。

  3. 依次选择 ActionsInstance StateStop

AWS CLI

停止 Spot 实例 (AWS CLI)

  • 使用 stop-instances 命令手动停止一个或多个 Spot 实例。

    aws ec2 stop-instances --instance-ids i-1234567890abcdef0

启动 Spot 实例

您可以启动以前停止的 Spot 实例。启动 Spot 实例的步骤与启动个按需实例的步骤类似。

先决条件

您只能在以下情况下启动 Spot 实例:

  • 您手动停止了 Spot 实例。

  • Spot 实例是 EBS 支持的实例。

  • Spot 实例容量可用。

  • Spot 价格低于您的最高价格。

限制

  • 如果 Spot 实例是某个队列或启动组、可用区组或 Spot 块的一部分,则无法启动它。

新控制台

启动 Spot 实例(控制台)

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

  2. 在导航窗格中,选择实例,然后选择 Spot 实例。

  3. 依次选择实例状态启动实例

旧控制台

启动 Spot 实例(控制台)

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

  2. 在导航窗格中,选择实例,然后选择 Spot 实例。

  3. 依次选择 ActionsInstance StateStart

AWS CLI

启动 Spot 实例 (AWS CLI)

  • 使用 start-instances 命令手动启动一个或多个 Spot 实例。

    aws ec2 start-instances --instance-ids i-1234567890abcdef0

终止 Spot 实例

如果您的 Spot 实例请求 active 且关联有正在运行的 Spot 实例,或者您的 Spot 实例请求 disabled 且关联有已停止的 Spot 实例,则取消请求不会终止实例,您必须手动终止正在运行的 Spot 实例。

如果您终止的运行中或已停止 Spot 实例 是由持久性 Spot 请求启动的,则 Spot 请求会返回 open 状态,这样就可以启动新的 Spot 实例。要取消持久性 Spot 请求并终止其 Spot 实例,您必须先取消 Spot 请求,然后终止 Spot 实例。否则,持久性 Spot 请求可以启动新实例。有关取消 Spot 实例请求的详细信息,请参阅取消 Spot 实例请求

新控制台

使用控制台手动终止 Spot 实例

  1. 在终止实例前,请确认您是否会丢失任何数据,方法是确认您的 Amazon EBS 卷是否会在终止时被删除,以及您是否已将所需数据从实例存储卷复制到持久性存储,例如 Amazon EBS 或 Amazon S3。

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

  3. 在导航窗格中,选择 Instances (实例)

  4. 要确认实例是否是 Spot 实例,请检查实例生命周期列中是否显示 spot

  5. 选择所需实例,然后依次选择操作实例状态终止实例

  6. 当系统提示您确认时,选择终止

旧控制台

使用控制台手动终止 Spot 实例

  1. 在终止实例前,请确认您是否会丢失任何数据,方法是确认您的 Amazon EBS 卷是否会在终止时被删除,以及您是否已将所需数据从实例存储卷复制到持久性存储,例如 Amazon EBS 或 Amazon S3。

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

  3. 在导航窗格中,选择 Instances (实例)

  4. 要确认实例是否是 Spot 实例,请检查生命周期列中是否显示 spot

  5. 选择所需实例,然后依次选择 ActionsInstance StateTerminate

  6. 当系统提示您确认时,选择 Yes, Terminate

AWS CLI

使用 AWS CLI 手动终止 Spot 实例

  • 使用 terminate-instances 命令可手动终止 Spot 实例。

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