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

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

实例权重 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和2的权重 c5.4xlarge (大约两倍)的重量可能为4,所以在。然后,在 Amazon EC2 Auto Scaling 启动实例时,这些实例的权重会计入您所需的容量中。

每单位小时价格

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

示例:每个实例小时的现货定价
实例类型 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

实例权重,您可以根据使用的内容评估成本 每单位小时. 您可以将某种实例类型的价格除以它表示的单位数来确定每单位小时价格。对于按需实例,价格 每单位小时 当部署一个实例类型时,同样的一个实例类型的大小是同样的。相比之下,现货价格 每单位小时 因现货池而异。

了解价格的最简单方法 每单位小时 与加权实例的计算工作有一个示例。例如,为便于计算,假定您只想启动 us-east-1a 中的 Spot 实例。TheThethe 单位时间价格 如下所示。

示例:每单位现货价格示例
实例类型 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

Considerations

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

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

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

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

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

  • 如果您选择为现场设置自己的最大价格,则必须指定价格 每个实例小时 对于您最昂贵的实例类型,这一点很高。 Amazon EC2 Auto Scaling 如果可用区的当前现货价格低于您的最大价格和容量,则提供指定现货情况。如果一个 Spot 实例池无法满足 Spot 实例请求,它将继续尝试其他 Spot 池以便利用 Spot 实例节约成本。

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

  • 当前容量等于或高于所需容量。由于 Amazon EC2 Auto Scaling 希望预配置实例直到完全达到所需容量,因此可能会超过目标。例如,假设您指定了两种实例类型, c5.2xlargec5.12xlarge,您将分配实例权重2 c5.2xlarge 和12个 c5.12xlarge...如果剩余的5个单位能够满足所需的容量,以及 Amazon EC2 Auto Scaling 条款A c5.12xlarge,所需容量超过7个单位。

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

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

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

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

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

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

为您的 Auto Scaling 组

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

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

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

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

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

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

    • 每个可用区中 Spot 实例的分配策略(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": { "OnDemandBaseCapacity": 10, "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.18xlarge, c5.24xlarge, c5.2xlarge, c5.4xlarge)

    • 与实例类型之间的相对大小差异 (vCPU) 相对应的实例权重(、、、)18, 24, 2, 4)

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

    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": 10, "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" }, ... } ] }