

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

# 基于最大实例生命周期替换 Auto Scaling 实例
<a name="asg-max-instance-lifetime"></a>

最大实例生命周期指定实例在终止和替换之前可提供服务的最长时间（以秒为单位）。由于内部安全策略或外部合规性控制，常见使用案例可能需要按计划替换您的实例。

您必须指定至少 86,400 秒（一天）的值。要清除以前设置的值，请指定新值 0。此设置适用于 Auto Scaling 组中的所有当前和未来实例。

**Topics**
+ [注意事项](#max-instance-lifetime-considerations)
+ [设置最大实例生命周期](#set-maximum-instance-lifetime)
+ [限制](#maximum-instance-lifetime-limitations)

## 注意事项
<a name="max-instance-lifetime-considerations"></a>

以下是使用此功能时的注意事项：
+ 每当替换旧实例并启动新实例时，新实例都会使用当前与自动扩缩组关联的启动模板或启动配置。如果启动模板或启动配置指定了其他版本应用程序的亚马逊机器映像（AMI）ID，则将自动部署此版本的应用程序。
+ 将最大实例生命周期设置过低可能会导致实例的替换速度超出预期。Amazon EC2 Auto Scaling 通常一次替换一个实例，两次替换之间会有暂停。但是，如果指定的最大实例生命周期未提供足够的时间来单独替换每个实例，则 Amazon EC2 Auto Scaling 必须一次替换多个实例。可能会一次替换多个实例，最多可达 Auto Scaling 组当前容量的 10%。为避免一次替换过多实例，请设置更长的最大实例生命周期，或者使用实例横向缩减保护来暂时防止单个实例被终止。有关更多信息，请参阅 [使用实例横向缩减保护以控制实例终止](ec2-auto-scaling-instance-protection.md)。
+ 默认情况下，Amazon EC2 Auto Scaling 会创建用于终止实例的新扩展活动，然后终止该实例。在实例终止期间，另一个扩缩活动将会启动一个新实例。您可以使用实例维护策略将此行为更改为在终止前启动。有关更多信息，请参阅 [实例维护策略](ec2-auto-scaling-instance-maintenance-policy.md)。

## 设置最大实例生命周期
<a name="set-maximum-instance-lifetime"></a>

在控制台中创建 Auto Scaling 组时，您将无法设置最大实例生命周期。但在创建该组后，您就可以对其进行编辑，以设置最大实例生命周期。

**为组设置最大实例生命周期（控制台）**

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

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

   将在 **Auto Scaling groups**（Auto Scaling 组）页面底部打开一个拆分窗格，其中显示有关您选择的组的信息。

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

1. 对于 **Maximum instance lifetime** (最大实例生命周期)，输入实例可使用的最长秒数。

1. 选择**更新**。

在 **Activity**（活动）选项卡上的 **Activity history**（活动历史记录）下，您可以通过其整个历史记录查看该组中实例的替换情况。

**为组设置最大实例生命周期 (AWS CLI)**  
您还可以使用 AWS CLI 为新的或现有 Auto Scaling 组设置最长实例生命周期。

对于新的 Auto Scaling 组，请使用[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令。

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

以下示例 `config.json` 文件显示的最长实例生命周期为 `2592000` 秒（30 天）。

```
{
    "AutoScalingGroupName": "my-asg",
    "LaunchTemplate": {
        "LaunchTemplateName": "my-launch-template",
        "Version": "$Default"
    },
    "MinSize": 1,
    "MaxSize": 5,
    "MaxInstanceLifetime": 2592000,
    "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782",
    "Tags": []
}
```

对于现有的 Auto Scaling 组，请使用[update-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/update-auto-scaling-group.html)命令。

```
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-existing-asg --max-instance-lifetime 2592000
```

**验证 Auto Scaling 组的最大实例生命周期**  
使用 [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) 命令。

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

## 限制
<a name="maximum-instance-lifetime-limitations"></a>
+ **不能保证每个实例的最大生命周期都是准确的**：不能保证仅在实例最大持续时间结束时替换实例。在某些情况下，Amazon EC2 Auto Scaling 可能需要在您更新最大实例生命周期参数后立即开始替换实例。此行为的原因是避免同时替换所有实例。
+ **遵循实例横向缩减保护**：Amazon EC2 Auto Scaling 提供实例横向缩减保护，以帮助您控制可以终止哪些实例。对实例启用此保护后，即使该实例已达到其最大实例生命周期，Amazon EC2 Auto Scaling 也不会终止该实例。
+ **实例在启动前终止**：当自动扩缩组中只有一个实例时，最大实例生命周期功能可能会导致中断，因为默认情况下 Amazon EC2 Auto Scaling 会终止实例，然后启动新实例。要将此行为更改为在终止前启动，请参阅 [实例维护策略](ec2-auto-scaling-instance-maintenance-policy.md)。