

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Auto Scaling 组设置原定设置实例预热
<a name="ec2-auto-scaling-default-instance-warmup"></a>

CloudWatch 在 Auto Scaling 实例中收集和聚合使用情况数据，例如 CPU 和网络 I/O。您可以使用这些指标来创建扩缩策略，以随着所选指标值的增减调整 Auto Scaling 组中的实例数量。

您可以指定实例在达到 `InService` 状态后等待多长时间才能向聚合指标提供使用数据。这一指定的时间称为*默认实例预热*。此项可防止动态扩缩受到尚未处理应用程序流量，并且可能暂时存在计算资源使用率较高的单个实例的指标影响。

为了优化目标跟踪扩缩策略和步进扩缩策略的性能，强烈建议您启用并配置默认实例预热功能。默认情况下，将不会启用或配置此项。

启用默认实例预热时，请记住，如果自动扩缩组设置为使用实例维护策略，或者使用实例刷新来替换实例，则可以防止实例在完成初始化之前计入最小运行正常百分比。

**Topics**
+ [扩缩性能注意事项](#scaling-performance-considerations)
+ [选择默认的实例预热时间](#choose-the-default-instance-warmup)
+ [为组启用原定设置实例预热](enable-default-instance-warmup.md)
+ [验证组的默认实例预热时间](verify-default-instance-warmup.md)
+ [查找具有先前设置实例预热时间的扩缩策略](find-policies-with-a-previously-set-instance-warmup.md)
+ [清除先前为扩缩策略设置的实例预热](clearing-the-previously-set-instance-warmup.md)

## 扩缩性能注意事项
<a name="scaling-performance-considerations"></a>

对于大多数应用程序来说，拥有一个适用于所有功能的默认实例预热时间（而不是不同功能使用不同的预热时间），是非常有用的。例如，如果您未设置默认实例预热，则实例刷新功能将使用运行状况检查宽限期作为默认预热时间。如果您有任何目标跟踪扩缩策略和步进扩缩策略，这些策略会使用为默认冷却时间设置的值作为默认预热时间。如果您有任何预测性扩展策略，则这些策略没有默认预热时间。

当实例正在预热时，仅当未预热实例的指标值大于策略的警报阈值上限（或目标跟踪扩缩策略的目标利用率）时，您的动态扩缩策略才会横向扩展。如果需求下降，横向缩减将变得更加保守，以保护应用程序的可用性。这样可以阻止动态扩缩的横向缩减活动，直到新实例完成预热。

在横向扩展时，Amazon EC2 Auto Scaling 在决定要向该组添加多少实例时，会将正在预热的实例视为该组容量的一部分。因此，需要添加相似容量的多个警报违规会导致一次扩缩活动。旨在持续横向扩展，但不会过度扩缩。

如果未启用默认实例预热，则实例在向其发送指标 CloudWatch 并将其计入当前容量之前等待的时间将因实例而异。因此，与正在发生的实际工作负载相比，可能无法预测您的扩缩策略的执行情况。

例如，假设一个具有重复 on-and-off工作负载模式的应用程序。预测性扩缩策略用于对是否增加实例数量做出反复决策。由于预测性扩展策略没有默认预热时间，因此这些实例会立即开始为聚合指标做出贡献。如果这些实例在启动时资源使用量较高，那么添加实例可能会导致聚合指标出现峰值。这可能会影响使用这些指标的任何动态扩缩策略，具体取决于使用量需要多长时间才能稳定下来。如果突破了动态扩缩策略的警告阈值上限，则该组的大小会再次增加。在新实例预热期间，横向缩减活动将被阻止。

## 选择默认的实例预热时间
<a name="choose-the-default-instance-warmup"></a>

设置原定设置实例预热的关键是确定实例需要多长时间才能完成初始化，以及资源消耗在达到 `InService` 状态后需要多长时间才能稳定下来。选择实例预热时间时，尝试优化平衡采集合法流量的使用数据与尽量减少与启动时的临时使用峰值相关的数据采集。

假设您有一个附加到 Elastic Load Balancing 负载均衡器的自动扩缩组。当新实例完成启动后，它们将在进入 `InService` 状态之前注册到负载均衡器。在实例进入 `InService` 状态之后，资源消耗仍然可能会经历暂时的高峰，然后才会逐渐稳定下来。例如，与无需下载大型资产的轻量级 Web 服务器相比，对于必须下载并缓存大型资产的应用程序服务器，其资源消耗将需要更长的时间才能稳定。实例预热提供了稳定资源消耗所需的时间延迟。

**重要**  
如果您不确定需要多长时间预热，则可以从 300 秒开始。然后逐渐减少或增加该时间，直到您的应用程序获得最佳扩缩性能为止。可能需要执行几次此操作才能得出正确设置。或者，如果您的任何扩缩策略有自己的预热时间（`EstimatedInstanceWarmup`），则可以使用此值开始。有关更多信息，请参阅 [查找具有先前设置实例预热时间的扩缩策略](find-policies-with-a-previously-set-instance-warmup.md)。

对于需要在启动时运行配置任务或脚本的使用案例，应考虑使用生命周期挂钩。生命周期挂钩可以将实例投入使用的时间延迟到实例完成初始化之后。如果引导启动脚本需要一段时间才能完成，则生命周期钩子将特别有用。如果您添加了生命周期挂钩，则可以降低原定设置实例预热的值。有关使用生命周期钩子的更多信息，请参阅 [Amazon EC2 Auto Scaling 生命周期钩子](lifecycle-hooks.md)。

# 为组启用原定设置实例预热
<a name="enable-default-instance-warmup"></a>

您可以在创建 Auto Scaling 组时启用原定设置实例预热。也可以为现有的组启用此功能。

通过启用默认实例预热功能，您不必再为以下功能指定预热参数值：
+ [实例刷新](instance-refresh-overview.md#instance-refresh-core-concepts)
+ [目标跟踪扩缩](as-scaling-target-tracking.md#as-target-tracking-scaling-warmup)
+ [分步扩缩](as-scaling-simple-step.md#as-step-scaling-warmup)

------
#### [ Console ]

**为新的组启用原定设置实例预热（控制台）**  
创建 Auto Scaling 组时，在 **Configure advanced options**（配置高级选项）页面的 **Additional settings**（其他设置）下，选择 **Enable default instance warmup**（启用原定设置实例预热）选项。选择应用程序所需的预热时间。

------
#### [ AWS CLI ]

**为新的组启用原定设置实例预热（AWS CLI）**  
要为 Auto Scaling 组启用原定设置实例预热，请添加 `--default-instance-warmup` 选项并指定一个介于 0 到 3600 之间的值（以秒为单位）。启用此功能后，将值设为 `-1` 将会关闭此设置。

以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令使用名称创建一个 Auto Scaling 组，*my-asg*并启用值为*120*秒的默认实例预热。

```
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120 ...
```

**提示**  
如果此命令引发错误，请确保已将 AWS CLI 本地版本更新到最新版本。

------

------
#### [ Console ]

**为现有的组启用原定设置实例预热（控制台）**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 在屏幕顶部的导航栏中，选择您在其中创建了自动扩缩组的 AWS 区域 。

1. 选中 Auto Scaling 组旁边的复选框。

   这时将在页面底部打开一个拆分窗格。

1. 在 **Details**（详细信息）选项卡上，选择 **Advanced configurations**（高级配置）、**Edit**（编辑）。

1. 对于**默认实例预热**，选择应用程序所需的预热时间。

1. 选择**更新**。

------
#### [ AWS CLI ]

**为现有的组启用原定设置实例预热（AWS CLI）**  
以下示例使用[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令为名*my-asg*为的现有 Auto Scaling 组启用默认实例预热，其值为*120*秒。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120
```

**提示**  
如果此命令引发错误，请确保已将 AWS CLI 本地版本更新到最新版本。

------

# 验证组的默认实例预热时间
<a name="verify-default-instance-warmup"></a>

使用 AWS CLI按照以下程序验证自动扩缩组的默认实例预热时间。

**验证自动扩缩组的默认实例预热时间**  
使用以下 [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令。*my-asg*替换为您的 Auto Scaling 组的名称。

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

以下为响应示例。

```
{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupName": "my-asg",
            "AutoScalingGroupARN": "arn",
            ...
            "DefaultInstanceWarmup": 120
        }
    ]
}
```

# 查找具有先前设置实例预热时间的扩缩策略
<a name="find-policies-with-a-previously-set-instance-warmup"></a>

要确定您的策略是否有为 `EstimatedInstanceWarmup` 设置的自己的预热时间，请使用 AWS CLI运行以下 [describe-policies](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-policies.html) 命令。*my-asg*替换为您的 Auto Scaling 组的名称。

```
aws autoscaling describe-policies --auto-scaling-group-name my-asg
  --query 'ScalingPolicies[?EstimatedInstanceWarmup!=`null`]'
```

下面是示例输出。

```
[
  {
    "AutoScalingGroupName":"my-asg",
    "PolicyName":"cpu50-target-tracking-scaling-policy",
    "PolicyARN":"arn",
    "PolicyType":"TargetTrackingScaling",
    "StepAdjustments":[],
    "EstimatedInstanceWarmup":120,
    "Alarms":[{
        "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e",
        "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e"
      },
      {
            "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2",
            "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2"
    }],
    "TargetTrackingConfiguration":{
      "PredefinedMetricSpecification":{
        "PredefinedMetricType":"ASGAverageCPUUtilization"
      },
      "TargetValue":50.0,
      "DisableScaleIn":false
    },
    "Enabled":true
  },
  
    ... additional policies ...
                        
]
```

# 清除先前为扩缩策略设置的实例预热
<a name="clearing-the-previously-set-instance-warmup"></a>

启用默认实例预热后，更新仍有自己的预热时间的所有扩缩策略，以清除先前设置的值。否则，它将覆盖原定设置实例预热。

您可以使用控制台 AWS CLI、或更新扩展策略 AWS SDKs。本节介绍控制台的操作步骤。如果您使用 AWS CLI 或 AWS SDKs，请确保保留现有的策略配置，但要移除该`EstimatedInstanceWarmup`属性。更新现有扩展策略时，该策略将替换为您以编程方式调用[PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PutScalingPolicy.html)时指定的策略。不保留原始值。

**清除先前为扩缩策略设置的实例预热（控制台）**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

1. 选中 Auto Scaling 组旁边的复选框。

   这时将在页面底部打开一个拆分窗格。

1. 在**自动扩缩**选项卡的**动态扩缩策略**中，选择您感兴趣的策略，然后依次选择**操作**、**编辑**。

1. 对于**实例预热**，请清除实例预热值，改用默认实例预热值。

1. 选择**更新**。