使用基于属性的实例类型选择创建一个混合实例组 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用基于属性的实例类型选择创建一个混合实例组

在创建混合实例组时手动选择实例类型有一个替代方法,您可以指定一组用于描述计算要求的实例属性。当 Amazon EC2 Auto Scaling 启动实例时,Auto Scaling 组使用的所有实例类型都必须与您所需实例的属性匹配。这称为基于属性的实例类型选择

这种方法非常适合于可以灵活处理所使用实例类型的工作负载和框架,例如容器、大数据和 CI/CD。

选择基于属性的实例类型具有以下优势:

  • Amazon EC2 Auto Scaling 可以从各种实例类型中进行选择,从而启动竞价型实例。这是符合灵活处理实例类型的竞价型实例的最佳实践,可以使得 Amazon EC2 竞价型服务有更好的机会查找和分配所需的计算容量。

  • 因为可供选择的选项如此之多,为您的工作负载找到合适的实例类型可能会非常耗时。通过指定实例属性,您可以在配置混合实例组时简化实例类型的选择。

  • 您的 Auto Scaling 组可以在发布新一代实例类型时就对其进行采用。新一代实例类型将自动投入使用,如果它们符合您的要求并与您为 Auto Scaling 组选择的分配策略保持一致。

基于属性的实例类型选择的工作原理

通过基于属性的实例类型选择,您可以提供实例所需的实例属性列表,而不是提供特定实例类型的列表,例如:

  • vCPU 计数-每个实例的最小和最大 vCPU 数量。

  • 内存-每个实例的最小 GiBs 和最大内存。

  • 本地存储-是使用 EBS 还是实例存储卷作为本地存储。

  • 突发性能-是否使用 T 实例系列,包括 t4g、t3a、T3 和 T2 类型。

有许多选项可用于定义您的实例要求。有关每个选项和默认值的描述,请参阅InstanceRequirementsAmazon EC2 Auto Scaling API 参考》。

当您的 Auto Scaling 组需要启动实例时,它将搜索与您的指定属性相匹配且在该可用区域中可用的实例类型。然后,分配策略决定启动哪种匹配的实例类型。默认情况下,基于属性的实例类型选择启用了价格保护功能,以防止您的 Auto Scaling 组启动超过预算阈值的实例类型。

默认情况下,在设置 Auto Scaling 组的所需容量时,使用实例数量作为计量单位,这意味着每个实例计为一个单位。

此外,您可以将所需容量的值设置为 vCPU 的数量或内存量。为此,请在或 UpdateAutoScalingGroup API 操作中使用Amazon Web Services Management Console或DesiredCapacityType属性的所需容量类型下拉字段。CreateAutoScalingGroup然后,Amazon EC2 Auto Scaling 会启动满足所需的 vCPU 或内存容量所需的实例数量。例如,如果您使用 vCPU 作为所需的容量类型,并使用每个实例具有 2 个 vCPU,则所需容量为 10 个 vCPU 将启动 5 个实例。这是实例权重的实用替代方案。

价格保护

借助价格保护,您可以指定您愿意为由 Auto Scaling 组启动的 EC2 实例支付的最高价格。价格保护功能可防止您的 Auto Scaling 组使用您认为过于昂贵的实例类型,即使它们恰好符合您指定的属性。

默认情况下,价格保护处于启用状态,按需实例和竞价型实例具有单独的价格门槛。当 Amazon EC2 Auto Scaling 需要启动新实例时,任何定价高于相关阈值的实例类型都不会启动。

按需价格保护

对于按需实例,您可以将愿意支付的最高按需价格定义为高于已确定的按需价格 [OnDemandMaxPricePercentageOverLowestPrice] 的百分比。确定的按需价格是具有您指定属性的当前一代 C、M 或 R 实例类型的最低价格。

如果未明确定义按需价格保护值,则将使用比确定的按需价格高 20% 的默认按需最高价格。

现货价格保护

对于竞价型实例,您可以将愿意支付的最高竞价价格定义为以下选项之一:

  • 已确定的按需价格的百分比 [MaxSpotPriceAsPercentageOfOptimalOnDemandPrice](推荐)— 确定的按需价格是具有您指定属性的当前一代 C、M 或 R 实例类型的最低价格。

  • 比已确定的竞价价格高出一个百分比 [SpotMaxPricePercentageOverLowestPrice] — 已确定的竞价价格是具有您指定属性的当前一代 C、M 或 R 实例类型的最低价格。我们不建议使用此选项,因为现货价格可能会波动,因此您的价格保护阈值也可能会波动。

如果两个选项都没有明确定义,则将使用比已确定的现货价格高 100% 的默认最高现货价格

自定义价格保护

您可以在 Amazon EC2 Auto Scaling 控制台中或使用Amazon CLI或软件开发工具包自定义价格保护阈值。

  • 在控制台中,使用其他实例属性中的按需价格保护和竞价价格保护设置。

  • InstanceRequirements结构中,要指定按需实例价格保护阈值,请使用OnDemandMaxPricePercentageOverLowestPrice属性。要指定竞价型实例价格保护阈值,请使用MaxSpotPriceAsPercentageOfOptimalOnDemandPrice(推荐)或SpotMaxPricePercentageOverLowestPrice属性。

如果您将 “所需容量类型” (DesiredCapacityType) 设置为 vCPU内存 GiB,则价格保护将根据每个 vCPU 或每个内存的价格而非每个实例的价格适用。

您也可以关闭价格保护。要表示没有价格保护阈值,请指定一个较高的百分比值,例如999999

注意

如果当前一代 C、M 或 R 实例类型均不符合您的指定属性,则价格保护仍然适用。如果找不到匹配项,则标识的价格来自价格最低的当前一代实例类型,如果没有,则是价格最低的前一代实例类型,与您的属性相匹配。

先决条件

使用基于属性的实例类型选择创建混合实例组(控制台)

通过以下过程使用基于属性的实例类型选择创建混合实例组。为了帮助您高效地完成这些步骤,我们跳过了一些可选部分。

对于大多数通用型工作负载,指定您所需要的 vCPU 和内存数量就足够了。对于高级使用案例,您可以指定存储类型、网络接口、CPU 制造商和加速器类型等属性。

要查看混合实例组的最佳实践,请参阅设置概述

创建一个混合实例组
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 在屏幕顶部的导航栏中,选择在创建启动模板时使用的同一 Amazon Web Services 区域。

  3. 选择 Create an Auto Scaling group (创建 Auto Scaling 组)。

  4. 选择启动模板或配置页面上,对于 Auto Scaling 组名称,输入 Auto Scaling 组的名称。

  5. 要选择启动模板,请执行以下操作:

    1. 对于启动模板,请选择现有启动模板。

    2. 对于 Launch template version(启动模板版本),选择 Auto Scaling 组在扩展时使用启动模板的默认版本、最新版本还是特定版本。

    3. 验证您的启动模板是否支持您计划使用的所有选项,然后选择下一步

  6. 选择实例启动选项页面上,执行以下操作:

    1. 对于 Instance type requirements(实例类型要求),请选择 Override launch template(覆盖启动模板)。

      注意

      如果您选择了某个已经包含一组实例属性(例如 vCPU 和内存)的启动模板,那么将显示实例属性。这些属性将被添加到自动扩缩组属性中,您可以随时通过 Amazon EC2 Auto Scaling 控制台更新这些属性。

    2. Specify instance attributes(指定实例属性)下,首先输入 vCPU 和内存要求。

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

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

    3. (可选)对于 Additional instance attributes(其它实例属性),您可以选择指定一个或多个属性以更详细地表达计算要求。每个额外属性都会进一步增加对您的请求的限制。

    4. 展开预览匹配的实例类型,查看具有您指定属性的实例类型。

    5. 实例购买选项下,对于 实例分配,指定要启动的按需型实例和竞价型实例在该组中所占的百分比。如果您的应用程序无状态、容错,并且可以处理中断的实例,则可以指定更高的竞价型实例百分比。

    6. (可选)如果您指定了一个竞价型实例百分比,请选中包括按需型基本容量旁边的复选框,然后指定按需型实例在自动扩缩组的最小初始容量中必须达到的数量。超出基本容量的任何内容都使用百分比来确定要启动多少按需实例和 Spot 实例。

    7. Allocation strategies(分配策略)下,已为 On-Demand allocation strategy(按需分配策略)自动选择 Lowest price(最低价格),无法对其进行更改。

    8. 对于 Spot allocation strategy(竞价型分配策略),选择分配策略。默认情况下,将选择 Price capacity optimized(价格容量优化)。默认情况下,将隐藏 Lowest price(最低价格),仅在您选择 Show all strategies(显示所有策略)时才会出现。如果您选择最低价格,则请输入价格最低的池的数量,以跨价格最低的池实现多样化。

    9. 对于容量再平衡,选择启用还是禁用容量再平衡。使用容量再平衡功能,以自动响应竞价型实例因竞价中断而即将终止的情况。有关更多信息,请参见 使用容量重新平衡来处理 Amazon EC2 竞价型实例中断

    10. Network (网络) 下,对于 VPC,选择相应的 VPC。自动扩缩组必须与您在启动模板中指定的安全组创建在相同的 VPC 中。

    11. 对于 Availability Zones and subnets (可用区和子网),选择指定 VPC 中的一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关更多信息,请参见 选择 VPC 子网时的注意事项

    12. 选择下一步下一步

  7. 对于 Configure group size and scaling policies(配置组大小和扩缩策略)步骤,请执行以下操作:

    1. 如果您希望以实例以外的其他单位来衡量所需容量,请为组大小所需容量类型选择合适的选项。支持 Units(单位)、vCPUs(vCPU 数)和 Memory GiB(内存 GiB)。默认情况下,Amazon EC2 Auto Scaling 指会定 Units(单位),这会用实例数量来衡量。

    2. 为自动扩缩组设置初始 所需容量

    3. 扩展部分的扩展限制下,如果所需容量的新值大于所需的最小容量最大所需容量,则所需的最大容量将自动增加到新的所需容量值。您可以按需更改这些限制。有关更多信息,请参见 为自动扩缩组设置扩缩限制

  8. 选择 Skip to review (跳转以查看)。

  9. Review(查看)页面上,选择 Create Auto Scaling group(创建 Auto Scaling 组)。

使用基于属性的实例类型选择创建混合实例组 () Amazon CLI

使用命令行创建一个混合实例组

使用以下命令之一:

示例配置

要使用创建具有基于属性的实例类型选择的 Auto Scaling 组Amazon CLI,请使用以下create-auto-scaling-group命令。

指定了以下实例属性:

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

  • MemoryMiB – 实例类型的最小内存必须为 16384 MiB。

  • CpuManufacturers - 实例类型必须具有英特尔制造的 CPU。

aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

下面是一个 config.json 示例文件。

{ "AutoScalingGroupName": "my-asg", "DesiredCapacityType": "units", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": {"Min": 4, "Max": 8}, "MemoryMiB": {"Min": 16384}, "CpuManufacturers": ["intel"] } }] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "price-capacity-optimized" } }, "MinSize": 0, "MaxSize": 100, "DesiredCapacity": 4, "DesiredCapacityType": "units", "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 "DesiredCapacityType": "vcpu""DesiredCapacityType": "memory-mib"。默认的所需容量类型为 units,它将所需容量的值设置为实例数。

或者,您可以使用以下create-auto-scaling-group命令创建 Auto Scaling 组。这将引用 YAML 文件作为自动扩缩组的唯一参数。

aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml

下面是一个 config.yaml 示例文件。

--- AutoScalingGroupName: my-asg DesiredCapacityType: units MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceRequirements: VCpuCount: Min: 2 Max: 4 MemoryMiB: Min: 2048 CpuManufacturers: - intel InstancesDistribution: OnDemandPercentageAboveBaseCapacity: 50 SpotAllocationStrategy: price-capacity-optimized MinSize: 0 MaxSize: 100 DesiredCapacity: 4 DesiredCapacityType: units VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

要将所需容量的值设置为 vCPU 的数量或内存量,请在文件中指定 DesiredCapacityType: vcpuDesiredCapacityType: memory-mib。默认的所需容量类型为 units,它将所需容量的值设置为实例数。

预览您的实例类型

您可以预览符合计算要求的实例类型而无需启动它们,并在必要时调整要求。在 Amazon EC2 Auto Scaling 控制台中创建 Auto Scaling 组时,实例类型的预览将显示在 Choose instance launch options(选择实例启动选项)页面的 Preview matching instance types(预览匹配的实例类型)部分中。

或者,您可以使用Amazon CLI或软件开发工具包调用 Amazon EC2 GetInstanceTypesFromInstanceRequirementsAPI 来预览实例类型。在请求中传递 InstanceRequirements 参数,其格式与用于创建或更新 Auto Scaling 组的格式一致。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的预览具有指定属性的实例类型

要详细了解基于属性的实例类型选择,请参阅 Amazon 博客中的适用于 EC2 Auto Scaling 和 EC2 机群的基于属性的实例类型选择

当您使用 Amazon CloudFormation 创建一个自动缩放组时,您可以声明基于属性的实例类型选择。有关更多信息,请参阅 Amazon CloudFormation 用户指南中的 自动扩缩模板片段部分中的示例片段。