竞价放置分数 - Amazon Elastic Compute Cloud

竞价放置分数

竞价放置分数功能可以根据您的竞价容量需求推荐一个AWS区域或可用区。竞价型容量会发生波动,所以您无法确保始终获得所需的容量。竞价放置分数表示竞价请求在某个区域或可用区中获得成功的可能性。

注意

竞价放置分数不能提供在可用容量或中断风险方面的任何保证。竞价放置分数仅可作为建议使用。

优点

您可以使用竞价放置分数功能完成以下操作:

  • 根据需要将竞价型计算容量重新定位和扩展到不同区域,以应对当前区域内的容量需求增加或可用容量减少。

  • 确定在其中运行单个可用区工作负载的最佳可用区。

  • 模拟未来的竞价型容量需求,以便您可以选择一个最佳区域来扩展基于竞价的工作负载。

  • 确定实例类型的最佳组合以满足竞价容量需求。

成本

使用竞价放置分数功能不会收取任何额外费用。

竞价放置分数的工作原理

在使用竞价放置分数功能时,您先指定竞价型实例的计算要求,然后 Amazon EC2 会返回竞价请求可能成功的前 10 个区域或可用区。每个区域或可用区的评分范围为 1 到 10,其中 10 表示竞价请求的成功性较高,1 则表示竞价请求的成功性较低。

步骤 1:指定竞价需求

首先,请指定所需的目标竞价容量和计算要求,如下所示:

  1. 指定目标竞价容量,也可以选择目标容量单位。

    您可以根据实例数或 vCPU 数,或者根据以 MiB 为单位的内存量来指定所需的目标竞价容量。若根据 vCPU 数或内存量来指定目标容量,则必须将目标容量单位指定为 vcpumemory-mib。否则即默认为实例数。

    若根据 vCPU 数或内存量指定目标容量,则您可以在计算总容量时使用这些单位。例如,若要混合使用不同大小的实例,则可以将目标容量指定为 vCPU 的总数。然后竞价放置分数功能会根据 vCPU 数来考虑请求中的每种实例类型,并计算 vCPU 总数,而不是在合计目标容量时计算实例总数。

    例如,假设您指定的总目标容量为 30 个 vCPU,并且您的实例类型列表中包括 c5.xlarge(4 个 vCPU)、m5.2xlarge(8 个 vCPU)和 r5.large(2 个 vCPU)。若要实现总计 30 个 vCPU,则您可以获得 2 个 c5.xlarge(2*4 vCPU)、2 个 m5.2xlarge(2*8 个 vCPU)和 3 个 r5.large(3*2 个 vCPU)的组成。

  2. 指定实例类型或实例属性。

    您可以指定所用的实例类型,也可以指定计算要求所需的实例属性,然后由 Amazon EC2 来确定具有这些属性的实例类型。这称为基于属性的实例类型选择。

    您无法在同一竞价放置分数请求中同时指定实例类型和实例属性。

    如果您指定实例类型,则必须至少指定三种不同的实例类型,否则 Amazon EC2 将返回较低的竞价放置分数。同样,如果您指定实例属性,则其必须解析为至少三种不同的实例类型。

有关指定竞价需求的不同方法的示例,请参阅 示例配置

步骤 2:筛选竞价放置分数响应

Amazon EC2 计算每个区域或可用区的竞价放置分数,并返回您的竞价请求可能成功的前 10 个区域或前 10 个可用区。默认为返回已评分区域的列表。如果您计划在单个可用区中启动所有竞价容量,那么请求一个已评分的可用区列表会非常有帮助。

您可以指定一个区域筛选器,以缩小将在响应中返回的区域。

您可以将区域筛选条件和已计分的可用区域的请求结合使用。通过这种方式,已评分的可用区就会被限制为已筛选的区域之中。若要查找某个区域中得分最高的可用区,请仅指定该区域,则响应将返回该区域中所有可用区的评分列表。

步骤 3:审查建议

每个区域或可用区的竞价放置分数是根据目标容量、实例类型的组成、历史和当前竞价使用趋势以及请求的时间来计算的。由于竞价容量不断波动,因此在不同时间计算同一竞价放置分数请求时,可能会产生不同的分数。

区域和可用区的评分范围为 1 至 10。分数为 10 表示您的竞价请求具有较高的成功性(但不能保证)。分数为 1 则表示您的竞价请求几乎没有成功的可能。即使是不同的区域或可用区,也可能会返回相同的分数。

如果返回的分数较低,则您可以编辑计算要求并重新计算分数。您还可以在一天中的不同时间为同一个计算要求请求竞价放置分数建议。

步骤 4:采纳建议

只有在竞价请求具有与竞价放置分数配置(目标容量、目标容量单位和实例类型或实例属性)完全相同的配置时,竞价放置分数才是相关的,并且被配置为使用 capacity-optimized 分配策略。否则,获得可用竞价型容量的可能性将与分数不一致。

尽管竞价放置分数可作为指导,但无法保证完全或部分满足您的竞价请求,所以您可以使用以下信息来获得最佳结果:

  • 使用相同的配置 – 仅当 Auto Scaling 组、EC2 机群或竞价型实例集中的竞价请求配置(目标容量、目标容量单位、实例类型或实例属性)与您为了获取竞价放置分数而输入的配置相同时,竞价放置分数才是相关的。

    如果您在竞价放置分数请求中使用了基于属性的实例类型选择,就可以使用基于属性的实例类型选择来配置 Auto Scaling 组、EC2 机群或竞价型实例集。有关更多信息,请参阅创建具有关于所用实例类型的一组要求的 Auto Scaling 组EC2 机群的基于属性的实例类型选择竞价型实例集的基于属性的实例类型选择

    注意

    如果您根据 vCPU 数或内存量指定了目标容量,并且在竞价放置分数配置中指定了实例类型,那么请注意,您当前无法在 Auto Scaling 组、EC2 机群或竞价型实例集中创建此配置。相反,您必须使用 WeightedCapacity 参数来手动设置实例权重。

  • 使用 capacity-optimized 分配策略 – 任何分数都假定您的实例集请求将被配置为使用所有可用区(用于跨区域请求容量)或单个可用区(若在一个可用区中请求容量)和用于成功请求竞价容量的 capacity-optimized 竞价型分配策略。如果您使用其它分配策略,例如 lowest-price,则获得竞价容量的可能性会与分数不一致。

  • 立即根据分数采取行动 – 竞价放置分数建议反映了请求时的可用竞价容量,由于竞价容量会发生波动,所以在不同时间计算相同的配置可能会得到不同的分数。尽管 10 分意味着竞价型容量请求具有较高的成功性,但不能保证成功,所以为了获得最佳效果,我们建议您立即根据分数采取行动。我们还建议您在每次尝试请求容量时都获取新的分数。

限制

  • 目标容量限制 – 您的竞价放置分数目标容量限制取决于您最近的竞价用量,并同时考虑潜在的使用量增长。如果您最近没有产生竞价用量,那么我们会为您提供一个较低的默认限制,这个默认限制与您的竞价请求限制一致。

  • 请求配置限制 – 如果我们检测到与竞价放置分数功能的预期用途无关的模式,则我们可以限制 24 小时内的新请求配置的数量。如果达到限制,则可以重试曾使用过的请求配置,但在下一个 24 小时期间之前,您无法指定新的请求配置。

  • 实例类型的最小数量 – 如果您指定实例类型,则必须指定至少三种不同的实例类型,否则 Amazon EC2 将返回较低的竞价放置分数。同样,如果您指定实例属性,则其必须解析为至少三种不同的实例类型。如果实例类型的名称不同,则被视为不同的实例类型。例如,m5.8xlarge、m5a.8xlarge 和 m5.12xlarge 都会被视作不同的实例类型。

所需的 IAM 权限

默认情况下,IAM 身份(用户、角色或组)不具备使用竞价放置分数功能的权限。如需允许 IAM 身份使用竞价放置分数功能,则您必须创建一个 IAM policy,以授予其使用 ec2:GetSpotPlacementScores EC2 API 操作的权限。然后,将策略附加到需要此权限的 IAM 身份。

以下为授予使用 ec2:GetSpotPlacementScores EC2 API 操作权限的 IAM policy 的示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:GetSpotPlacementScores", "Resource": "*" } ] }

有关编辑 IAM policy 的信息,请参阅 IAM 用户指南中的编辑 IAM policy

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

计算竞价放置分数

您可以使用 Amazon EC2 控制台或 AWS CLI 来计算竞价放置分数。

通过指定实例属性来计算竞价放置分数(控制台)

如需通过指定实例属性来计算竞价放置分数
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 选择 Spot placement score(竞价放置分数)。

  4. 选择 Enter requirements(输入要求)。

  5. 对于 Target capacity(目标容量),请根据 instances(实例)或 vCPUs (vCPU) 的数量或者根据 memory (MiB)(内存 (MiB))的数量来输入所需的容量。

  6. 对于 Instance type requirements(实例类型要求),如需指定您的计算要求并使 Amazon EC2 识别符合这些要求的最佳实例类型,请选择 Specify instance attributes that match your compute requirements(指定符合计算要求的实例属性)。

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

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

  9. 对于 CPU architecture(CPU 架构),选择所需的实例架构。

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

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

  12. 选择 Load placement scores(加载放置分数),并审查结果。

  13. (可选)要显示特定区域的竞价放置分数,请对于 Regions to evaluate(要评估的区域),选择要评估的区域,然后选择 Calculate placement scores(计算放置分数)。

  14. (可选)要在显示的区域中显示可用区的竞价放置分数,请选择 Provide placement scores per Availability Zone(提供每个可用区的放置分数)复选框。如果您希望在单个可用区中启动所有竞价容量,那么一个已评分的可用区列表会非常有帮助。

  15. (可选)如需编辑计算要求并获得新的放置分数,请选择 Edit(编辑)以进行必要的调整,然后选择 Calculate placement scores(计算放置分数)。

通过指定实例类型来计算竞价放置分数(控制台)

如需通过指定实例类型来计算竞价放置分数
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 选择 Spot placement score(竞价放置分数)。

  4. 选择 Enter requirements(输入要求)。

  5. 对于 Target capacity(目标容量),请根据 instances(实例)或 vCPUs (vCPU) 的数量或者根据 memory (MiB)(内存 (MiB))的数量来输入所需的容量。

  6. 对于 Instance type requirements(实例类型要求),如需指定要使用的实例类型,请选择 Manually select instance types(手动选择实例类型)。

  7. 选择 Select instance types(选择实例类型),选择要使用的实例类型,然后选择 Select(选择)。如需快速查找实例类型,您可以使用筛选条件来按不同属性筛选实例类型。

  8. 选择 Load placement scores(加载放置分数),并审查结果。

  9. (可选)要显示特定区域的竞价放置分数,请对于 Regions to evaluate(要评估的区域),选择要评估的区域,然后选择 Calculate placement scores(计算放置分数)。

  10. (可选)要在显示的区域中显示可用区的竞价放置分数,请选择 Provide placement scores per Availability Zone(提供每个可用区的放置分数)复选框。如果您希望在单个可用区中启动所有竞价容量,那么一个已评分的可用区列表会非常有帮助。

  11. (可选)如需编辑实例类型列表并获得新的放置分数,请选择 Edit(编辑)以进行必要的调整,然后选择 Calculate placement scores(计算放置分数)。

计算竞价放置分数 (AWS CLI)

如需计算竞价放置分数
  1. (可选)如需生成所有可以指定为竞价放置分数配置参数,请使用 get-spot-placement-scores 命令和 --generate-cli-skeleton 参数。

    aws ec2 get-spot-placement-scores \ --region us-east-1 \ --generate-cli-skeleton

    预期输出

    { "InstanceTypes": [ "" ], "TargetCapacity": 0, "TargetCapacityUnitType": "vcpu", "SingleAvailabilityZone": true, "RegionNames": [ "" ], "InstanceRequirementsWithMetadata": { "ArchitectureTypes": [ "x86_64_mac" ], "VirtualizationTypes": [ "hvm" ], "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "amd" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "previous" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "excluded", "BurstablePerformance": "excluded", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "included", "LocalStorageTypes": [ "hdd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "fpga" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "amd" ], "AcceleratorNames": [ "vu9p" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 } } }, "DryRun": true, "MaxResults": 0, "NextToken": "" }
  2. 使用上一步的输出创建 JSON 配置文件,然后按如下方式进行配置:

    1. 对于 TargetCapacity(目标容量),请根据 instances(实例)或 vCPUs (vCPU) 的数量或者根据 memory (MiB)(内存 (MiB))的数量来输入所需的容量。

    2. 对于 TargetCapacityUnitType,请输入目标容量的单位。如果省略此参数,则默认为 units

      有效值:units(转换为实例数)| vcpu | memory-mib

    3. 对于 SingleAvailabilityZone(单个可用区),请指定 true 以获得返回已评分的可用区列表的响应。如果您希望在单个可用区中启动所有竞价容量,那么一个已评分的可用区列表会非常有帮助。如果省略此参数,则默认为 false,然后响应会返回一个已评分区域的列表

    4. (可选)对于 RegionNames,请指定要用作筛选条件的区域。此处必须指定区域代码,例如 us-east-1

      使用区域筛选条件后,响应将仅返回您指定的区域。若将 SingleAvailabilityZone 指定为 true,则响应仅返回指定区域中的可用区。

    5. 配置中可以包括 InstanceTypes(实例类型)或 InstanceRequirements(实例要求),但两者不可同时包含于同一配置中。

      在 JSON 配置中指定以下之一:

      • 如需指定实例类型列表,请指定 InstanceTypes 参数中的实例类型。指定至少三种不同的实例类型。若只指定了一种或两种实例类型,则竞价放置分数将返回一个较低的分数。有关实例类型的列表,请参阅 Amazon EC2 实例类型

      • 如需指定实例属性以便 Amazon EC2 识别与这些属性匹配的实例类型,请指定位于 InstanceRequirements(实例要求)结构中的属性。

        必须提供 VCpuCountMemoryMiBCpuManufacturers 的值。您可以省略其它属性;如果省略,则使用默认值。有关每个属性及其默认值的描述,请参阅 Amazon EC2 命令行参考中的 get-spot-placement-scores

      有关示例配置,请参阅 示例配置

  3. 若要获取您在 JSON 文件中指定的要求的竞价放置分数,请使用 get-spot-placement-scores 命令,然后使用 --cli-input-json 参数为 JSON 文件指定名称和路径。

    aws ec2 get-spot-placement-scores \ --region us-east-1 \ --cli-input-json file://file_name.json

    如果 SingleAvailabilityZone 被设置为 false 或省略(省略即默认为 false)时的输出示例 – 返回区域的评分列表

    "SpotPlacementScores": [ { "Region": "us-east-1", "Score": 7 }, { "Region": "us-west-1", "Score": 5 }, ...

    如果 SingleAvailabilityZone 被设置为 true 时的输出示例 – 返回可用区的评分列表

    "SpotPlacementScores": [ { "Region": "us-east-1", "AvailabilityZoneId": "use1-az1" "Score": 8 }, { "Region": "us-east-1", "AvailabilityZoneId": "usw2-az3" "Score": 6 }, ...

示例配置

使用 AWS CLI,您可以使用以下示例配置。

示例:指定实例类型和目标容量

以下示例配置指定了三种不同的实例类型和 500 个竞价型实例的目标竞价容量。

{ "InstanceTypes": [ "m5.4xlarge", "r5.2xlarge", "m4.4xlarge" ], "TargetCapacity": 500 }

示例:根据内存指定实例类型和目标容量

以下示例配置指定了三种不同的实例类型和 500000MiB 内存的目标竞价容量,其中要启动的竞价型实例数必须能够提供总计 500000MiB 的内存。

{ "InstanceTypes": [ "m5.4xlarge", "r5.2xlarge", "m4.4xlarge" ], "TargetCapacity": 500000, "TargetCapacityUnitType": "memory-mib" }

示例:为基于属性的实例类型选择指定属性

以下示例配置是针对基于属性的实例类型选择而进行的配置,以及该示例配置的文本说明。

{ "TargetCapacity": 5000, "TargetCapacityUnitType": "vcpu", "InstanceRequirementsWithMetadata": { "ArchitectureTypes": ["arm64"], "VirtualizationTypes": ["hvm"], "InstanceRequirements": { "VCpuCount": { "Min": 1, "Max": 12 }, "MemoryMiB": { "Min": 512 } } } }
InstanceRequirementsWithMetadata

要使用基于属性的实例类型选择,您必须在配置中包括 InstanceRequirementsWithMetadata 结构,并为竞价型实例指定所需的属性。

在上述示例中,指定了以下必要实例属性:

  • ArchitectureTypes – 实例类型的架构类型必须为 arm64

  • VirtualizationTypes – 实例类型的虚拟化类型必须为 hvm

  • VCpuCount – 实例类型的 vCPU 数量必须最少为 1 个,最多为 12 个。

  • MemoryMiB – 实例类型的最小内存必须为 512MiB。若省略 Max 参数,则表示没有最大限制。

请注意,您可以指定其它几个可选属性。有关属性列表,请参阅 Amazon EC2 命令行参考中的 get-spot-placement-scores

TargetCapacityUnitType

TargetCapacityUnitType 参数为目标容量指定单位。在该示例中,目标容量是 5000,目标容量单位类型是 vcpu,它们共同指定了所需的 5000 个 vCPU 目标容量,其中要启动的竞价型实例数必须能够提供总计 5000 个 vCPU。

示例:为基于属性的实例类型选择指定属性并返回可用区的评分列表

以下示例配置是针对基于属性的实例类型选择而进行的配置。若指定 "SingleAvailabilityZone": true,则响应将返回已评分的可用区列表。

{ "TargetCapacity": 1000, "TargetCapacityUnitType": "vcpu", "SingleAvailabilityZone": true, "InstanceRequirementsWithMetadata": { "ArchitectureTypes": ["arm64"], "VirtualizationTypes": ["hvm"], "InstanceRequirements": { "VCpuCount": { "Min": 1, "Max": 12 }, "MemoryMiB": { "Min": 512 } } } }