设置概述 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

设置概述

本主题提供了创建混合实例组的概述和最佳实践。

概述

要创建混合实例组,您有两个选项:

Manual selection

以下步骤介绍如何通过手动选择实例类型来创建混合实例组:

  1. 选择一个启动模板,器中包含用于启动 EC2 实例的参数。启动模板中的参数是可选的,但是如果启动模板中缺少Amazon Machine Images (AMI)ID,Amazon EC2 Auto Scaling 将无法启动实例。

  2. 选择选项以覆盖启动模板。

  3. 手动选择适合您的工作负载的实例类型。

  4. 指定要启动的按需型实例和竞价型实例的百分比。

  5. 选择决定 Amazon EC2 Auto Scaling 将如何利用可能的实例类型来达到您的按需型和竞价型容量的分配策略。

  6. 选择要在其中启动实例的可用区和 VPC 子网。

  7. 指定组的初始大小(所需容量)以及该组的最小和最大大小。

必须进行覆盖,才能覆盖启动模板中声明的实例类型并使用嵌入在自动扩缩组自有资源定义中的多个实例类型。有关可用实例类型的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的实例类型

您还可以为每种实例类型配置以下可选参数:

  • LaunchTemplateSpecification — 您可以根据需要为实例类型分配不同的启动模板。此选项目前在控制台中不可用。有关更多信息,请参见 为实例类型使作不同的启动模板

  • WeightedCapacity — 与组中其余实例相比,您可以决定该实例在所需容量中所占的比例。如果您为一种实例类型指定 WeightedCapacity 值,则必须为所有实例类型指定 WeightedCapacity 值。默认情况下,每个实例在您的所需容量中计为一个。有关更多信息,请参见 将 Auto Scaling 组配置为使用实例权重

Attribute-based selection

要让 Amazon EC2 Auto Scaling 根据实例的特定属性自动选择您的实例类型,请使用以下步骤通过指定您的计算要求来创建混合实例组:

  1. 选择一个启动模板,器中包含用于启动 EC2 实例的参数。启动模板中的参数是可选的,但是如果启动模板中缺少Amazon Machine Images (AMI)ID,Amazon EC2 Auto Scaling 将无法启动实例。

  2. 选择选项以覆盖启动模板。

  3. 指定符合您的计算需求的实例属性,例如 vCPU 数和内存需求。

  4. 指定要启动的按需型实例和竞价型实例的百分比。

  5. 选择决定 Amazon EC2 Auto Scaling 将如何利用可能的实例类型来达到您的按需型和竞价型容量的分配策略。

  6. 选择要在其中启动实例的可用区和 VPC 子网。

  7. 指定组的初始大小(所需容量)以及该组的最小和最大大小。

必须进行覆盖,才能覆盖启动模板中声明的实例类型并使用一组实例属性来描述您的计算要求。有关支持的属性,请参阅 InstanceRequirementsAmazon EC2 Auto Scaling API 参考中的。或者,您可以使用已有实例属性定义的启动模板。

您也可以在覆盖结构中配置 LaunchTemplateSpecification 参数,以便根据需要为一组实例要求分配不同的启动模板。此选项目前在控制台中不可用。有关更多信息,请参阅 LaunchTemplateOverridesAmazon EC2 Auto Scaling API 参考中的。

默认情况下,您将自动扩缩组的所需容量值设置为实例的数量。

此外,您可以将所需容量的值设置为 vCPU 的数量或内存量。为此,请使用 CreateAutoScalingGroup API 操作中的 DesiredCapacityType 属性或 Amazon Web Services Management Console 中的所需容量类型下拉字段。这是实例权重的实用替代方案。

实例类型灵活性

要提高可用性,请跨多种实例类型部署应用程序。最佳实践是使用多种实例类型来满足容量要求。这样,如果您选择的可用区中实例容量不足,则 Amazon EC2 Auto Scaling 可以启动另一种实例类型。

如果竞价型实例的实例容量不足,则 Amazon EC2 Auto Scaling 将继续尝试从其他竞价型实例池启动。(它使用的池由您选择的实例类型和分配策略决定。) Amazon EC2 Auto Scaling 通过启动竞价型实例而不是按需型实例,帮助您利用竞价型实例节省的成本。

我们建议灵活地为每种工作负载在至少 10 种实例类型之间进行选择。选择实例类型时,不要局限于最热门的新实例类型。选择老一代实例类型往往会导致竞价型中断较少,因为按需客户对它们的需求较少。

可用区灵活性

我们强烈推荐您在多个可用区之间跨越您的自动扩缩组。利用多个可用区,您可以设计在可用区之间自动实现故障转移的应用程序,从而提高弹性。

作为额外优势,与单个可用区中的组相比,您可以访问更充足的 Amazon EC2 容量池。由于可用区内每个实例类型的容量分开波动,您可以灵活使用实例类型和可用区,通常可以获得更多计算容量。

有关使用多可用区的详细信息,请参阅 示例:在可用区之间分配实例

Spot 最高价

在使用 Amazon CLI 或 SDK 创建 Auto Scaling 组时,您可以指定 SpotMaxPrice 参数。SpotMaxPrice 参数确定您愿意为竞价型实例一小时支付的最高价。

当您在覆盖(或 "DesiredCapacityType": "vcpu" 或在组级别的 "DesiredCapacityType": "memory-mib")中指定 WeightedCapacity 参数时,最高价格代表的是最高单价,而不是整个实例的最高价格。

我们强烈建议您不要指定最高价。如果您未收到任何竞价型实例 (例如当您的最高价太低时),您的应用程序可能不运行。如果未指定最高价,则默认最高价为按需价格。您只需为您启动的竞价型实例支付 Spot 价格。您仍然可以享受竞价型实例提供的大幅折扣。这些折扣得以实现,是由于借助竞价型定价模型带来了稳定的竞价型定价。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的定价和节省

主动容量再平衡

如果您的用例允许,我们建议您进行容量再平衡。容量再平衡功能可在运行中的竞价型实例收到两分钟的竞价型实例中断通知之前,主动使用新的竞价型实例扩展您的队列,从而帮助您维护工作负载的可用性。

当启用容量再平衡时,Amazon EC2 Auto Scaling 将尝试主动替换组中已收到再平衡建议的竞价型实例。这让您能够将工作负载转移到不具有较高中断风险的新竞价型实例。

有关更多信息,请参见 使用容量重新平衡来处理 Amazon EC2 竞价型实例中断

扩展行为

当您创建混合实例组时,它默认使用按需型实例。要使用竞价型实例,您必须修改要启动的按需型实例启动的百分比。您可以指定 0 到 100 之间的任意数字来作为按需百分比。

或者,您也可以指定要开始使用的按需型实例的基本数量。如果您这样操作,则 Amazon EC2 Auto Scaling 将等待,直到它在组横向扩展时启动按需型实例的基本容量之后,才会启动竞价型实例。超出基本容量的任何内容都使用按需百分比来确定要启动多少按需型实例和竞价型实例。

Amazon EC2 Auto Scaling 将百分比转换为等效数量的实例。如果结果创建一个小数,向上舍入为下一个整数,以支持按需型实例。

下表展示了自动扩缩组随着规模的增加和减少而采取的行为。

示例:扩展行为
购买选项 各购买选项的运行实例的组大小和数量
10 20 30 40

示例 1:以 10 为基准,50/ 50% 按需/竞价型

On-Demand Instances (base amount) 10 10 10 10
On-Demand Instances 0 5 10 15
Spot Instances 0 5 10 15

示例 2:以 0 为基准,0/ 100% 按需/竞价型

On-Demand Instances (base amount) 0 0 0 0
On-Demand Instances 0 0 0 0
Spot Instances 10 20 30 40

示例 3:以 0 为基准,60/ 40% 按需/竞价型

On-Demand Instances (base amount) 0 0 0 0
On-Demand Instances 6 12 18 24
Spot Instances 4 8 12 16

示例 4:以 0 为基准,100/ 0% 按需/竞价型

On-Demand Instances (base amount) 0 0 0 0
On-Demand Instances 10 20 30 40
Spot Instances 0 0 0 0

示例 5:以 12 为基准,0/ 100% 按需/竞价型

On-Demand Instances (base amount) 10 12 12 12
On-Demand Instances 0 0 0 0
Spot Instances 0 8 18 28

当组规模增加时,Amazon EC2 Auto Scaling 将尝试在您指定的可用区之间均匀平衡您的容量。然后,它根据指定的分配策略启动实例类型。

当组规模减少时,Amazon EC2 Auto Scaling 首先确定应终止两种类型中的哪一种类型(竞价型或按需)。然后,它会尝试以平衡的方式终止您指定的可用区的实例。它还倾向于以更接近您的分配策略的方式终止实例。有关终止策略的更多信息,请参阅 使用 Amazon EC2 Auto Scaling 终止策略

实例类型的区域可用性

EC2 实例类型的可用性因您的 Amazon Web Services 区域 而异。例如,最新一代实例类型可能尚未在给定区域中可用。由于不同区域的实例可用性存在差异,如果您的覆盖中的多个实例类型在您所在的地区不可用,则在提出编程请求时可能会遇到问题。使用您所在地区不可用的多个实例类型可能会导致请求完全失败。要解决此问题,请使用不同的实例类型重试请求,确保每个实例类型在该区域中都可用。要搜索按位置提供的实例类型,请使用describe-instance-type-offerings命令。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的查找 Amazon EC2 实例类型

有关竞价型实例的更多最佳实践,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 EC2 竞价型的最佳实践

限制

使用混合实例策略向 Auto Scaling 组添加覆盖后,您可以通过 UpdateAutoScalingGroup API 调用更新替代项,但不能将其删除。要完全移除覆盖,必须先将 Auto Scaling 组切换为使用启动模板或启动配置,而不是混合实例策略。然后,您可以再次添加混合实例策略,而无需任何替代。