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

竞价型队列请求

要使用竞价型队列,您需要创建一个竞价型队列请求,该请求包括目标容量、实例的一个或多个启动说明以及您的出价。当出价发生更改时,Amazon EC2 将尝试维护您的竞价型队列的目标容量。有关更多信息,请参阅 竞价型队列的工作方式

有两种类型的竞价型队列请求:requestmaintain。您可以创建竞价型队列,以针对所需容量提交一次性请求,或者要求其随着时间的推移保持目标容量。两种请求类型都可以使用竞价型队列的分配策略。

当您发出一次性请求时,竞价型队列会根据需要出价,但在容量减少时,不会尝试补充竞价型实例。如果容量不可用,竞价型队列不会在其他竞价池中提交出价。

如果您要保持目标容量,竞价型队列会根据需要提交出价以满足目标容量,并自动补充任何中断的实例。

提交一次性请求后,其目标容量则无法修改。要更改目标容量,请取消请求并重新提交新请求。

竞价型队列请求在过期或您取消它之前保持有效。取消竞价型队列请求时,您可以指定取消竞价型队列请求是否会终止您竞价型队列中的竞价型实例。

每个启动说明包括 Amazon EC2 启动实例所需的信息 – 例如 AMI、实例类型、子网或可用区、一个或多个安全组。

竞价型队列请求状态

竞价型队列请求可以处于以下某种状态:

  • submitted - 正在评估竞价型队列请求,并且 Amazon EC2 正准备启动目标数量的竞价型实例。

  • active - 已验证竞价型队列,并且 Amazon EC2 正在尝试维持目标数量的正在运行的竞价型实例。请求会保持这一状态,直到其被修改或取消。

  • modifying – 正在修改竞价型队列请求。请求会保持这一状态,直到修改全部完成或竞价型队列被取消。无法修改一次性 request,并且这一状态不适用于此类竞价请求。

  • cancelled_running - 竞价型队列已取消且不会启动其他竞价型实例,但其现有的竞价型实例将继续运行,直到其被中断或终止。请求会保持此状态,直到所有实例都已中断或终止。

  • cancelled_terminating - 竞价型队列已取消,且其竞价型实例正在终止。请求会保持此状态,直到所有实例都已终止。

  • cancelled - 竞价型队列已取消,且没有正在运行的竞价型实例。竞价型队列请求将在其实例终止两天后被删除。

以下显示了请求状态之间的转换。请注意,如果您超出了竞价型队列的限制,则请求会被立即取消。

 竞价型队列请求状态

竞价型队列先决条件

如果您使用 Amazon EC2 控制台创建竞价型队列,则该队列会创建一个名为 aws-ec2-spot-fleet-tagging-role 的角色,该角色会向竞价型队列授予代表您出价、启动、终止和标记实例的权限。此角色在您创建竞价型实例请求时选择。如果您改用 AWS CLI 或 API,则必须确保此角色存在。您可以使用请求竞价型实例向导 (角色在您前进到该向导的第二页时创建) 或使用 IAM 控制台,如下所示。

为竞价型队列创建 IAM 角色

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

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

  3. 选择 Create new role

  4. Select role type 页面上,选择 Amazon EC2 Spot Fleet Role 旁边的 Select

  5. Attach Policy 页面上,选择 AmazonEC2SpotFleetRole 策略,然后选择 Next Step

  6. Set role name and review 页面上,键入角色的名称 (例如,aws-ec2-spot-fleet-tagging-role),然后选择 Create role

  7. 要向竞价型队列授予自动标记其启动的实例的权限,请单击新角色所在的行,然后依次选择 Attach PolicyAmazonEC2SpotFleetTaggingRole 策略和 Attach Policy。选择 AmazonEC2SpotFleetRole 策略旁边的 Detach Policy

竞价型队列和 IAM 用户

如果您的 IAM 用户将创建或管理竞价型队列,请确保为他们授予所需的权限,如下所示。

授予 IAM 用户竞价型队列的权限

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

  2. 在导航窗格中选择 Policies,然后选择 Create policy

  3. Create Policy 页上,选择 Create Your Own Policy 旁的 Select

  4. Review Policy 页上,键入策略名称并将以下文本添加到 Policy Document

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }

    ec2:* 向 IAM 用户授予调用所有 Amazon EC2 API 操作的权限。要将用户限制到特定 Amazon EC2 API 操作,请改为指定这些操作。

    IAM 用户必须具有调用 iam:ListRoles 操作以枚举现有 IAM 角色、调用 iam:PassRole 操作以指定竞价型队列角色以及调用 iam:ListInstanceProfiles 操作以枚举现有实例配置文件的权限。

    (可选) 要使 IAM 用户能够使用 IAM 控制台创建角色或实例配置文件,您必须向该策略添加以下操作:

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  5. 选择 Create Policy

  6. 在导航窗格中选择 Users,然后选择将提交竞价型队列请求的用户。

  7. 权限选项卡中,请选择添加权限

  8. 选择直接附加现有策略。选择以上您创建的策略,选择 Next: Review,然后选择添加权限

竞价型队列运行状况检查

竞价型队列每 2 分钟检查一次队列中竞价型实例的运行状况。实例的运行状况为 healthyunhealthy。竞价型队列将使用 Amazon EC2 提供的状态检查来确定实例的运行状况。如果在连续三次运行状况检查中,实例状态检查或系统状态检查的状态有任一项为 impaired,则该实例的运行状况为 unhealthy。否则,运行状况为 healthy。有关更多信息,请参阅 实例的状态检查

您可以配置竞价型队列以替换运行状况不佳的实例。在启用运行状况检查替换后,实例将在其运行状况报告为 unhealthy 后被替换。请注意,在替换运行状况不佳的实例时,竞价型队列的容量可能在几分钟内降至其目标容量以下。

要求

  • 仅保持目标容量的竞价型队列 (而非一次性竞价型队列) 支持运行状况检查替换。

  • 您可以将竞价型队列配置为仅在您创建它时替换运行状况不佳的实例。

  • IAM 用户仅在其有权调用 ec2:DescribeInstanceStatus 操作时才能使用运行状况检查替换。

规划竞价型队列请求

在创建竞价型队列请求前,请查看竞价最佳实践。使用这些最佳实践规划您的竞价型队列请求,以便以可能的最低价格配置需要的实例类型。还建议执行以下操作:

  • 确定您要创建的竞价型队列是针对所需目标容量提交一次性 request,还是随着时间推移 maintain 目标容量。

  • 确定满足您的应用程序要求的实例类型。

  • 确定您的竞价型队列请求的目标容量。您可以采用实例或自定义单位设置目标容量。有关更多信息,请参阅 竞价型队列实例权重

  • 确定每实例小时出价。出价较低能够进一步降低成本,而出价较高则可以降低中断发生的可能性。

  • 如果您在使用实例权重,请确定您的每单位现货价格。要计算每单位出价,请将每实例小时出价除以该实例表示的单位数 (或权重)。(如果不使用实例权重,则默认的每单位出价是每实例小时出价。)

  • 查看用于您的竞价型队列请求的可能选项。关于更多信息,请参阅 AWS Command Line Interface Reference 中的 request-spot-fleet 命令。有关其他示例,请参阅 竞价型队列示例配置

创建竞价型队列请求

创建竞价型队列请求时,您必须指定有关要启动的竞价型实例的信息 (例如实例类型和现货价格)。

使用控制台创建竞价型队列请求

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

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

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

    1. 对于 Request type,选择 RequestRequest and Maintain

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

    3. 对于 AMI,选择由 AWS 提供的基础 Amazon 系统映像 (AMI) 之一,或者选择 Use custom AMI 以使用来自我们用户社区的 AMI、AWS Marketplace 或您自己的 AMI 之一。

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

    5. 对于 Allocation strategy,选择满足您的需求的策略。有关更多信息,请参阅 竞价型队列分配策略

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

      [现有 VPC] 选择 VPC。

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

      [EC2-Classic] 选择 EC2-Classic

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

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

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

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

    9. 选择 Next

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

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

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

    3. (可选) 要替换 Request and Maintain 竞价型队列中运行状况不佳的实例,请选择 Replace unhealthy instances

    4. (可选) 要运行专用竞价型实例,请为 Tenancy 选择 Dedicated - run a dedicated instance

    5. (可选) 默认情况下,Amazon EC2 会在竞价型实例中断时将其终止。如果队列类型为 maintain,您可以指定在竞价型实例中断时将其停止。为此,请为 Interruption behavior 选择 Stop

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

    7. (可选) 要添加标签,请选择 Add new tag,然后键入该标签的键和值。对每个标签重复此操作。

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

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

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

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

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

    13. (可选) 默认情况下,我们会在请求过期时终止您的竞价型实例。要维持实例在请求过期之后继续运行,请清除 Terminate instances at expiration

    14. 选择 Review

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

  6. 在确认页面上,请选择 OK。请求类型为 fleet。执行请求后,系统会添加请求类型 instance,此时其状态为 activefulfilled

使用 AWS CLI 创建竞价型队列请求

使用以下 request-spot-fleet 命令可创建竞价型队列请求:

Copy
aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json

有关示例配置文件,请参阅竞价型队列示例配置

下面是示例输出:

{
    "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
} 

监控您的竞价型队列

当现货价格低于您的出价时,竞价型队列会启动竞价型实例。竞价型实例将会运行,直到出价不再高于现货价格或您自己终止了它们。

使用控制台监控您的竞价型队列

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

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

  3. 选择您的竞价型队列请求。配置详细信息在 Description 选项卡中提供。

  4. 要列出竞价型队列的竞价型实例,请选择 Instances 选项卡。

  5. 要查看竞价型队列的历史记录,请选择 History 选项卡。

使用 AWS CLI 监控您的竞价型队列

使用以下 describe-spot-fleet-requests 命令可描述竞价型队列请求:

Copy
aws ec2 describe-spot-fleet-requests

使用以下 describe-spot-fleet-instances 命令可描述指定竞价型队列的竞价型实例:

Copy
aws ec2 describe-spot-fleet-instances --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

使用以下 describe-spot-fleet-request-history 命令可描述指定竞价型队列请求的历史记录:

Copy
aws ec2 describe-spot-fleet-request-history --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --start-time 2015-05-18T00:00:00Z

修改竞价型队列请求

您可以修改活动的竞价型队列请求以完成以下任务:

  • 提升目标容量

  • 减少目标容量

注意

无法修改一次性竞价型队列请求。

当您提升目标容量时,竞价型队列会根据其竞价型队列请求的分配策略来启动额外的竞价型实例。如果分配策略是 lowestPrice,则竞价型队列从竞价型队列请求中价格最低的竞价型实例池启动实例。如果分配策略是 diversified,则竞价型队列在竞价型队列请求中的池间分配实例。

当您减少目标容量时,竞价型队列会取消任何超过新目标容量的开放出价。您可以请求竞价型队列终止竞价型实例,直到队列的大小达到新目标容量。如果分配策略是 lowestPrice,则竞价型队列会终止每单位价格最高的实例。如果分配策略是 diversified,则竞价型队列会在池间终止实例。或者,您可以请求竞价型队列保持当前的队列大小,而不替换已中断或您手动终止的任何竞价型实例。

请注意,当竞价型队列因目标容量下降而终止某个实例时,该实例将收到一条竞价型实例中断通知。

使用控制台修改竞价型队列请求

  1. https://console.amazonaws.cn/ec2spot/home/fleet 处打开竞价控制台。

  2. 选择您的竞价型队列请求。

  3. 选择 Actions,然后选择 Modify target capacity

  4. Modify target capacity 中,执行以下操作:

    1. 输入新的目标容量。

    2. (可选) 如果您要减少目标容量,但是要使队列保持其当前大小,请取消选择 Terminate instances

    3. 选择 Submit

使用 AWS CLI 修改竞价型队列请求

使用以下 modify-spot-fleet-request 命令可更新指定竞价型队列请求的目标容量:

Copy
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --target-capacity 20

您可以按如下所示修改前面的命令,以减少指定竞价型队列的目标容量而不因此终止任何竞价型实例:

Copy
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --target-capacity 10 --excess-capacity-termination-policy NoTermination

取消竞价型队列请求

在使用完竞价型队列后,可以取消竞价型队列请求。这将取消与竞价型队列关联的所有竞价请求,从而不会为您的竞价型队列启动任何新的竞价型实例。您必须指定竞价型队列是否应终止其竞价型实例。如果您终止实例,则竞价型队列请求会进入 cancelled_terminating 状态。否则,竞价型队列请求会进入 cancelled_running 状态,并且实例会继续运行,直到它们中断或您手动终止它们。

使用控制台取消竞价型队列请求

  1. https://console.amazonaws.cn/ec2spot/home/fleet 处打开竞价控制台。

  2. 选择您的竞价型队列请求。

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

  4. Cancel spot request 中,确认是否要取消竞价型队列。要使队列保持其当前大小,请取消选择 Terminate instances。如果准备就绪,请选择 Confirm

使用 AWS CLI 取消竞价型队列请求

使用以下 cancel-spot-fleet-requests 命令可取消指定的竞价型队列请求并终止实例:

Copy
aws ec2 cancel-spot-fleet-requests --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --terminate-instances

下面是示例输出:

{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_terminating",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}

可以按如下所示修改前面的命令,以取消指定的竞价型队列请求而不终止实例:

Copy
aws ec2 cancel-spot-fleet-requests --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --no-terminate-instances

下面是示例输出:

{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_running",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}