为 Amazon EC2 Auto Scaling 配置实例权重 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon EC2 Auto Scaling 配置实例权重

在将 Auto Scaling 组配置为启动多个实例类型时,您可以选择使用实例权重定义每个实例对所需的组容量贡献的容量单位数。这样,您可以通过直接映射到应用程序性能的方式指定每种实例类型的相对权重。您可以对实例加权以满足您的特定应用程序需求,例如,依据内核 (vCPU) 或内存 (GiB) 加权。

例如,假设您运行一个计算密集型应用程序,该应用程序在至少具有 8 个 vCPU 和 15 GiB RAM 时性能最佳。如果您使用 c5.2xlarge 作为基本单元,以下任何 EC2 实例类型都将满足您的应用程序需求。

实例类型示例
实例类型 vCPU 内存 (GiB)
c5.2xlarge 8 16
c5.4xlarge 16 32
c5.12xlarge 48 96
c5.18xlarge 72 144
c5.24xlarge 96 192

默认情况下,所有实例类型都被视为具有相同权重。换句话说,无论 Amazon EC2 Auto Scaling 启动大型还是小型实例类型,每个实例都会计入组的所需容量。

但是,通过实例权重,您可以分配一个数值,该值指定与每个实例类型关联的容量单位数。例如,如果实例大小不相同,c5.2xlarge 实例的权重可能为 2,而 c5.4xlarge(大两倍)的权重可能为 4,依此类推。然后,在 Amazon EC2 Auto Scaling 启动实例时,这些实例的权重会计入您所需的容量中。

每单位小时价格

下表比较美国东部(弗吉尼亚北部、俄亥俄)不同可用区中竞价型实例的每小时价格和同一区域中按需实例的价格。显示的价格是示例定价,而不是当前定价。这些价格是您每实例小时的成本。

示例:每实例小时的竞价定价
实例类型 us–east–1a us–east–1b us–east–1c 按需定价
c5.2xlarge 0.180 USD 0.191 USD 0.170 USD 0.34 USD
c5.4xlarge 0.341 USD 0.361 USD 0.318 USD 0.68 USD
c5.12xlarge 0.779 USD 0.777 USD 0.777 USD 2.04 USD
c5.18xlarge 1.207 USD 1.475 USD 1.357 USD 3.06 USD
c5.24xlarge 1.555 USD 1.555 USD 1.555 USD 4.08 USD

通过实例权重,您可以根据每单位小时 的使用量来评估您的成本。您可以将某种实例类型的价格除以它表示的单位数来确定每单位小时价格。对于按需实例,部署一个实例类型时的每单位小时 价格与部署不同大小的相同实例类型时的价格相同。但是,相比之下,每单位小时 的 Spot 价格因竞价池而异。

了解每单位小时 价格计算如何与权重实例配合工作的最简单方法是使用示例。例如,为便于计算,假定您只想启动 us-east-1a 中的竞价型实例。每单位小时价格如下所示。

示例:每单位小时 Spot 价格示例
实例类型 us–east–1a 实例权重 每单位小时价格
c5.2xlarge 0.180 USD 2 0.090 USD
c5.4xlarge 0.341 USD 4 0.085 USD
c5.12xlarge 0.779 USD 12 0.065 USD
c5.18xlarge 1.207 USD 18 0.067 USD
c5.24xlarge 1.555 USD 24 0.065 USD

注意事项

本节讨论有效实施实例权重的关键注意事项。

  • 首先选择能够反映应用程序实际性能要求的几种实例类型。然后,通过指定实例类型的权重,确定每种实例类型应计入 Auto Scaling 组所需容量的数量。该权重应用于组中的当前和未来实例。

  • 在为权重选择超大范围时应小心谨慎。例如,当较大实例类型的权重为 200 时,我们建议不要将前一个实例类型的权重指定为 1。此外,最小权重和最大权重之间的差异不能太极端。如果任何实例类型的权重差异太大,这可能会对持续的性价比优化产生负面影响。

  • Auto Scaling 组大小以容量单位计量,而不是以实例计量。例如,如果权重基于 vCPU,则必须指定所需核心数、最小核心数和最大核心数。

  • 设置权重和所需容量,使所需容量至少比最大权重大两到三倍。

通过实例权重,引入了以下新行为:

  • 当前容量等于或高于所需容量。由于 Amazon EC2 Auto Scaling 希望预配置实例直到完全达到所需容量,因此可能会超过目标。例如,假设您指定了两个实例类型 c5.2xlargec5.12xlarge,并且您为 c5.2xlarge 分配了实例权重 2,为 c5.12xlarge 分配了实例权重 12。如果还剩 5 个单位才能实现所需容量,Amazon EC2 Auto Scaling 会预配置 c5.12xlarge,所需容量将超过 7 个单位。

  • 当 Amazon EC2 Auto Scaling 预配置实例以达到所需容量时,同避免超过目标相比,跨可用区分配实例和遵从按需实例与竞价型实例的分配策略都会具有更高优先级。

  • 通过使用您的首选分配策略,Amazon EC2 Auto Scaling 可以超出最大容量限制,以便在可用区之间保持平衡。Amazon EC2 Auto Scaling 强制执行的硬性限制是一个值,该值等于所需容量加上最大重量的和。

添加或修改现有组的权重时,请注意以下事项:

  • 向现有 Auto Scaling 组添加实例权重时,您必须包含已在组中运行的任何实例类型。

  • 修改现有实例权重时,Amazon EC2 Auto Scaling 将根据新权重启动或终止实例以达到所需容量。

  • 如果您删除了实例类型,该实例类型的所有正在运行的实例都将继续采用其上次更新的权重值,即使该实例类型已被删除也是如此。

添加或修改 Auto Scaling 组的权重

您可以向现有 Auto Scaling 组添加权重,也可以在创建新的 Auto Scaling 组时添加权重。您还可以更新现有 Auto Scaling 组以定义新的配置选项(竞价/按需使用情况、竞价分配策略、实例类型)。如果您更改了所需的竞价型或按需型实例数量,Amazon EC2 Auto Scaling 会逐步替换现有实例以匹配新的购买选项。

在使用实例权重创建 Auto Scaling 组之前,我们建议您熟悉启动具有多种实例类型的组。有关更多信息和其他示例,请参阅 Auto Scaling 组具有多个实例类型和购买选项

以下示例说明如何使用 Amazon CLI 在您创建 Auto Scaling 组时添加权重,以及添加或修改现有 Auto Scaling 组的权重。您可以在 JSON 文件中配置各种参数,然后将 JSON 文件作为 Auto Scaling 组的唯一参数引用。

在创建时向 Auto Scaling 组添加权重

  • 使用 create-auto-scaling-group 命令创建新的 Auto Scaling 组。例如,以下命令创建一个新的 Auto Scaling 组,并通过指定以下内容添加实例权重:

    • 作为按需实例启动的组的百分比 (0)

    • 每个可用区中竞价型实例的分配策略(capacity-optimized)。

    • 按优先级顺序启动(m4.16xlargem5.24xlarge)的实例类型

    • 与实例类型之间的相对大小差异 (vCPU) 相对应的实例权重(1624

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

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

    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": "m4.16xlarge", "WeightedCapacity": "16" }, { "InstanceType": "m5.24xlarge", "WeightedCapacity": "24" } ] }, "InstancesDistribution": { "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 160, "MaxSize": 720, "DesiredCapacity": 480, "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782", "Tags": [] }

添加或修改现有 Auto Scaling 组的权重

  • 使用 update-auto-scaling-group 命令添加或修改权重。例如,以下命令通过指定以下内容向现有 Auto Scaling 组中的实例类型添加权重:

    • 按优先级顺序启动(c5.18xlargec5.24xlargec5.2xlargec5.4xlarge)的实例类型

    • 与实例类型之间的相对大小差异 (vCPU) 相对应的实例权重(182424

    • 新增加的所需容量,大于最大权重

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

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

    { "AutoScalingGroupName": "my-existing-asg", "MixedInstancesPolicy": { "LaunchTemplate": { "Overrides": [ { "InstanceType": "c5.18xlarge", "WeightedCapacity": "18" }, { "InstanceType": "c5.24xlarge", "WeightedCapacity": "24" }, { "InstanceType": "c5.2xlarge", "WeightedCapacity": "2" }, { "InstanceType": "c5.4xlarge", "WeightedCapacity": "4" } ] } }, "MinSize": 0, "MaxSize": 100, "DesiredCapacity": 100 }

验证 Auto Scaling 组的权重

  • 使用以下 describe-auto-scaling-groups 命令验证权重。

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

    以下为响应示例。

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", "MixedInstancesPolicy": { "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-0b97f1e282EXAMPLE", "LaunchTemplateName": "my-launch-template", "Version": "$Latest" }, "Overrides": [ { "InstanceType": "m4.16xlarge", "WeightedCapacity": "16" }, { "InstanceType": "m5.24xlarge", "WeightedCapacity": "24" } ] }, "InstancesDistribution": { "OnDemandAllocationStrategy": "prioritized", "OnDemandBaseCapacity": 0, "OnDemandPercentageAboveBaseCapacity": 0, "SpotAllocationStrategy": "capacity-optimized" } }, "MinSize": 160, "MaxSize": 720, "DesiredCapacity": 480, "DefaultCooldown": 300, "AvailabilityZones": [ "us-west-2a", "us-west-2b", "us-west-2c" ], "LoadBalancerNames": [], "TargetGroupARNs": [], "HealthCheckType": "EC2", "HealthCheckGracePeriod": 0, "Instances": [ { "InstanceId": "i-027327f0ace86f499", "InstanceType": "m5.24xlarge", "AvailabilityZone": "us-west-2a", "LifecycleState": "InService", "HealthStatus": "Healthy", "LaunchTemplate": { "LaunchTemplateId": "lt-0b97f1e282EXAMPLE", "LaunchTemplateName": "my-launch-template", "Version": "7" }, "ProtectedFromScaleIn": false, "WeightedCapacity": "24" }, { "InstanceId": "i-0ec0d761cc134878d", "InstanceType": "m4.16xlarge", "AvailabilityZone": "us-west-2a", "LifecycleState": "Pending", "HealthStatus": "Healthy", "LaunchTemplate": { "LaunchTemplateId": "lt-0b97f1e282EXAMPLE", "LaunchTemplateName": "my-launch-template", "Version": "7" }, "ProtectedFromScaleIn": false, "WeightedCapacity": "16" }, ... } ] }

其他信息

实例权重和分配策略

分配策略确定您的实例来自哪个实例池。在使用实例权重功能时,分配策略的作用与用于其他 Auto Scaling 组时完全相同。但是,在使用 lowest-price 策略时,如何选择实例池存在一个关键区别。为您的分配策略选择 lowest-price 时,您的实例来自每个可用区中单位价格最低的实例池。

例如,假设您有一个 Auto Scaling 组,该组具有多种实例类型,每个实例类型带有不同数量的 vCPU。针对竞价和按需分配策略使用 lowest-price。如果您选择根据每种实例类型的 vCPU 计数分配权重,Amazon EC2 Auto Scaling 将启动交付时每个分配权重值(例如,每个 vCPU)价格最低的任何实例类型。如果是 Spot 实例,那么这意味着每个 vCPU 的最低 Spot 价格。如果是按需型实例,那么这意味着每个 vCPU 的最低按需价格。

实例权重和竞价最高价

在使用 Amazon CLI 或 SDK 创建 Auto Scaling 组时,您可以指定 SpotMaxPrice 参数。此参数决定了您愿意为竞价型实例小时支付的最高价,默认情况下,这将设置为按需价格。当您使用实例权重功能时,请记住,最高 Spot 价格反映的是最高单价(例如,每个 vCPU 的价格),而不是整个实例的最高价格。