Amazon EC2 Auto Scaling
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

您可以启动并自动扩展单个 Auto Scaling 组中的一组按需实例和 Spot 实例。除接收折扣以使用 Spot 实例外,如果您指定存在与其匹配的预留实例的实例类型,则常规按需实例定价的折扣费率同样适用。按需实例与预留实例之间唯一的差异是您必须提前购买预留实例。以上所有因素的综合作用是帮助您进一步节约 Amazon EC2 实例成本,同时确保为您的应用程序获得所需的规模和性能。

首先在一个启动模板中指定常用配置参数,并在创建 Auto Scaling 组时选择该模板。在配置 Auto Scaling 组时,您可以指定要启动的按需实例和 Spot 实例,选择最适合您的应用程序的实例类型,并在每个购买选项中定义 Amazon EC2 Auto Scaling 应如何跨实例类型分配您的容量。

您可以跨多个可用区中运行的多个实例类型部署应用程序以提高可用性。通过以上方式进行部署,还具备在 Sport 市场以最低价格获得实例类型的优势。您必须指定至少两个实例类型,但最佳实践是选择几个实例类型以避免从容量不足的实例池中启动实例。如果一个 Spot 实例池无法满足 Auto Scaling 组的 Spot 实例请求,它将继续尝试其他 Spot 实例池而不是启动按需实例,使您可以利用 Spot 实例节约成本。

分配策略

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

按需实例

按需实例的分配策略是 prioritized。Auto Scaling 组使用模板覆盖列表中的实例类型顺序,确定在满足按需容量时应首先使用哪一实例类型。

例如,您按以下顺序指定三个启动模板覆盖:c5.largec4.largec3.large。在启动您的按需实例时,Auto Scaling 组满足按需容量的顺序是从 c5.large 开始,然后是 c4.large,再然后是 c3.large。如果存在未使用的 c4.large 预留实例,您可以设置实例类型的优先级,通过指定 c4.large 作为最高优先级的实例类型来使您的预留实例具有最高优先级。当 c4.large 实例启动时,您可享受预留实例定价。

Spot 实例

Spot 实例的分配策略是 lowest-price。Spot 实例分布在您指定的 Spot 实例池中,而且来自在满足需求时单价最低的池。

Spot 实例池是一组未使用的 EC2 实例,具有相同的实例类型、操作系统、可用区和网络平台。实例类型和可用区的数量(均在组中指定)直接决定 Amazon EC2 Auto Scaling 可从中获取的 Spot 池数量。例如,如果您指定 4 个实例类型和 4 个可用区,您的 Auto Scaling 组有可能使用多达 16 个不同的 Spot 池来满足 Spot 容量。如果您为分配策略指定 2 个 Spot 池 (N = 2),您的 Auto Scaling 组最少可以使用 8 个不同的 Spot 池来满足 Spot 容量(每个可用区中 2 个价格最低的 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 组。最少包括两种。由于可用区内每个实例类型的价格分开波动,因此,如果您灵活使用实例类型,则通常可以在价格不变的情况下获得更多计算容量。

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

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

先决条件

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

IAM 用户仅在具有调用 ec2:RunInstances 操作的权限时,才能使用启动模板创建 Auto Scaling 组。有关配置用户权限的信息,请参阅 控制对您 Amazon EC2 Auto Scaling 资源的访问权

使用多个购买选项创建 Auto Scaling 组

请按照以下步骤创建您可以扩展的按需实例和 Spot 实例队组。您可以使用 Instances Distribution (实例分布) 中的默认设置快速创建队组。否则,您可以修改任意默认设置。您对组扩展拥有完全控制权。您可以将所需容量设置为特定的实例数量,或者您可以利用自动扩展以根据实际需求调整容量。

使用多个购买选项创建 Auto Scaling 组

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

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

  3. 在导航窗格中,选择 Auto Scaling Groups (自动扩展组)

  4. 选择 Create Auto Scaling group (创建 Auto Scaling 组)

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

  6. 配置 Auto Scaling 组详细信息页上,为组名输入 Auto Scaling 组的名称。

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

  8. Fleet Composition (队组组合) 选择 Combine purchase options and instances (组合购买选项和实例),以使用按需和 Spot 购买选项跨多个实例类型启动实例。

  9. 实例类型选择可以启动的最佳实例类型(如 c5.large)。您添加实例类型时的顺序设定了它们对于按需实例的优先级。当 Auto Scaling 组启动按需容量时,位于列表顶部的实例类型优先级最高。您必须指定至少两个实例类型。

  10. 对于 Instances Distribution (实例分布),选择是要保留还是编辑默认设置。清除 Use the default settings to get started quickly (使用默认设置以快速入门),即可编辑默认设置。

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

    • 对于最高 Spot 价格,选择使用默认设置以将最高 Spot 价格限定为按需价格。或者选择 Set your maximum price (设置最高价) 并输入值,以指定您愿意为 Spot 实例支付的、按小时计算的实例价格。

    • 对于 Spot Allocation Strategy (Spot 分配策略),选择要分配 Spot 实例的 Spot 池数。

    • 对于 Optional On-Demand Base (可选的按需基准),指定必须使用按需实例满足的、Auto Scaling 组的初始容量的最小实例数。

    • 对于 On-Demand Percentage Above Base (超过基准的按需百分比),为超出可选按需基准数量的额外容量指定按需实例和 Spot 实例的百分比。

  12. 对于组大小,输入 Auto Scaling 组的初始实例数。

  13. 对于 Network (网络),为您的 Auto Scaling 组选择 VPC。

    注意

    EC2-Classic 中不支持使用实例类型和购买选项的组合来启动实例。

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

  15. (可选) 要在负载均衡器中注册您的 Amazon EC2 实例,依次选择高级详细信息从一个或多个负载均衡器接收流量,然后选择一个或多个 传统负载均衡器 或目标组。

  16. 选择 Next: Configure scaling policies (下一步:配置扩展策略)

  17. Configure scaling policies (配置扩展策略) 页面上,选择下列选项之一,然后选择 Next: Configure Notifications (下一步:配置通知)

    • 要根据需要手动调整 Auto Scaling 组的大小,请选择 Keep this group at its initial size (保留该组的初始大小)。有关更多信息,请参阅 Amazon EC2 Auto Scaling 的手动扩展

    • 要根据您指定的条件自动调整 Auto Scaling 组的大小,选择 Use scaling policies to adjust the capacity of this group (使用扩展处理调整该组的容量),然后按照指示操作。有关详细信息,请参阅配置扩展策略

  18. (可选) 要接收通知,请选择 Add notification,配置通知,然后选择 Next: Configure Tags

  19. (可选) 要添加标签,请选择 Edit tags,为每个标签提供标签键和值,然后选择 Review

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

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

  21. Auto Scaling group creation status 页面上,选择 Close

要使用 AWS CLI 创建包含多个购买选项的 Auto Scaling 组

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

  • 实例类型按优先级顺序启动(c5.largec4.largec3.large

  • 要为其分配 Spot 实例的 Spot 实例池 (2)

  • 要在其中启动实例的子网(subnet-5ea0c127subnet-6194ea3bsubnet-c934b782

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

以下是 config.json 文件示例:

{ "AutoScalingGroupName": "my-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-template-for-auto-scaling", "Version": "1" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c3.large" } ] }, "InstancesDistribution": { "OnDemandBaseCapacity": 1, "OnDemandPercentageAboveBaseCapacity": 50, "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": 1 }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "c3.large" } ] } }, "EnabledMetrics": [], "Tags": [], "AutoScalingGroupName": "my-asg", "DefaultCooldown": 300, "MinSize": 1, "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-template-for-auto-scaling", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0aae8709d49eeba4f", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2b", "LaunchTemplate": { "LaunchTemplateName": "my-template-for-auto-scaling", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c43f6003841d2d2b", "HealthStatus": "Healthy", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2c", "LaunchTemplate": { "LaunchTemplateName": "my-template-for-auto-scaling", "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 } ] }