Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

简单扩展和步进扩展策略

Auto Scaling 起初只支持简单扩展策略。如果您在引入目标跟踪和步进策略前创建了自己的扩展策略,您的策略将被视为简单扩展策略。

即使只有一个步进调整,我们也建议您使用步进扩展策略而不是简单扩展策略,因为我们会持续评估警报,在扩展活动或健康检查替换期间不会锁定组。如果您根据一个按 Auto Scaling 组中的实例数成比例增减的利用率指标进行扩展,我们建议您改用目标跟踪扩展策略。有关更多信息,请参阅 目标跟踪扩展策略

简单扩展策略

扩展活动启动后,该策略必须等待扩展活动或健康检查替换完成并且冷却时间到期,然后才能响应其他警报。冷却时间有助于防止 Auto Scaling 在先前活动产生明显影响前启动其他扩展活动。您可以使用与 Auto Scaling 组关联的默认冷却时间,也可以通过为策略指定冷却时间覆盖默认值。有关更多信息,请参阅 Auto Scaling 冷却时间

步进扩展策略

扩展活动启动后,该策略继续响应其他警报,甚至在进行扩展活动或健康检查替换时也是如此。因此,Auto Scaling 会在接收警报消息时评估任何突破的警报。如果要创建扩展策略,可以指定影响聚合指标的新启动实例就绪所需的估计预热时间。有关更多信息,请参阅 实例预热

注意

步进扩展策略不支持冷却时间。因此,对此类策略不能指定冷却时间,组的默认冷却时间也不适用。

扩展调整类型

执行步进扩展或简单扩展策略时,它将使用策略中指定的扩展调整来更改 Auto Scaling 组的当前容量。扩展调整不能将组容量更改为超出最大组大小或低于最小组大小。

对于步进扩展和简单扩展,Auto Scaling 支持以下调整类型:

  • ChangeInCapacity—将当前组容量增加或减小指定的实例数。正值将增加容量,负调整值将减小容量。

    示例:如果当前组容量为 3 个实例,调整值为 5,则当此策略执行时,Auto Scaling 会向组添加 5 个实例,总数为 8 个实例。

  • ExactCapacity—将当前组容量更改为指定的实例数量。为该调整类型指定一个正值。

    示例:如果当前组容量为 3 个实例,调整值为 5,则当此策略执行时,Auto Scaling 会将容量更改为 5 个实例。

  • PercentChangeInCapacity—将当前组容量增加或减小指定的百分比。正值将增加容量,负值将减小容量。如果得到的值不是整数,Auto Scaling 会进行舍入,如下所示:

    • 大于 1 的值向下取整。例如,12.7 取整为 12

    • 0 和 1 之间的值取整为 1。例如,.67 取整为 1

    • 0 和 -1 之间的值取整为 -1。例如,-.58 取整为 -1

    • 小于 -1 的值向上取整。例如,-6.67 取整为 -6

    示例:如果当前容量为 10 个实例,调整值为 10%,则当此策略执行时,Auto Scaling 会向组添加 1 个实例,总数为 11 个实例。

借助 PercentChangeInCapacity,您还可以指定要扩展的最少实例数量 (使用 MinAdjustmentMagnitude 参数或使用控制台中的 Add instances in increments of at least)。例如,假定您创建一个增加 25% 的策略,并且您指定最小增量为 2 个实例。如果您有一个 Auto Scaling 组包含 4 个实例,而要执行该扩展策略,则 4 的 25% 就是 1 个实例。但是,因为您指定了最小增量 2,则 Auto Scaling 将添加 2 个实例。

步进调整

创建步进扩展策略时,将添加一个或多个步进调整,让您可以根据警报违例的严重程度进行扩展。每个步进调整都根据扩展调整类型指定一个指标值下限、一个指标值上限和扩展量。

策略步进调整有一些规则:

  • 步进调整范围不能重叠或有间隙。

  • 只有一个步进调整可以有空下限 (负无穷)。如果一个步进调整有负下限,则必须有一个步进调整有空下限。

  • 只有一个步进调整可以有空上限 (正无穷)。如果一个步进调整有正上限,则必须有一个步进调整有空上限。

  • 同一步进调整中的上限和下限不能为空。

  • 如果指标值高于违例阈值,则含下限而不含上限。如果指标值低于违例阈值,则不含下限而含上限。

Auto Scaling 将该聚合类型应用于所有实例的指标数据点。它将聚合指标值与步进调整定义的上限和下限进行比较,以确定执行哪个步进调整。

如果您使用 AWS 管理控制台,则以绝对值的形式指定上限和下限。如果您使用 API 或 CLI,则以违例阈值相对值的形式指定上限和下限。例如,假设您有一个警报的违例阈值为 50,扩展调整类型为 PercentChangeInCapacity。还有具有以下步进调整的扩展和收缩策略:

扩大策略
下限 上限 调整 指标值

0

10

0

50 <= < 60

10

20

10

60 <= < 70

20

null

30

70 <= < +无穷

缩小策略

下限 上限 调整 指标值

-10

0

0

40 < <= 50

-20

-10

-10

30 < <= 40

null

-20

-30

-无穷 < <= 30

您的组的当前容量和所需容量均为 10 个实例。当聚合指标值大于 40 小于 60 时,该组维持其当前容量和所需容量。

如果指标值达到 60,根据扩展策略的第二个步进调整(增加 10 个实例的 10%),Auto Scaling 会将组的所需容量增加 1 个实例,成为 11 个实例。在新实例运行并且其指定预热时间过期后,Auto Scaling 会将组的当前容量增加到 11 个实例。如果在容量增加后指标值又增加到 70,根据扩展策略的第三个步进调整(增加 11 个实例的 30%,即 3.3 个实例,向下取整为 3 个实例),Auto Scaling 会将组的所需容量增加另外 3 个实例,成为 14 个实例。

如果指标值降到 40,根据收缩策略的第二个步进调整(删除 14 个实例的 10%,向下取整为 1 个实例),Auto Scaling 会将组的所需容量减小 1 个实例,成为 13 个实例。如果在容量减小后指标值又降到 30,根据收缩策略的第三个步进调整(删除 13 个实例的 30%,即 3.9 个实例,向下取整为 3 个实例),Auto Scaling 会将组的所需容量减少另外 3 个实例,成为 10 个实例。

实例预热

通过步进扩展策略可以指定新启动实例的预热时间(秒数)。在指定预热时间过期前,实例不会计入 Auto Scaling 组的聚合指标。

在扩展时,Auto Scaling 不会将正在预热的实例看作当前组容量的一部分。因此,落入同一步进调整中的多个警报违例只会导致一个扩展活动。这可确保添加的实例不会超出您的需要。使用上一部分中的示例,假设指标值增加到 60,而在新实例仍在预热时又增加到 62。当前容量仍为 10 个实例,所以 Auto Scaling 应添加 1 个实例(10 个实例的 10%),但该组的所需容量已经是 11 个实例了,因此 Auto Scaling 不会进一步增加所需容量。但是,如果指标在新实例仍在预热时增长到 70,Auto Scaling 应添加 3 个实例(10 个实例的 30%),但该组的所需容量已经是 11 了,所以 Auto Scaling 只添加 2 个实例,因为新的所需容量为 13 个实例。

在收缩时,Auto Scaling 将正在终止的实例视为当前组容量的一部分。因此不会从 Auto Scaling 组中删除更多实例。

正在进行扩展活动时不能启动收缩活动。

创建带有步进扩展策略的 Auto Scaling 组

您可以创建一个使用 CloudWatch 警报来确定 Auto Scaling 组何时应扩大或缩小的扩展策略。每个 CloudWatch 警报均监控一个指标,并在该指标超过您在策略中指定的阈值时向 Auto Scaling 发送消息。使用警报可以监控所用的 AWS 服务发送给 CloudWatch 的任何指标,也可以创建和监控自己的自定义指标。

创建 CloudWatch 警报后,可以指定 Amazon SNS 主题,以在警报状态改变时发送电子邮件通知。有关更多信息,请参阅 创建 Amazon CloudWatch 警报

使用控制台可以创建具有两个扩展策略的 Auto Scaling 组:将组容量增加 30% 的扩展策略,以及将组容量减小到两个实例的收缩策略。

根据指标创建具有扩展的 Auto Scaling 组

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

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling Groups

  3. 选择 Create Auto Scaling group

  4. Create Auto Scaling Group 页面上,执行以下操作之一:

    • 选择 Create an Auto Scaling group from an existing launch configuration,选择现有的启动配置,然后选择 Next Step

    • 如果您没有想要使用的启动配置,请选择 Create a new launch configuration,然后按照指示操作。有关更多信息,请参阅 创建启动配置

  5. Configure Auto Scaling group details 页面上,执行以下操作:

    1. 对于 Group name,键入 Auto Scaling 组的名称。

    2. 对于 Group size,键入 Auto Scaling 组所需的容量。

    3. 如果启动配置指定需要 VPC 的实例(如 T2 实例),则必须从 Network 选择一个 VPC。另外,如果您的 AWS 账户支持 EC2-Classic 并且这些实例不需要 VPC,您可以选择 Launch info EC2-Classic 或 VPC。

    4. 如果您在上一步中选择了 VPC,请从 Subnet 中选择一个或多个子网。如果您在上一步中已选择 EC2-Classic,请从 Availability Zone(s) 中选择一个或多个可用区。

    5. 选择 Next: Configure scaling policies

  6. Configure scaling policies (配置扩展策略) 页面上,执行以下操作:

    1. 选择 Use scaling policies to adjust the capacity of this group (使用扩展策略调整此组的容量)

    2. 使用以 Scale between 开头的行指定 Auto Scaling 组的最小大小和最大大小。例如,如果组已经是最大大小,则需要指定一个新的最大值才能进行扩大。

       为您的组指定最小容量和最大容量。
    3. Increase Group Size 下指定扩展策略。您可以选择为该策略指定名称,然后选择 Add new alarm

    4. Create Alarm 页面上,选择 create topic。对于 Send a notification to,键入 SNS 主题的名称。对于 With these recipients,键入一个或多个用于接收通知的电子邮件地址。如果需要,可以使用自定义名称替换默认警报名称。接下来,为策略指定指标和标准。例如,您可以保留 Whenever 的默认设置 (CPU 使用率平均值)。对于 Is,选择 >= 并键入 80%。对于 For at least,键入 1 个连续的 5 Minutes 时间段。选择 Create Alarm

       创建警报
    5. 对于 Take the action,选择 Add,在下一个字段中键入 30,然后选择 percent of group。默认情况下,此步骤调整的下限为警报阈值,上限为 null(正无穷)。

      要添加其他步骤调整,请选择 Add step。要设置可扩展的最少实例数,请更新 Add instances in increments of at least 1 instance(s) 中的数量字段。

      (可选)建议您采用默认值通过几个步骤创建两个扩展策略。要创建简单扩展策略,请选择 Create a simple scaling policy。有关更多信息,请参阅 扩展策略类型

       创建扩展策略
    6. Decrease Group Size 下指定收缩策略。您可以选择为该策略指定名称,然后选择 Add new alarm

    7. Create Alarm 页面上,您可以选择为扩展策略创建的通知,也可以为收缩策略创建一个新通知。如果需要,可以使用自定义名称替换默认警报名称。保留 Whenever 的默认设置(CPU 使用率平均值)。对于 Is,选择 <= 并键入 40%。对于 For at least,键入 1 个连续的 5 Minutes 时间段。选择 Create Alarm

    8. 对于 Take the action,选择 Remove,在下一个字段中键入 2,然后选择 instances。默认情况下,此步骤调整的上限为警报阈值,下限为 null(负无穷)。要添加其他步骤调整,请选择 Add step

      (可选)建议您采用默认值通过几个步骤创建两个扩展策略。要创建简单扩展策略,请选择 Create a simple scaling policy。有关更多信息,请参阅 扩展策略类型

       创建扩展策略
    9. 选择 Review

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

  7. 使用以下步骤验证您的 Auto Scaling 组的扩展策略。

    1. Auto Scaling Group creation status 页面确认您的 Auto Scaling 组已成功创建。选择 View your Auto Scaling Groups

    2. Auto Scaling Groups 页面上,选择您刚创建的 Auto Scaling 组。

    3. Activity History 选项卡上,Status 列显示 Auto Scaling 组是否具有已成功启动的实例。

    4. Instances 选项卡上,Lifecycle 列包含实例的状态。启动实例只需很短的时间。实例启动后,其生命周期状态更改为 InService

      Health Status (运行状态) 列显示对您的实例进行 EC2 实例运行状况检查的结果。

    5. Scaling Policies 选项卡上,可以查看为 Auto Scaling 组创建的策略。

使用 AWS CLI 配置扩展策略

按如下方式使用 AWS CLI 为 Auto Scaling 组配置步进扩展策略。

步骤 1:创建 Auto Scaling 组

使用以下 create-auto-scaling-group 命令并利用启动配置 my-lc 创建名为 my-asg 的 Auto Scaling 组。如果您没有要使用的启动配置,可以创建一个。有关更多信息,请参阅 create-launch-configuration

Copy
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --launch-configuration-name my-lc --max-size 5 --min-size 1 --availability-zones "us-west-2c"

第 2 步:创建扩展策略

您可以创建扩展策略,告诉 Auto Scaling 组在指定条件改变时要执行什么操作。

示例:my-scaleout-policy

使用以下 put-scaling-policy 命令创建名为 my-scaleout-policy 的扩展策略,调整类型为 PercentChangeInCapacity,它将组容量增加 30%:

Copy
aws autoscaling put-scaling-policy --policy-name my-scaleout-policy --auto-scaling-group-name my-asg --scaling-adjustment 30 --adjustment-type PercentChangeInCapacity

Auto Scaling 返回作为此策略唯一名称的 ARN。随后,您可以使用 ARN 或者策略名称和组名称的组合来指定策略。将此 ARN 保存在安全位置。您需要使用它来创建 CloudWatch 警报。

{
    "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:ac542982-cbeb-4294-891c-a5a941dfa787:autoScalingGroupName/my-asg:policyName/my-scaleout-policy
}

示例:my-scalein-policy

使用以下 put-scaling-policy 命令创建名为 my-scalein-policy 的扩展策略,调整类型为 ChangeInCapacity,它将组容量减少两个实例:

Copy
aws autoscaling put-scaling-policy --policy-name my-scalein-policy --auto-scaling-group-name my-asg --scaling-adjustment -2 --adjustment-type ChangeInCapacity

Auto Scaling 返回策略的 ARN。将此 ARN 保存在安全位置。您需要使用它来创建 CloudWatch 警报。

{
    "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:4ee9e543-86b5-4121-b53b-aa4c23b5bbcc:autoScalingGroupName/my-asg:policyName/my-scalein-policy
}

第 3 步:创建 CloudWatch 警报

在步骤 2 中,您已创建扩展策略,这些策略可以指示 Auto Scaling 组在指定条件发生变化时如何扩大和缩小。在此步骤中,您将通过标识要监控的指标、定义用于扩展的条件来创建警报,然后将警报与扩展策略相关联。

示例:AddCapacity

使用以下 CloudWatch put-metric-alarm 命令创建警报,该警报在指定指标的值超过 80 时会增加 Auto Scaling 组的大小。例如,您可以在所有实例的平均 CPU 使用率 (CPUUtilization) 增加到 80% 时添加容量。要使用您自己的自定义指标,请在 --metric-name 中指定其名称,并在 --namespace 指定其命名空间。

Copy
aws cloudwatch put-metric-alarm --alarm-name AddCapacity --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 120 --threshold 80 --comparison-operator GreaterThanOrEqualToThreshold --dimensions "Name=AutoScalingGroupName,Value=my-asg" --evaluation-periods 2 --alarm-actions PolicyARN

示例:RemoveCapacity

使用以下 CloudWatch put-metric-alarm 命令创建警报,该警报在指定指标的值超过 40 时会减小 Auto Scaling 组的大小。例如,您可以在所有实例的平均 CPU 使用率 (CPUUtilization) 减少到 40% 时删除容量。要使用您自己的自定义指标,请在 --metric-name 中指定其名称,并在 --namespace 中指定其命名空间。

Copy
aws cloudwatch put-metric-alarm --alarm-name RemoveCapacity --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 120 --threshold 40 --comparison-operator LessThanOrEqualToThreshold --dimensions "Name=AutoScalingGroupName,Value=my-asg" --evaluation-periods 2 --alarm-actions PolicyARN