使用竞价型实例 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用竞价型实例

要使用竞价型实例,您需要创建竞价型实例请求,其中包括所需实例数量、实例类型以及可用区。当有容量可用时,Amazon EC2 将立即满足您的请求。否则,Amazon EC2 将等待直至可以完成您的请求,或者直至您取消请求。

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


				竞价型实例请求的工作原理。

竞价型实例请求状态

竞价型实例请求可以处于以下某种状态:

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

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

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

  • closed – 竞价型实例被中断或终止。

  • disabled – 您停止了竞价型实例。

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

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


					竞价型实例请求的状态。

一次性竞价型实例请求在 Amazon EC2 启动竞价型实例、请求过期前或者您取消请求前保持有效。当没有容量可用时,将终止您的竞价型实例并关闭竞价型实例请求。

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

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

指定竞价型实例的租期

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

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

  • 在创建竞价型实例请求时,请指定租期 dedicated。有关更多信息,请参阅创建竞价型实例请求

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

所有实例系列都支持除 T 实例外的专用竞价型实例。对于每个受支持的实例系列,只有最大的实例或设备支持专用竞价型实例。

竞价型实例请求的服务相关角色

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

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

Amazon Web Services ServiceRoleForEC2Spot 授予的权限

Amazon EC2 使用 Amazon Web Services ServiceRoleForEC2Spot 完成以下操作:

  • ec2:DescribeInstances – 描述竞价型实例

  • ec2:StopInstances – 停止竞价型实例

  • ec2:StartInstances – 启动竞价型实例

创建服务相关角色

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

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

如果您使用 Amazon CLI 或 API 来请求竞价型实例,则必须确保此角色存在。

要使用控制台创建 Amazon Web Services ServiceRoleForEC2Spot
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)。

  3. 选择创建角色

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

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

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

要使用 Amazon CLI 创建 Amazon Web Services ServiceRoleForEC2Spot

如下所示使用 create-service-linked-role 命令。

aws iam create-service-linked-role --aws-service-name spot.amazonaws.com

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

授予对用于加密的 AMI 和 EBS 快照的客户托管密钥的访问权限

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

在提供权限时,授权是密钥策略的替代方法。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用授权在 Amazon KMS 中使用密钥策略

Amazon Web Services ServiceRoleForEC2Spot 角色授予使用客户托管密钥的权限
  • 使用 create-grant 命令在客户托管密钥中添加授权,并指定授予权限的委托人(Amazon Web Services ServiceRoleForEC2Spot 服务相关角色),以执行授权允许的操作。客户托管密钥由 key-id 参数和客户托管密钥的 ARN 指定。委托人是由 grantee-principal 参数和 Amazon Web Services ServiceRoleForEC2Spot 服务相关角色的 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/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

创建竞价型实例请求

您可以使用 Amazon EC2 控制台中的启动实例向导run-instances Amazon CLI 命令以与启动按需型实例相同的方式请求竞价型实例。建议使用此方法的原因如下:

  • 您已经在使用启动实例向导run-instances 命令启动按需型实例,而且只想通过更改单个参数来更改为启动竞价型实例。

  • 您不需要多个实例类型不同的实例。

通常不建议使用此方法来启动竞价型实例,因为您无法指定多种实例类型,也无法在同一请求中启动竞价型实例和按需型实例。有关启动竞价型实例的首选方法(包括启动实例集,其中包含具有多种实例类型的竞价型实例和按需型实例类型),请参阅 使用哪种竞价型请求方法最好?

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

New console
使用启动实例向导创建竞价型实例请求

步骤 1-9 与启动按需型实例时使用的步骤相同。在步骤 10 中,您配置竞价型实例请求。

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 从 Amazon EC2 控制台控制面板中,选择启动实例

  4. (可选)在Name and tags(名称和标签)下,您可以为实例命名,并为竞价型实例请求、实例、卷和弹性图形添加标签。有关标签的信息,请参阅 标记 Amazon EC2 资源

    1. 对于 Name(名称),为您的实例输入一个描述性名称。

      实例名称是一个标签,其中密钥为 Name(名称),而值为您指定的名称。如果您没有指定名称,则可以通过其 ID 标识实例,该 ID 将在您启动实例时自动生成。

    2. 要为竞价型实例请求、实例、卷和弹性图形添加标签,请选择 Add additional tags(添加其他标签)。选择 Add tag(添加标签),然后输入密钥和值,然后选择要标记的资源类型。为每个要添加的其它标签选择 Add tag(添加标签)。

  5. Application and OS Images(Amazon Machine Image)(应用程序和操作系统镜像(Amazon Machine Image))下,为您的实例选择操作系统(OS),然后选择 AMI。有关更多信息,请参阅应用程序和操作系统镜像 (Amazon Machine Image)

  6. Instance type(实例类型)下,请选择符合您对实例硬件配置和大小要求的实例类型。有关更多信息,请参阅实例类型

  7. Key pair(login)(密钥对(登录))下,选择一个现有密钥对,或选择 Create new key pair(创建新密钥对)来新建一个密钥对。有关更多信息,请参阅Amazon EC2 密钥对和 Windows 实例

    重要

    如果您选择 Proceed without key pair (Not recommended)(在没有密钥对的情况下继续(不推荐))选项,则将无法连接到此实例,除非您选择配置为允许用户以其它方式登录的 AMI。

  8. Network settings(网络设置)下,使用默认设置,或选择 Edit(编辑)根据需要配置网络设置。

    安全组构成了网络设置的一部分,并为实例定义防火墙规则。这些规则指定哪些传入的网络流量可传输到您的实例。

    有关更多信息,请参阅Network settings (网络设置)

  9. 您选择的 AMI 包含一个或多个存储卷,包括根设备卷。在 Configure storage(配置存储)下,您可以选择 Add new volume(添加新卷)来指定要附加到实例的其他卷。有关更多信息,请参阅配置存储

  10. Advanced details(高级详细信息)下,按如下方式配置竞价型实例请求:

    1. Purchasing option(购买选项)下,选择 Request Spot Instances(请求竞价型实例)复选框。

    2. 您可以保留竞价型实例请求的默认配置,也可以选择(位于右侧的) Customize(自定义)为竞价型实例请求指定自定义设置。

      选择 Customize(自定义)后,将显示以下字段。

      1. Maximum price(最高价):您可以以 Spot 价格请求竞价型实例,上限为按需价格,也可以指定您愿意支付的最高金额。

        警告

        如果您指定了某个最高价,则实例被中断的频率将比您选择 No maximum price(无最高价)时更高。

        • No maximum price(无最高价):您的竞价型实例将以当前的 Spot 价格启动。价格永远不会超过按需价格。(建议)

        • Set your maximum price (per instance/hour)(设置最高价(每实例/小时)):您可以指定愿意支付的最高金额。

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

          • 如果您指定的最高价高于当前 Spot 价格,则您的竞价型实例将按当前 Spot 价格启动和计费。竞价型实例运行后,如果 Spot 价格上涨到超过您的最高价格,Amazon EC2 将中断您的竞价型实例。

          • 无论您指定哪种最高价,都将始终按当前的 Spot 价格向您收取费用。

          要查看 Spot 价格趋势,请参阅 竞价型实例定价历史记录

      2. Request type(请求类型):您选择的竞价型实例请求类型决定了竞价型实例中断时会发生什么。

        • One-time(一次性):Amazon EC2 为您的竞价型实例发出一次性请求。如果您的竞价型实例被中断,不会重新提交请求。

        • Persistent request(持久性请求):Amazon EC2 对您的竞价型实例发出持久请求。如果您的竞价型实例中断,则将重新提交请求以补充中断的竞价型实例。

        如果您未指定值,则默认值为一次性请求。

      3. Valid to(有效截止时间):持久性竞价型实例请求的到期日期。

        一次性请求不支持此字段。一次性请求在请求中的所有实例启动或者您取消请求前保持有效。

        • No request expiry date(没有请求到期日期):请求在您将其取消之前保持有效。

        • Set your request expiry date(设置请求到期日期):持久性请求将保持活动状态,直到您指定的日期或取消该请求为止。

      4. Interruption behavior(中断行为):您选择的行为决定了竞价型实例中断时会发生什么。

        • 对于持久性请求,有效值为 Stop(停止)和 Hibernate(休眠)。实例停止后,将收取 EBS 卷存储费用。

          注意

          竞价型实例现在使用与按需型实例相同的休眠功能。要启用休眠,您可以在此处选择休眠,也可以在启动实例向导下方显示的停止 - 休眠行为字段中选择启用。有关休眠的先决条件,请参阅 休眠先决条件

        • 对于一次性请求,只有 Terminate(终止)有效。

        如果您未指定值,则默认值为 Terminate(终止),这对持久性竞价型实例请求无效。如果您保持默认设置并尝试启动持久性竞价型实例请求,则会收到错误消息。

        有关更多信息,请参阅中断行为

  11. 在存储库的 Summary(摘要)面板,对于 Number of instances(实例数量),输入要启动的实例数量。

    注意

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

  12. Summary(摘要)面板,查看实例的详细信息并进行必要的更改。在提交竞价型实例请求后,您无法更改该请求的参数。您可以在 Summary(摘要)面板选择启动实例向导中某部分的链接以直接导航到该部分。有关更多信息,请参阅Summary

  13. 当您准备好启动您的实例时,请选择 Launch instance(启动实例)。

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

Old console
使用启动实例向导创建竞价型实例请求
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

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

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

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

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

      注意

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

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

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

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

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

      警告

      如果您指定了某个最高价,则实例被中断的频率将比您将此字段留空时更高。

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

      • 如果您指定的最高价高于当前 Spot 价格,则您的竞价型实例将按当前 Spot 价格启动和计费。竞价型实例运行后,如果 Spot 价格上涨到超过您的最高价格,Amazon EC2 将中断您的竞价型实例。

      • 无论您指定哪种最高价,都将始终按当前的 Spot 价格向您收取费用。

      • 如果您将此字段留空,您将支付当前 Spot 价格。

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

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

    • (可选)请求有效截止时间:选择 Edit (编辑) 可指定 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,请参阅 排查实例启动问题

Amazon CLI
使用 run-instances 创建竞价型实例请求

使用 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 指定的数据结构。您还可以指定 ValidUntilInstanceInterruptionBehavior。如果未在数据结构中指定字段,则将使用默认值。

以下示例将创建一个 persistent 请求。

{ "MarketType": "spot", "SpotOptions": { "SpotInstanceType": "persistent" } }

 

使用 request-spot-instances 创建竞价型实例请求

注意

我们强烈反对使用 request-spot-instances 命令来请求竞价型实例,因为它是不具有计划投资的旧式 API。有关更多信息,请参阅 使用哪种竞价型请求方法最好?

使用 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

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

查找正在运行的竞价型实例

当有容量可用时,Amazon EC2 会启动竞价型实例。竞价型实例将一直运行,直到该实例中断,或者您自行终止该实例。

查找正在运行的竞价型实例(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,请选择 Spot Requests。您可以同时查看竞价型实例请求和竞价型实例集请求。如果 Spot 实例请求已执行,那么 Capacity (容量) 就是 Spot 实例的 ID。对于 Spot 实例集,Capacity (容量) 表示已执行的请求容量。要查看 Spot 实例集中的实例的 ID,请选择扩展箭头,或者选择队列,然后选择 Instances (实例)

    注意

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

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

查找正在运行的竞价型实例(Amazon 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

标记竞价型实例请求

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

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

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

先决条件

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

您创建的 IAM policy 由您用于创建竞价型实例请求的方法决定。

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

创建包含以下内容的 IAM policy:

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

  • 对于 Resource,请指定 spot-instances-request。这允许用户创建竞价型实例请求,以请求竞价型实例。

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

  • 对于 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 操作创建竞价型实例请求并在创建时标记竞价型实例请求时,您需要了解 Amazon EC2 如何在 RunInstances 语句中评估 spot-instances-request 资源。

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

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

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

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

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

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

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

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

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

创建包含以下内容的 IAM policy:

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

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

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

{ "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/*" }

标记新的竞价型实例请求

使用控制台标记新的竞价型实例请求
  1. 按照创建竞价型实例请求过程操作。

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

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

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

使用 Amazon CLI 标记新的竞价型实例请求

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

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

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

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

在以下示例中,使用两个标签来标记竞价型实例请求:键=环境,值=生产;键=成本中心,值=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}]'

标记现有竞价型实例请求

使用控制台标记现有的竞价型实例请求

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

通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  2. 选择您的竞价型实例请求。

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

使用控制台标记现有的竞价型实例

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

使用 Amazon CLI 标记现有的竞价型实例请求或竞价型实例

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

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

查看竞价型实例请求标记

使用控制台查看竞价型实例请求标签

通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

描述竞价型实例请求标记

使用 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" } ] }

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

使用 describe-spot-instance-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" } ] }

取消竞价型实例请求

如果您不再需要竞价型实例请求,您可以将其取消。您只能取消 openactivedisabled 的竞价型实例请求。

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

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

  • 当您停止竞价型实例时,您的竞价型实例请求处于 disabled 状态。

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

取消竞价型实例请求(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

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

取消 Spot 实例请求 (Amazon CLI)
  • 使用 cancel-spot-instance-requests 命令可取消指定的 Spot 实例请求。

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

停止竞价型实例

如果您现在不需要竞价型实例,但希望在以后重启它们且不会丢失 Amazon EBS 卷中保留的数据,您可以停止它们。停止竞价型实例的步骤与停止按需型实例的步骤类似。

注意

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

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

限制
  • 只有当竞价型实例是从 persistent 竞价型实例请求启动时,您才能停止竞价型实例。

  • 如果关联的竞价型实例请求被取消,则无法停止竞价型实例。当竞价型实例请求被取消后,您只能终止竞价型实例。

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

Console
停止竞价型实例(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

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

Amazon CLI
停止竞价型实例(Amazon CLI)
  • 使用 stop-instances 命令手动停止一个或多个 Spot 实例。

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

启动竞价型实例

您可以启动以前停止的竞价型实例。启动竞价型实例的步骤与启动按需型实例的步骤类似。

先决条件

您只能在以下情况下启动竞价型实例:

  • 您手动停止了竞价型实例。

  • 竞价型实例是 EBS 支持的实例。

  • 竞价型实例容量可用。

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

限制
  • 如果竞价型实例是某个队列或启动组或可用区组的一部分,则无法启动它。

Console
启动竞价型实例(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

Amazon CLI
启动竞价型实例(Amazon CLI)
  • 使用 start-instances 命令手动启动一个或多个 Spot 实例。

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

终止竞价型实例

如果您终止的运行中或已停止竞价型实例是由持久性竞价型实例请求启动的,则竞价型实例请求会转换为 open 状态,这样就可以启动新的竞价型实例。要确保没有启动新的竞价型实例,您必须首先取消该竞价型实例请求。

如果您取消含有正在运行的竞价型实例的 active 竞价型实例请求,则正在运行的竞价型实例不会自动终止;您必须手动终止该竞价型实例。

如果您取消含有已停止的竞价型实例的 disabled 竞价型实例请求,则 Amazon EC2 Spot 服务将自动终止已停止的竞价型实例。取消竞价型实例请求与 Spot 服务终止竞价型实例之间可能存在短暂的滞后。

有关取消 Spot 实例请求的信息,请参阅取消竞价型实例请求

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

  2. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  5. 选择相应实例,然后依次选择 Instance state (实例状态)Terminate instance (终止实例)

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

Amazon CLI
使用 Amazon CLI 手动终止竞价型实例
  • 使用 terminate-instances 命令可手动终止 Spot 实例。

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