创建 Spot 队列 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建 Spot 队列

使用 Amazon Web Services Management Console,只需选择 AMI 和所需的目标总容量即可快速创建竞价型实例集请求。Amazon EC2 将配置一个最符合您需求并遵循竞价型实例最佳实践的实例集。有关更多信息,请参阅 快速创建 Spot 队列请求(控制台)。否则,您可以修改任意默认设置。有关更多信息,请参阅使用已定义的参数创建 Spot 队列请求(控制台)使用 Amazon CLI 创建竞价型实例集

如果您想在实例集中包含按需型实例,则需要在请求中指定启动模板并指定所需的按需容量。

实例集在有可用容量时启动按需型实例,在最高价超过 Spot 价格并且有可用容量时启动竞价型实例。

如果实例集包含竞价型实例且类型为 maintain,Amazon EC2 会尝试在竞价型实例中断时维持实例集的目标容量。

Spot 队列权限

如果用户打算创建或管理竞价型实例集,您需要为其授予所需权限。

如果您使用 Amazon EC2 控制台创建竞价型实例集,将创建两个名为 AWSServiceRoleForEC2SpotFleetAWSServiceRoleForEC2Spot 的服务相关角色和一个名为 aws-ec2-spot-fleet-tagging-role 的角色,这些角色为竞价型实例集授予代表您请求、启动、终止和标记资源的权限。如果您使用 Amazon CLI 或 API,您必须确保这些角色存在。

按照以下说明授予所需的权限并创建角色。

向用户授予竞价型实例集权限

如果用户打算创建或管理竞价型实例集,请确保为其授予所需的权限。

为竞价型实例集创建策略
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择 PoliciesCreate policy

  3. Create policy (创建策略) 页面上,选择 JSON,然后将文本替换为以下内容。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:CreateTags", "ec2:RequestSpotFleet", "ec2:ModifySpotFleetRequest", "ec2:CancelSpotFleetRequests", "ec2:DescribeSpotFleetRequests", "ec2:DescribeSpotFleetInstances", "ec2:DescribeSpotFleetRequestHistory" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role" }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:ListRoles", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }

    上述示例策略为用户授予多数竞价型实例集使用案例所需的权限。要将用户限制为特定的 API 操作,请仅指定这些 API 操作。

    所需的 EC2 和 IAM API

    必须在策略中包含以下 API:

    • ec2:RunInstances – 需要其启动竞价型实例集中的实例

    • ec2:CreateTags – 需要其标记竞价型实例集请求、实例或卷

    • iam:PassRole – 需要其指定竞价型实例集角色

    • iam:CreateServiceLinkedRole – 需要其创建服务相关角色

    • iam:ListRoles – 需要其枚举现有的 IAM 角色

    • iam:ListInstanceProfiles – 需要其枚举现有的实例配置文件

    重要

    如果您在启动规范或启动模板中为 IAM 实例配置文件指定角色,则必须授予用户将该角色传递给服务的权限。为此,在 IAM policy 中,包括 "arn:aws:iam::*:role/IamInstanceProfile-role" 作为 iam:PassRole 操作的资源。有关更多信息,请参阅 IAM 用户指南中的向用户授予将角色传递给 Amazon 服务的权限

    竞价型实例集 API

    根据需要,将以下 Spot 队列 API 操作添加到策略中:

    • ec2:RequestSpotFleet

    • ec2:ModifySpotFleetRequest

    • ec2:CancelSpotFleetRequests

    • ec2:DescribeSpotFleetRequests

    • ec2:DescribeSpotFleetInstances

    • ec2:DescribeSpotFleetRequestHistory

    可选的 IAM API

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

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  4. 选择查看策略

  5. 查看策略页面上,输入策略名称和描述,然后选择创建策略

  6. 要提供访问权限,请为您的用户、组或角色添加权限:

Spot 队列的服务相关角色

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

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

重要

如果在竞价型实例集中指定加密的 AMI 或加密的 Amazon EBS 快照,则必须为 AWSServiceRoleForEC2SpotFleet 角色授予使用该 CMK 的权限,以便 Amazon EC2 可以代表您启动实例。有关更多信息,请参阅授予对用于加密的 AMI 和 EBS 快照的 CMK 的访问权限

AWSServiceRoleForEC2SpotFleet 授予的权限

AWSServiceRoleForEC2SpotFleet 角色授予竞价型实例集权限以代表您请求、启动、终止和标记实例。Amazon EC2 使用此服务相关角色来完成以下操作:

  • ec2:RequestSpotInstances - 请求 Spot 实例

  • ec2:RunInstances - 启动实例

  • ec2:TerminateInstances - 终止实例

  • ec2:DescribeImages – 描述实例的亚马逊机器映像(AMI)

  • ec2:DescribeInstanceStatus - 监控实例的状态。

  • ec2:DescribeSubnets - 描述实例的子网

  • ec2:CreateTags – 在竞价型实例集请求、实例和卷中添加标签

  • elasticloadbalancing:RegisterInstancesWithLoadBalancer - 将指定的实例添加到指定的负载均衡器

  • elasticloadbalancing:RegisterTargets - 向指定目标组注册指定目标

创建服务相关角色

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

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

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

使用控制台为竞价型实例集创建 AWSServiceRoleForEC2SpotFleet 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 选择 Create role(创建角色)。

  4. 选择受信任的实体页面上,请执行以下操作:

    1. 可信实体类型中选择 Amazon 服务

    2. 使用案例下,对于服务或使用案例,选择 EC2

    3. 对于使用案例,选择 EC2 - 竞价型实例集

      注意

      EC2 - 竞价型实例集使用案例将自动创建具有所需 IAM 权限的策略,并建议将 AWSEC2SpotFleetServiceRolePolicy 作为角色名称。

    4. 选择 Next(下一步)。

  5. 添加权限页面上,选择下一步

  6. 命名、检查并创建页面上,选择创建角色

使用 Amazon CLI 为竞价型实例集创建 AWSServiceRoleForEC2SpotFleet 角色

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

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

如果您不再需要使用 Spot 队列,我们建议您删除 AWSServiceRoleForEC2SpotFleet 角色。从您的账户中删除该角色后,如果您使用控制台请求 Spot 队列,Amazon EC2 将再次创建该角色。有关更多信息,请参阅《IAM 用户指南》中的删除服务相关角色

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

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

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

为 AWSServiceRoleForEC2SpotFleet 角色授予使用 CMK 的权限
  • 使用 create-grant 命令在 CMK 中添加授权,并指定授予权限的委托人(AWSServiceRoleForEC2SpotFleet 服务相关角色)以执行授权允许的操作。CMK 是由 key-id 参数和 CMK 的 ARN 指定的。委托人是由 grantee-principal 参数和 AWSServiceRoleForEC2SpotFleet 服务相关角色的 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/AWSServiceRoleForEC2SpotFleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

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

Amazon EC2 使用名为 AWSServiceRoleForEC2Spot 的服务相关角色代表您启动和管理 Spot 实例。有关更多信息,请参阅竞价型实例请求的服务相关角色

用于标记 Spot 队列的 IAM 角色

aws-ec2-spot-fleet-tagging-role IAM 角色授予竞价型实例集标记竞价型实例集请求、实例和卷的权限。有关更多信息,请参阅 标记新的或现有的竞价型实例集请求及其启动的实例和卷

重要

如果您选择在实例集中标记实例并选择保持目标容量(竞价型实例集请求属于类型 maintain),用户与 IamFleetRole 的权限差异可能会导致实例集中实例的标记行为不一致。如果 IamFleetRole 不包含 CreateTags 权限,则可能不会标记由队列启动的某些实例。虽然我们正在努力修复这种不一致性,但为了确保队列启动的所有实例都被标记,我们建议您为 aws-ec2-spot-fleet-tagging-role 使用 IamFleetRole 角色。或者,要使用现有角色,请将 AmazonEC2SpotFleetTaggingRole Amazon 托管策略附加到现有角色。否则,您需要手动将 CreateTags 权限添加到现有策略。

创建用于标记 Spot 队列的 IAM 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 选择 Create role(创建角色)。

  4. Select trusted entity(选择可信实体)页面中,在 Trusted entity type(可信实体类型)下选择 service(Amazon 服务)。

  5. 使用案例下,从其他 Amazon 服务的使用案例中选择 EC2,然后选择 EC2 – 竞价型实例集标记

  6. 选择 Next(下一步)。

  7. 添加权限页面上,选择下一步

  8. Name, review, and create(命名、检查和创建)页面上,对于 Role name(角色名称),输入角色的名称(例如 aws-ec2-spot-fleet-tagging-role)。

  9. 检查此页面上的信息,然后选择 Create role(创建角色)。

防止跨服务混淆座席

混淆代理问题是一个安全问题,即没有执行操作权限的实体可能会迫使更具权限的实体执行该操作。我们建议在 aws-ec2-spot-fleet-tagging-role 信任策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键,以限制竞价型实例集为其他服务提供的资源访问权限。

将 aws:SourceArn 和 aws:SourceAccount 条件键添加到 aws-ec2-spot-fleet-tagging-role 信任策略
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色

  3. 查找您之前创建的 aws-ec2-spot-fleet-tagging-role,然后选择该链接(不是复选框)。

  4. Summary(摘要)下,选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。

  5. 在 JSON 语句中,添加一个包含您的 aws:SourceAccountaws:SourceArn 全局条件上下文键的 Condition 元素,以防止混淆代理人问题,如下所示:

    "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:us-east-1:account_id:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id" }
    注意

    如果 aws:SourceArn 值包含账户 ID,并且您同时使用了这两个全局条件上下文键,则 aws:SourceAccount 值和 aws:SourceArn 值中的账户在同一策略语句中使用时,必须使用相同的账户 ID。

    最终的信任策略将如下所示:

    { "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "spotfleet.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:us-east-1:account_id:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id" } } } }
  6. 选择更新策略

下表提供了 aws:SourceArn 的潜在值,以根据不同的明确程度限制 aws-ec2-spot-fleet-tagging-role 的范围。

API 操作 调用的服务 范围 aws:SourceArn
RequestSpotFleet Amazon STS (AssumeRole) aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限定为指定账户中的竞价型实例集请求。 arn:aws:ec2:*:123456789012:spot-fleet-request/sfr-*
RequestSpotFleet Amazon STS (AssumeRole) aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限定为指定账户和指定区域中的竞价型实例集请求。请注意,此角色将不能在其他区域使用。 arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-*
RequestSpotFleet Amazon STS (AssumeRole) aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限定为仅影响实例集 sfr-11111111-1111-1111-1111-111111111111 的操作。请注意,此角色可能无法用于其他竞价型实例集。此外,此角色不能用于通过请求竞价型实例集来启动任何新的竞价型实例集。 arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-11111111-1111-1111-1111-111111111111

快速创建 Spot 队列请求(控制台)

按照以下步骤快速创建 Spot 队列请求。

使用推荐设置创建 Spot 队列请求(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. Launch parameters(启动参数)下,选择 Manually configure launch parameters(手动配置启动参数)。

  5. 对于 AMI,选择一个 AMI。

  6. Target capacity(目标容量)下,对于 Total target capacity(总目标容量),请指定要请求的单位数。对于单位类型,您可以选择实例vCPU内存(GiB)

  7. 对于 Your fleet request at a glance(您的机群请求概览),查看您的机群配置,然后选择 Launch(启动)。

使用已定义的参数创建 Spot 队列请求(控制台)

您可以使用自己定义的参数创建竞价型实例集。

使用已定义的参数创建 Spot 队列请求(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. 对于启动参数,可以手动配置启动参数,也可以使用启动模板,如下所示:

    1. [手动配置] 要在 Amazon EC2 控制台中定义启动参数,请选择手动配置启动参数,再执行以下操作:

      1. 对于 AMI,选择 Amazon 提供的基本 AMI,或者选择 Search for AMI(搜索 AMI)以使用来自我们用户社群、Amazon Web Services Marketplace 或您自己的 AMI。

        注意

        如果启动参数中指定的 AMI 已注销或禁用,则无法从该 AMI 启动任何新实例。对于设置为维持目标容量的实例集,目标容量将无法维持。

      2. (可选)对于 Key pair name (密钥对名称),选择现有密钥对或新建一个密钥对。

        [现有密钥对] 选择所需的密钥对。

        [新密钥对] 选择创建新密钥对前往密钥对页面。完成之后,返回 Spot Requests(竞价型请求)页面并刷新列表。

      3. (可选)展开 Additional launch parameters(其它启动参数),然后执行以下操作:

        1. (可选)要启用 Amazon EBS 优化,对于 EBS-optimized(EBS 优化),请选择 Launch EBS-optimized instances(启动 EBS 优化实例)。

        2. (可选)要为实例添加临时性块级存储,请对 Instance store (实例存储) 选择 Attach at launch (启动时附加)

        3. (可选)要添加存储,请选择 Add new volume(添加新卷),然后根据实例类型指定其它实例存储卷或 Amazon EBS 卷。

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

        5. (可选)要运行专用 Spot 实例,请为 Tenancy (租期) 选择 Dedicated - run a dedicated instance (专用 – 运行专用实例)

        6. (可选)对于 Security groups (安全组),选择一个或多个安全组,或者新建一个。

          [现有安全组] 选择一个或多个所需的安全组。

          [新安全组] 选择 Create new security group(新建安全组)以前往 Security Groups(安全组)页面。完成之后,返回 Spot Requests(Spot 请求)并刷新列表。

        7. (可选)要能够通过 Internet 访问实例,请对 Auto-assign IPv4 Public IP (自动分配 IPv4 公有 IP) 选择 Enable (启用)

        8. (可选)要使用 IAM 角色启动 Spot 实例,请对 IAM 实例配置文件选择角色。

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

        10. (可选)要添加标签,请选择 Create tag(创建标签),输入标签的键和值,然后选择 Create(创建)。对每个标签重复此操作。

          对于每个标签,要使用相同标签标记实例和竞价型实例集请求,请确保同时选择了 Instance(实例)和 Fleet(机群)。要仅标记由队列启动的实例,清除 Fleet(队列)。要仅标记竞价型实例集请求,请清除 Instance(实例)。

    2. [启动模板] 要使用在启动模板中创建的配置,请选择使用启动模板,再为启动模板选择一个启动模板。

      注意

      如果希望在竞价型实例集中包含按需容量,则必须指定启动模板。

  5. 对于 Additional request details (其他请求详细信息),执行以下操作:

    1. 查看其他请求详细信息。要进行更改,请清除 Apply defaults (应用默认设置)

    2. (可选)对于 IAM fleet role (IAM 队列角色),您可以使用默认角色或选择其他角色。要在更改角色后使用默认角色,请选择 Use default role (使用默认角色)

    3. (可选) 要创建仅在特定时间段内有效的请求,请编辑请求有效起始时间请求有效截止时间

    4. (可选)默认情况下,Amazon EC2 在竞价型实例集会在请求过期时终止竞价型实例。要保持这些实例在请求过期后继续运行,请清除 Terminate the instances when the request expires (请求到期时终止实例)

    5. (可选)要向负载均衡器注册 Spot 实例,请选择 Receive traffic from one or more load balancers (从一个或多个负载均衡器接收流量),然后选择一个或多个经典负载均衡器或目标组。

  6. 对于 Target capacity(目标容量),执行以下操作:

    1. 对于 Total target capacity(总目标容量),请指定要请求的单位数。对于单位类型,您可以选择 Instances(实例)、vCPUMemory (MiB)(内存 (MiB))。要将目标容量指定为 0 以便以后可增加容量,请选择维持目标容量

    2. (可选)对于 Include On-Demand base capacity(包括按需基本容量),请指定要请求的按需单位数。该数字必须小于 Total target capacity (总目标容量)。Amazon EC2 会计算差值,并将差值分配给要请求的 Spot 单位。

      重要

      要指定可选的按需容量,您必须先选择一个启动模板。

    3. (可选)默认情况下,在竞价型实例中断时,Amazon EC2 将终止这些实例。要保持目标容量,请选择保持目标容量。然后,您可以指定 Amazon EC2 在竞价型实例中断时终止、停止或休眠这些实例。为此,请从中断行为中选择相应的选项。

      注意

      如果启动参数中指定的 AMI 已注销或禁用,则无法从该 AMI 启动任何新实例。在这种情况下,对于设置为维持目标容量的实例集,目标容量将无法维持。

    4. (可选)要允许竞价型实例集在系统针对实例集中的现有竞价型实例发出实例再平衡通知时启动替换竞价型实例,请选择 Capacity rebalance(容量再平衡),然后选择实例替换策略。如果选择终止前启动,请指定 Amazon EC2 终止旧实例之前的延迟时间(以秒为单位)。有关更多信息,请参阅 在 EC2 实例集和竞价型实例集中使用“容量再平衡”功能来替换存在风险的竞价型实例

    5. (可选)要控制每小时为队列中所有的 Spot 实例支付的金额,请选择 Set maximum cost for Spot Instances(设置 Spot 实例的最大成本),然后输入您每小时愿意支付的最大总额。当达到最大总额后,即使未达到目标容量,竞价型实例集也会停止启动竞价型实例。有关更多信息,请参阅 为 EC2 实例集或竞价型实例集设置支出限额

  7. 对于 Network(网络),执行以下操作:

    1. 对于 Network (网络),选择现有 VPC 或新建一个。

      [现有 VPC] 选择所需的 VPC。

      [新 VPC] 选择 Create new VPC (新建 VPC) 以前往 Amazon VPC 控制台。完成之后,请返回此屏幕并刷新列表。

    2. (可选)对于可用区,让 Amazon EC2 为竞价型实例选择可用区,或者指定一个或多个可用区。

      如果您在一个可用区中有多个子网,则请从 Subnet (子网) 中选择合适的子网。要添加子网,请选择 Create new subnet (新建子网) 以前往 Amazon VPC 控制台。完成之后,请返回此屏幕并刷新列表。

  8. 对于 Instance type requirements(实例类型要求),可以指定实例属性,然后让 Amazon EC2 使用这些属性识别最佳实例类型,也可以指定实例列表。有关更多信息,请参阅 指定 EC2 实例集或竞价型实例集的实例类型选择属性

    1. 如果选择 Specify instance attributes that match your compute requirements(指定符合计算要求的实例属性),请按如下方式指定实例属性:

      1. 对于 vCPU,请输入所需的最小和最大 vCPU 数。要指定没有限制,请选择没有最小值和/或没有最大值

      2. 对于 Memory (GiB)(内存 (GiB)),输入所需的最小和最大内存量。要指定没有限制,请选择没有最小值和/或没有最大值

      3. (可选)对于其他实例属性,您可以选择指定一个或多个属性来更详细地表达计算要求。每个额外属性都会进一步增加对您的请求的限制。您可以省略其它属性;如果省略,则使用默认值。有关每个属性及其默认值的描述,请参阅 Amazon EC2 命令行参考中的 get-spot-placement-scores

      4. (可选)要查看具有指定属性的实例类型,请展开 Preview matching instance types(预览匹配的实例类型)。要排除在请求中使用的实例类型,请选择实例,然后选择 Exclude selected instance types(排除选定的实例类型)。

    2. 如果选择 Manually select instance types(手动选择实例类型),竞价型实例集将提供实例类型默认列表。要选择更多实例类型,请选择 Add instance types(添加实例类型),选择要在请求中使用的实例类型,然后选择 Select(选择)。要删除实例类型,请选择实例类型,然后选择 Delete(删除)。

  9. 对于分配策略,请选择符合需求的竞价型分配策略和按需型分配策略。有关更多信息,请参阅 使用分配策略确定 EC2 实例集或竞价型实例集如何满足竞价型和按需型容量

  10. 对于 Your fleet request at a glance(您的机群请求概览),查看您的机群配置,并在必要时进行任何调整。

  11. (可选)要下载一个启动配置副本以用于 Amazon CLI,请选择 JSON config (JSON 配置)

  12. 准备好启动竞价型实例集后,请选择启动

    竞价型实例集请求类型为 fleet。执行请求后,系统会添加请求类型 instance,此时其状态为 activefulfilled

使用 Amazon CLI 创建竞价型实例集

使用 Amazon CLI 创建竞价型实例集请求

使用 request-spot-fleet 命令可创建 Spot 队列请求。

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

有关示例配置文件,请参阅竞价型实例集 CLI 配置示例

下面是示例输出:

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

创建竞价型实例集来替换运行状况不佳的竞价型实例

竞价型实例集每 2 分钟检查一次队列中竞价型实例的运行状况。实例的运行状况为 healthyunhealthy

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

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

要求
  • 只有在保持目标容量(类型 maintain 的队列)的情况下 Spot 队列 才支持运行状况检查替换,而不支持一次性 Spot 队列(类型 request 的队列)。

  • 仅对竞价型实例支持运行状况检查替换。对于 按需型实例 不支持此功能。

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

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

Console
使用控制台配置竞价型实例集以替换运行状况不佳的竞价型实例
  1. 使用已定义的参数创建 Spot 队列请求(控制台)中创建竞价型实例集的步骤操作。

  2. 要将实例集配置为替换运行状况不佳的竞价型实例,请展开其他启动参数,然后在运行状况检查下选择替换运行状况不佳的实例。要启用此选项,您必须先选择 Maintain target capacity (保持目标容量)

Amazon CLI
使用 Amazon CLI 配置竞价型实例集以替换运行状况不佳的竞价型实例
  1. 使用 Amazon CLI 创建竞价型实例集中创建竞价型实例集的步骤操作。

  2. 要配置队列以替换运行状况不佳的 Spot 实例,对于 ReplaceUnhealthyInstances,请输入 true