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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

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

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

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

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

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

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

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

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

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

分配策略

以下分配策略决定 Auto Scaling 组如何根据可用的实例类型满足按需实例和 Spot 容量。

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

按需实例

按需实例的分配策略是 prioritized... Amazon EC2 Auto Scaling 在启动模板的列表中使用实例类型的顺序,以确定在满足按需容量时首先使用哪种实例类型。例如,假设您指定的三个启动模板覆盖以下顺序: c5.largec4.large,和 c3.large...当您的按需实例启动时, Auto Scaling 集团按需要开始按需容量 c5.large,然后 c4.large,然后 c3.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 实例提供的大幅折扣。这些折扣是可能的,因为可以使用新的现货定价 现货定价模型.

有关现货实例分配策略的更多信息,请参阅 介绍AmazonEC2Spot实例的容量优化分配策略 在AWS博客中。

控制按需实例的比例

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

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

示例:缩放行为
实例分布 采购选项中运行实例的总数
10* 20 30 40
示例 #1
按需基础: 10* 10 10 10 10*
按需比例上述基础: 50。 0 5 10 -15
现货百分比: 50。 0 5 10 -15
示例 2
按需基础: 0 0 0 0 0
按需比例上述基础: 0% 0 0 0 0
现货百分比: -100 10* 20 30 40
示例 3
按需基础: 0 0 0 0 0
按需比例上述基础: %60 6 12 18 24
现货百分比: 40% 4 8 12 16
示例 4
按需基础: 0 0 0 0 0
按需比例上述基础: -100 10* 20 30 40
现货百分比: 0% 0 0 0 0
示例 5
按需基础: [12] 10* 12 12 [12]
按需比例上述基础: 0% 0 0 0 0
现货百分比: -100 0 8 18 28

现货实例的最佳实践

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

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

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

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

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

  • 使用 Spot 实例中断通知监控您的 Spot 实例的状态。例如,您可以在 Amazon EventBridge 自动将EC2点两分钟警告发送 Amazon SNS 主题, AWS Lambda 功能或其他目标。有关详细信息,请参阅 现货实例中断通知适用于Linux实例的AmazonEC2用户指南Amazon EventBridge 用户指南.

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

Prerequisites

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

IAM 用户可以创建 Auto Scaling 只有当有权限调用 ec2:RunInstances 操作。有关更多信息,请参阅 启动模板支持.

创建 Auto Scaling 组(控制台)

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

Amazon EC2 Auto Scaling 已更改用户界面。默认情况下,将显示新的用户界面,但您可以选择恢复旧用户界面。本主题包含每个用户界面的相应步骤。

使用多个购买选项创建 Auto Scaling 组(新控制台)

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

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

  3. 在导航窗格中, 自动缩放,选择 自动缩放组.

  4. 选择 创建 Auto Scaling 组.

  5. 选择启动模板或配置 页面,请执行以下操作:

    1. 对于 Auto Scaling 组名称,输入您的 Auto Scaling 组。

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

    3. 对于 启动模板版本,选择 Auto Scaling 在扩展时,组使用默认、最新版本或特定版本的启动模板。

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

  6. 配置设置 页面, 购买选项和实例类型,选择 合并购买选项和实例类型.

  7. 下方 实例分布,执行以下操作:

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

    1. 对于 可选的按需基础,指定最小实例数 Auto Scaling 组的初始容量,必须按需要实例。

    2. 对于 按需比例上限基准,指定按需实例百分比并将其他容量的现货实例发现超出可选的按需基本数量。

    3. 对于 每个可用区的现货分配策略,建议您保持默认设置 能力优化. 如果您不希望保持默认,请选择 最低价格,然后输入价格最低的现货实例池数量,以实现多元化。

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

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

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

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

  12. 对于 子网,在指定的vpc中选择一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关高可用性的详细信息,请参阅 Amazon EC2 Auto Scaling,参见 跨可用性区域分发实例.

  13. 选择 下一步.

    或者,您可以接受其余默认值,然后选择 跳转回顾.

  14. 配置高级选项 页面,配置以下选项,然后选择 下一步:

    1. (可选)注册您的 Amazon EC2 实例 Elastic Load Balancing (ELB)负载均衡器,选择 启用负载平衡. 要附加 Application Load Balancer 或网络负载均衡器,请选择现有目标组或创建新的目标组。要附加 Classic Load Balancer,请选择现有负载均衡器或创建新的负载均衡器。

    2. (可选)启用 ELB 运行状况检查, 运行状况检查,选择 埃尔布 下方 运行状况检查类型.

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

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

    1. (可选) 期望容量,输入要启动的最初实例数。如果将此数字更改为最小或最大容量限制之外的值,则必须更新 最小容量最大容量. 有关更多信息,请参阅 为您的 Auto Scaling 组.

    2. (可选)自动扩展 Auto Scaling 组,选择 目标跟踪缩放策略 并按指示操作。有关详细信息,请参阅 目标跟踪缩放策略.

    3. (可选) 实例扩展保护,选择是否启用实例横向扩展保护。有关更多信息,请参阅 实例扩展保护.

  16. (可选)接收通知, 添加通知,配置通知,然后选择 下一步. 有关更多信息,请参阅 获得 Amazon SNS 当您的 Auto Scaling 组量表.

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

  18. 审核 页面,选择 创建 Auto Scaling 组.

使用多个购买选项创建 Auto Scaling 组(旧控制台)

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

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

  3. 在导航窗格中, 自动缩放,选择 自动缩放组.

  4. 选择 创建 Auto Scaling 组.

  5. 选择 启动模板,选择您的启动模板,然后选择 下一步.

  6. 配置 Auto Scaling 组详情 页面, 组名称,输入您的 Auto Scaling 组。

  7. 对于 启动模板版本,选择 Auto Scaling 在扩展时,组使用默认、最新版本或特定版本的启动模板。

  8. 对于 车队组成,选择 合并购买选项和实例 使用按需购买选项以跨多个实例类型启动实例。

  9. 对于 实例类型,执行以下操作:

    1. 选择要用作覆盖类型的实例类型。默认情况下,选定启动模板指定单个实例类型,但是如果您要指定其他实例类型,则可以更改。当选择多个实例类型时,您添加实例类型时的顺序设定了它们对于按需实例的优先级。当 Auto Scaling 组启动按需容量时,位于列表顶部的实例类型优先级最高。

    2. (可选)要使用 实例权重,分配每个实例类型,相对重量对应于实例应计入所需容量的相对重量 Auto Scaling 组。

  10. 对于 实例分布,选择是否保留或编辑默认设置。清除方框 使用默认设置快速开始 允许您编辑默认设置。

  11. 如果您选择编辑默认设置,请提供以下信息。

    • 对于 最大现货价格,选择 使用默认 按需价格支付最大现货价格。或选择 设置最大价格 并输入一个值,以指定您愿意每小时支付的最大价格,用于实例。

    • 对于 现货分配策略,默认为 根据每个可用区域的可用现货容量,优化启动现场实例. 要使用最低价格策略,请选择 根据每个可用区域的最低价格实例类型多元化现场实例,然后输入要使用的现货池数,或接受默认值(2)。

    • 对于 可选的按需基础,指定最小实例数 Auto Scaling 组的初始容量,必须按需要实例。

    • 对于 按需比例上限基准,指定按需实例百分比并将其他容量的现货实例发现超出可选的按需基本数量。

  12. 对于 组大小,输入您的 Auto Scaling 组。

  13. 对于 网络,为您的 Auto Scaling 组。EC2-Classic 中不支持使用多个实例类型和购买选项来启动实例。

  14. 对于 子网,在指定的vpc中选择一个或多个子网。可以在多个可用区中使用子网以提供高可用性。有关高可用性的详细信息,请参阅 Amazon EC2 Auto Scaling,参见 跨可用性区域分发实例.

  15. (可选)注册您的 Amazon EC2 带负载均衡器的实例,选择 高级详情,选择 接收来自一个或多个负载平衡器的流量,然后选择一个或多个 Classic Load Balancer 或目标组。

  16. 选择 下一步: 配置扩展策略.

  17. 配置扩展策略 页面,选择以下选项之一,然后选择 下一步: 配置通知:

    • 要手动调整 Auto Scaling 根据需要进行分组,选择 保持该组的初始大小. 有关更多信息,请参阅 手动缩放 Amazon EC2 Auto Scaling.

    • 以自动调整 Auto Scaling 基于您指定的标准,选择 使用扩展策略调整此组的容量 并按指示操作。有关详细信息,请参阅 配置扩展策略.

  18. (可选)要接收通知,请选择 添加通知,配置通知,然后选择 下一步: 配置标记.

  19. (可选)要添加标记,请选择 编辑标签,为每个标签提供标签密钥和值,然后选择 审核.

    或者,您可以稍后添加标签。有关更多信息,请参阅 标记 Auto Scaling 组和实例.

  20. 审核 页面,选择 创建 Auto Scaling 组.

  21. Auto Scaling 组创建状态 页面,选择 关闭.

创建 Auto Scaling 组(AWS CLI)

以下示例显示如何创建 Auto Scaling 使用 AWS CLI create-auto-scaling-group 命令。

示例:使用 capacity-optimized 分配策略

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

  • 按需要启动的组的百分比(0)和按需实例的基本数量,以1)

  • 按优先级顺序启动(、、、)的实例类型c3.large, c4.large, c5.large)

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

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

当WhenWhen Amazon EC2 Auto Scaling 尝试满足您的按需容量,它启动 c3.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": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

示例:使用 lowest-price 分配策略多元化以超过两个池

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

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

  • 按优先级顺序启动(、、、)的实例类型c3.large, c4.large, c5.large)

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

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

当WhenWhen Amazon EC2 Auto Scaling 尝试满足您的按需容量,它启动 c3.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": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 50, "SpotAllocationStrategy": "lowest-price", "SpotInstancePools": 2 } }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 3, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

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

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

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

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

{ "AutoScalingGroups": [ { "AutoScalingGroupARN": "arn", "ServiceLinkedRoleARN": "arn", "TargetGroupARNs": [], "SuspendedProcesses": [], "DesiredCapacity": 3, "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": "c3.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c5.large" } ] } }, "EnabledMetrics": [], "Tags": [], "AutoScalingGroupName": "my-asg", "DefaultCooldown": 300, "MinSize": 1, "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0aae8709d49eeba4f", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2b", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c43f6003841d2d2b", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2c", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0feb4cd6677d39903", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], "MaxSize": 5, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "HealthCheckGracePeriod": 0, "TerminationPolicies": [ "Default" ], "LoadBalancerNames": [], "CreatedTime": "2019-02-17T02:29:12.853Z", "AvailabilityZones": [ "us-west-2a", "us-west-2b", "us-west-2c" ], "HealthCheckType": "EC2", "NewInstancesProtectedFromScaleIn": false } ] }

有关其他示例,请参阅 实例权重 Amazon EC2 Auto Scaling.