Auto Scaling 具有多个实例类型和购买选项的 组 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Auto Scaling 具有多个实例类型和购买选项的 组

您可以启动并自动扩展单个 Auto Scaling 组中的一组按需实例和 Spot 实例。除了享受使用 Spot 实例的折扣外,您还可以使用预留实例或 Savings Plan 获得常规按需实例定价的折扣费率。所有这些因素共同帮助您优化 EC2 实例的成本节省,同时确保为您的应用程序获得所需的规模和性能。

首先在一个启动模板中指定常用配置参数,并在创建 Auto Scaling 组时选择该模板。当您配置 Auto Scaling 组时,您可以:

  • 为组选择一个或多个实例类型(可以选择性地覆盖启动模板指定的实例类型)。

  • 定义多个启动模板以允许不同 CPU 架构(例如,Arm 和 x86的实例在同一Auto Scaling组中启动。

  • 为每个实例类型分配一个单独的权重。例如,如果实例类型提供不同的 vCPU、内存、存储或网络带宽功能,执行此操作可能很有用。

  • 确定可从 Savings Plan 或 预留实例折扣定价中受益的实例类型的优先级。

  • 指定要启动的按需容量和 Spot 容量,并指定可选的按需容量基本部分。

  • 定义 Amazon EC2 Auto Scaling 应如何在实例类型之间分配 Spot 容量。

  • 启用容量重新平衡。当您启用容量重新平衡时, 会在 Amazon EC2 Auto Scaling Spot 服务通知 Spot 实例发生更高的中断风险时Amazon EC2尝试启动 Spot 实例。启动新实例后,它会终止旧实例。有关更多信息,请参阅Amazon EC2 Auto Scaling 容量重新平衡.

通过跨多个可用区中运行的多个实例类型部署应用程序以提高可用性。您只能使用一种实例类型,但最佳做法是使用几种实例类型,以便 Amazon EC2 Auto Scaling 在您选择的可用区中实例容量不足的情况下启动另一种实例类型。对于 Spot 实例,如果实例容量不足,Amazon EC2 Auto Scaling 继续尝试其他 Spot 实例池(取决于您选择的实例类型和分配策略),而不是启动按需实例,以便您可以利用 Spot 实例节省的成本。

分配策略

以下分配策略确定 Auto Scaling 组如何从可能的实例类型满足您的按需和 Spot 容量

Amazon EC2 Auto Scaling 首先会尝试确保您的实例在您指定的可用区之间均匀平衡。然后,它根据指定的分配策略启动实例类型。

按需实例

按需实例的分配策略是 prioritized。Amazon EC2 Auto Scaling 使用启动模板覆盖列表中的实例类型顺序,确定在满足按需容量时应首先使用哪一实例类型。例如,假设您按以下顺序指定了三个启动模板覆盖c5.large:、 c4.largec3.large。 启动按需实例时, Auto Scaling 组先从 c5.large、、 开始满足按需容量c4.largec3.large

管理按需实例的优先级顺序时,请考虑以下事项:

您可以使用 Savings Plans 或 预留实例预先支付使用费用,以获得按需实例的大幅折扣。有关 Savings Plans 或预留实例的更多信息,请参阅 Amazon EC2 定价页面。

  • 对于预留实例,如果 Amazon EC2 Auto Scaling 启动匹配的实例类型,则适用常规按需实例定价的折扣价。这意味着,如果存在未使用的 c4.large 预留实例,则可以设置实例类型优先级,将预留实例的最高优先级赋予 c4.large 实例类型。当 c4.large 实例启动时,您可享受预留实例定价。

  • 通过 Savings Plans,当您使用 Amazon EC2 实例 Savings Plans 或计算 Savings Plans. 时,将适用常规按需实例定价的折扣价。由于 Savings Plans 的灵活特性,您可以更灵活地确定实例类型的优先级。只要您使用 Savings Plan 涵盖的实例类型,就可以按任意优先级顺序设置它们,甚至可以偶尔完全更改它们的顺序,并继续享受由 Savings Plan. 提供的折扣价。要了解有关 Savings Plans 的更多信息,请参阅 Savings Plans 用户指南.

Spot 实例

Amazon EC2 Auto Scaling 提供了两种类型的分配策略可用于 Spot 实例:

capacity-optimized

Amazon EC2 Auto Scaling 可以从 Spot 实例池中分配实例,并为启动的实例数量提供最佳容量。通过这种方式部署可帮助您最高效地使用剩余 EC2 容量。

使用 Spot 实例,定价会根据长期供需趋势缓慢发生变化,但容量会实时波动。该 capacity-optimized 策略通过查看实时容量数据并预测可用性最高的池,自动在可用性最高的池中启动 Spot 实例。这适用于大数据和分析、图像和媒体渲染以及机器学习等工作负载。它也适用于高性能计算,这些计算可能会因重启工作和检查点而产生更高的中断成本。通过实现更低的中断可能性,capacity-optimized 策略可以降低您工作负载的整体成本。

lowest-price

Amazon EC2 Auto Scaling 从您指定数量 (N) 的 Spot 实例池以及在满足需求时单价最低的池中分配您的实例。

例如,如果您指定 4 个实例类型和 4 个可用区,您的 Auto Scaling 组有可能利用多达 16 个不同的 Spot 实例池。如果您为分配策略指定 2 个 Spot 池(N = 2),您的 Auto Scaling 组最少可以使用 8 个不同池中单价最低的 Spot 池来满足 Spot 容量。

首先,我们建议您选择 capacity-optimized 分配策略并指定适合您的应用程序的若干种实例类型。此外,您可以为 Amazon EC2 Auto Scaling 定义一系列可用区,以便在启动实例时从中选择。

(可选)您可以指定您的 Spot 实例的最高价。如果未指定最高价,则默认最高价为按需价格,不过您仍可以获得 Spot 实例提供的大幅折扣。这些折扣得以实现是得益于使用新的 Spot 定价模型.带来了稳定的 Spot 定价。

有关 Spot 实例的分配策略的更多信息,请参阅 AWS 博客中的 Amazon EC2 Spot 实例的容量优化分配策略简介。

控制按需实例的比例

您可以完全控制 Auto Scaling 组中作为按需实例启动的实例所占比例。为确保您始终拥有实例容量,您可以指定组中作为按需实例启动的百分比,也可以选择指定初始的按需实例基数。如果您选择指定按需实例容量基本容量,当 Auto Scaling 扩展时,会确保首先启动按需实例的该基本容量。超出基本容量的任何内容都使用按需百分比来确定要启动多少按需实例和 Spot 实例。您可以指定 0 到 100 之间的任意数字来作为按需百分比。

在 Auto Scaling 组大小增加时,该组的行为如下所示:

示例:扩展行为
实例分配 跨购买选项的正在运行的实例总数
10 20 30 40
示例 1
按需基准:10 10 10 10 10
超过基准的按需百分比:50% 0 5 10 15
Spot 百分比:50% 0 5 10 15
示例 2
按需基准:0 0 0 0 0
超过基准的按需百分比:0% 0 0 0 0
Spot 百分比:100% 10 20 30 40
示例 3
按需基准:0 0 0 0 0
超过基准的按需百分比:60% 6 12 18 24
Spot 百分比:40% 4 8 12 16
示例 4
按需基准:0 0 0 0 0
超过基准的按需百分比:100% 10 20 30 40
Spot 百分比:0% 0 0 0 0
示例 5
按需基准:12 10 12 12 12
超过基准的按需百分比:0% 0 0 0 0
Spot 百分比:100% 0 8 18 28

Spot 实例的最佳实践

创建 Auto Scaling 组以请求 Spot 实例之前,请查看 Spot 最佳实践. 使用这些最佳实践规划您的请求,以便以可能的最低价格预置需要的实例类型。还建议执行以下操作:

  • 使用默认最高价 (这是按需价格)。您只需为您启动的 Spot 实例支付 Spot 价格。如果 Spot 价格在最高价范围内,则是否满足您的请求取决于可用性。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的“定价和节省”。

  • 创建包括多种实例类型的 Auto Scaling 组。由于可用区中每种实例类型的容量独立波动,因此,当您具有实例类型灵活性时,通常可以获得更多计算容量。

  • 同样,不要局限为仅选择最受欢迎的实例类型。由于价格是根据长期需求进行调整的,常见实例类型(如最近启动的实例系列)的价格调整频率往往更高。选择不太热门的较旧实例类型往往能降低成本和减少中断。

  • 我们建议您使用 capacity-optimized 分配策略。这意味着, 使用根据可用 Spot 容量选择的最优 Spot 池Amazon EC2 Auto Scaling启动实例,这可帮助您减少 Spot 中断的可能性。

  • 如果您选择 lowest-price 分配策略并运行 Web 服务,请指定大量 Spot 池,例如 N=10。指定一个较大 Spot 池数量,以减少其中一个可用区中的池暂时不可用时造成的 Spot 实例中断影响。如果您运行批处理或其他非关键任务应用程序,可以指定较小 Spot 池数量,例如,N = 2。这有助于确保您通过每个可用区中价格最低的 Spot 池提供 Spot 实例。

如果您打算指定最高价,请使用 AWS CLI 或 AWS SDKs 创建 Auto Scaling 组,但务必谨慎。如果您的最高价低于选定的实例类型的 Spot 价格,则不会启动您的 Spot 实例。

Prerequisites

您的启动模板配置为使用 Auto Scaling 组。有关更多信息,请参阅为 Auto Scaling 组创建启动模板.

仅当您有权调用 Auto Scaling 操作时,才能使用启动模板创建 ec2:RunInstances 组。有关更多信息,请参阅启动模板支持.

创建具有 Spot 实例和按需实例的 Auto Scaling 组(控制台)

请按照以下步骤创建您可以扩展的 Spot 实例和按需实例队列。

使用 Spot 实例和按需实例创建 Auto Scaling 组

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

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

  3. 在导航窗格上的 AUTO SCALING 下,选择 Auto Scaling Groups (Auto Scaling 组).

  4. 选择创建 Auto Scaling 组.

  5. Choose launch template or configuration (选择启动模板或配置) 页面上,执行以下操作:

    1. 对于 Auto Scaling group name (组名称),输入 Auto Scaling 组的名称。

    2. 对于 Launch template (启动模板),选择现有启动模板。

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

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

  6. Configure settings (配置设置) 页面上,对于 Instance purchase options (实例购买选项),选择 Combine purchase options and instance types (组合购买选项和实例类型)。

  7. Instances distribution (实例分配) 下,执行以下操作:

    如果要保留默认设置,则可以跳过这些步骤。

    1. 对于按需基本容量,请为Auto Scaling组的初始容量指定必须由按需实例满足的最小实例数。

    2. 对于超出基准按需百分比,请指定超出可选按需基本数量的额外容量的按需实例和 Spot 实例的百分比。

    3. 对于每个可用区的 Spot 分配策略,我们建议您保留容量优化.的默认设置。如果您不希望保留默认值,请选择 Lowest price (最低价格),然后输入价格最低的 Spot 实例池数量以实现多样化。

    4. 对于 Capacity rebalance (容量重新平衡),选择是启用还是禁用容量重新平衡。有关更多信息,请参阅Amazon EC2 Auto Scaling 容量重新平衡.

  8. 对于 Instance types (实例类型),使用我们的建议作为起点来选择可以启动的实例类型。否则,您可以删除实例类型,并在稍后根据需要添加它们。

  9. (可选)要更改实例类型的顺序,请使用箭头。您设置实例类型时的顺序决定了它们对于按需实例的优先级。当 Auto Scaling 组启动按需容量时,位于列表顶部的实例类型优先级最高。

  10. (可选)要使用实例权重,请为每个实例类型分配一个相对权重,该权重与实例应计入 Auto Scaling 组容量的数量相对应。

  11. Network (网络) 下,对于 VPC,选择您在启动模板中指定的安全组的 VPC。EC2-Classic 中不支持使用多个实例类型和购买选项来启动实例。

  12. 对于 Subnet (子网),选择指定 VPC 中的一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关 Amazon EC2 Auto Scaling 高可用性的更多信息,请参阅在可用区之间分配实例.

  13. 选择 Next (下一步).

    或者,您可接受其余默认值,然后选择 Skip to review (跳到审核).

  14. Configure advanced options (配置高级选项) 页面上,配置以下选项,然后选择 Next (下一步):

    1. (可选)要向 Elastic Load Balancing (ELB) 负载均衡器注册EC2 实例,请选择现有负载均衡器或创建新的负载均衡器。有关更多信息,请参阅Elastic Load Balancing 和 Amazon EC2 Auto Scaling. 要创建新的负载均衡器,请按照中的过程操作创建并附加新的 应用程序负载均衡器 或 网络负载均衡器(控制台)

    2. (可选)要启用ELB运行状况检查,请为 Health checks (运行状况检查) 选择 Health check type (运行状况检查类型) 下的 ELB。

    3. (可选)在运行状况检查宽限期下,输入实例投入使用后 Amazon EC2 Auto Scaling 检查其运行状况之前的时间。此操作的目的是防止 Amazon EC2 Auto Scaling 将实例标记为异常并在有时间启动之前将其终止。默认值为 300 秒。

  15. 配置组大小和扩展策略页面上,配置以下选项,然后选择下一步:

    1. (可选)对于 Desired capacity (所需容量),输入要启动的实例的初始数量。将此数字更改为超出最小容量或最大容量限制的值时,必须更新最小容量最大容量.的值。有关更多信息,请参阅设置 Auto Scaling 组的容量限制.

    2. (可选)要自动扩展 Auto Scaling 组的大小,请选择 Target tracking scaling policy (目标跟踪扩展策略),然后按照说明操作。有关更多信息,请参阅目标跟踪扩展策略.

    3. (可选)在 Instance scale-in protection (实例缩减保护) 下,选择是否启用实例缩减保护。有关更多信息,请参阅实例缩减保护.

  16. (可选)要接收通知,请为添加通知配置通知,然后选择下一步. 有关更多信息,请参阅在 Amazon SNS 组扩展时获取 Auto Scaling 通知.

  17. (可选)要添加标签,请选择添加标签,为每个标签提供标签键和值,然后选择下一步. 有关更多信息,请参阅标记 Auto Scaling 组和实例.

  18. Review 页面上,选择 Create Auto Scaling group.

使用 Spot 实例和按需实例创建 Auto Scaling 组 (AWS CLI)

以下示例说明如何使用 创建具有多个购买选项的 Auto Scaling 组AWS CLI。

注意

这些示例说明如何使用 JSON 或 YAML 格式的配置文件。如果您使用AWS CLI版本 1,则必须指定 JSON 格式的配置文件。如果您使用AWS CLI版本 2,则可以指定采用 YAML 或 JSON 格式的配置文件。

示例 1:使用 capacity-optimized 分配策略启动 Spot 实例

create-auto-scaling-group 以下命令创建一个 Auto Scaling 组来指定以下内容:

  • 作为按需实例 (0) 启动的组的百分比以及以 (1)) 开头的按需实例的基本数量

  • 按优先级顺序启动的实例类型(c5.large、、c5a.largem5.largem5a.largec4.largem4.largec3.large、、m3.large

  • 要在其中启动实例的子网(subnet-5ea0c127subnet-6194ea3bsubnet-c934b782),每个子网对应于不同的可用区

  • 启动模板 (my-launch-template) 和启动模板版本 ($Default)

Amazon EC2 Auto Scaling 尝试满足您的按需容量时,它会首先启动 c5.large 实例类型。Spot 实例来自每个可用区中基于 Spot 实例容量的最佳 Spot 池。

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

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

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

或者,您可以使用create-auto-scaling-group以下命令创建Auto Scaling组,将 YAML 文件引用为Auto Scaling组的唯一参数,而不是 JSON 文件。

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

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

--- AutoScalingGroupName: my-asg MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large InstancesDistribution: OnDemandBaseCapacity: 1 OnDemandPercentageAboveBaseCapacity: 0 SpotAllocationStrategy: capacity-optimized MinSize: 1 MaxSize: 5 DesiredCapacity: 3 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

示例 2:使用在两个池之间不同的lowest-price分配策略启动 Spot 实例

create-auto-scaling-group 以下命令创建一个 Auto Scaling 组来指定以下内容:

  • 作为按需实例 (50) 启动的组的百分比,不同时指定以某个数字开头的按需实例的基本数量

  • 按优先级顺序启动的实例类型(c5.large、、c5a.largem5.large、、m5a.largec4.largem4.largec3.large、、m3.large

  • 要在其中启动实例的子网(subnet-5ea0c127subnet-6194ea3bsubnet-c934b782),每个子网对应于不同的可用区

  • 启动模板 (my-launch-template) 和启动模板版本 ($Latest)

Amazon EC2 Auto Scaling 尝试满足您的按需容量时,它会首先启动 c5.large 实例类型。对于您的 Spot 容量,Amazon EC2 Auto Scaling 尝试在每个可用区中的两个价格最低的池中平均启动 Spot 实例。

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

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

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "lowest-price", "SpotInstancePools": 2 } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }

或者,您可以使用create-auto-scaling-group以下命令创建Auto Scaling组,将 YAML 文件引用为Auto Scaling组的唯一参数,而不是 JSON 文件。

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

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

--- AutoScalingGroupName: my-asg MixedInstancesPolicy: LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large InstancesDistribution: OnDemandPercentageAboveBaseCapacity: 50 SpotAllocationStrategy: lowest-price SpotInstancePools: 2 MinSize: 1 MaxSize: 5 DesiredCapacity: 3 VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782

验证 组是否已启动实例

要验证该组是否已启动实例

使用describe-auto-scaling-groups以下命令。

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg

以下示例响应显示所需的容量为 3 并且组具有三个运行的实例。

{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", "MixedInstancesPolicy": { "InstancesDistribution": { "SpotAllocationStrategy": "lowest-price", "OnDemandPercentageAboveBaseCapacity": 50, "OnDemandAllocationStrategy": "prioritized", "SpotInstancePools": 2, "OnDemandBaseCapacity": 0 }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] } }, "MinSize":1, "MaxSize":5, "DesiredCapacity":3, "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "InstanceType":"c5.large", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0aae8709d49eeba4f", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2b", "InstanceType":"m5.large", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c43f6003841d2d2b", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2c", "InstanceType":"c5.large", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0feb4cd6677d39903", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], ... } ] }

有关其他示例,请参阅为实例类型指定不同的启动模板为 配置实例权重 Amazon EC2 Auto ScalingAmazon EC2 Auto Scaling 容量重新平衡