

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

# 使用暖池减少启动时间较长的应用程序的延迟
<a name="ec2-auto-scaling-warm-pools"></a>

暖池使您能够减少引导时间非常长的应用程序的延迟，例如，因为实例需要将大量数据写入磁盘。使用暖池，您不再需要过度配置 Auto Scaling 组来管理延迟以提高应用程序性能。有关更多信息，请参阅以下博客文章 [利用 EC2 Auto Scaling 暖池更快地扩展您的应用程序](https://aws.amazon.com/blogs/compute/scaling-your-applications-faster-with-ec2-auto-scaling-warm-pools/)。

**重要**  
在不需要的情况下创建暖池可能会导致不必要的成本。如果您的首次启动时间不会给您的应用程序带来明显的延迟问题，则您可能不需要使用暖池。

**Topics**
+ [核心概念](#warm-pool-core-concepts)
+ [先决条件](#warm-pool-prerequisites)
+ [更新暖池中的实例](#update-warm-pool)
+ [相关资源](#warm-pools-related-resources)
+ [限制](#warm-pools-limitations)
+ [使用生命周期钩子](warm-pool-instance-lifecycle.md)
+ [为自动扩缩组创建一个暖池](create-warm-pool.md)
+ [查看运行状况检查状态](warm-pools-health-checks-monitor-view-status.md)
+ [AWS CLI 使用温水池的示例](examples-warm-pools-aws-cli.md)

## 核心概念
<a name="warm-pool-core-concepts"></a>

在您开始之前，请熟悉以下核心概念：

**暖池**  
暖池是预初始化的 EC2 实例的池，它位于 Auto Scaling 组旁边。无论何时您的应用程序需要向外扩展，自动扩缩组都可以在暖池上绘制，以满足其新的所需容量。它可帮助您确保实例准备好快速开启为应用程序提供流量，从而加快对横向扩展事件的响应。当实例离开暖池时，它们将计入该组的所需容量。这称为*热启动*。  
当实例处于预热池中时，仅当处于 `InService` 状态的实例的指标值大于扩缩策略的告警阈值上限（与目标跟踪扩缩策略的目标利用率相同）时，扩缩策略才会横向扩展。

**暖池大小**  
默认情况下，暖池的大小以 Auto Scaling 组的最大容量与其所需容量之差来计算。例如，如果 Auto Scaling 组的所需容量为 6 且最大容量为 10，则当您首次设置暖池并且该池正在初始化时，暖池的大小将为 4。  
要单独指定暖池的最大容量，请使用自定义规格（`MaxGroupPreparedCapacity`）选项，并为暖池设置一个大于该组当前容量的自定义值。如果您提供自定义值，则暖池的大小将计算为自定义值与组当前所需容量之间的差值。例如，如果自动扩缩组的所需容量为 6，最大容量为 20 且自定义值为 8，则当您首次设置暖池并且该池初始化时，暖池的大小将为 2。  
仅当使用大自动扩缩组时，才可能需要使用自定义规格（`MaxGroupPreparedCapacity`）选项来管理拥有暖池的成本效益。例如，与在暖池中持续预留 500 个实例以备未来使用的方案相比，拥有 1,000 个实例的自动扩缩组、最大容量为 1,500（用于为紧急流量峰值提供额外容量）和拥有 100 个实例的暖池方案可能有利于更好地实现目标。

**最小暖池大小**  
考虑使用最小大小设置来静态设置（`MinSize`）要在暖池中保留的最少实例数。默认情况下，没有设置最小大小。`MinSize` 设置适用于指定 `MaxGroupPreparedCapacity` 以确保暖池中保持最少实例数的情况，即使自动扩缩组的所需容量高于 `MaxGroupPreparedCapacity`。

**暖池实例状态**  
您可以将暖池中的实例保持在以下三种状态之一：`Stopped`、`Running` 或 `Hibernated`。将实例保持在 `Stopped` 状态是一个有效的方法，以最大限度地降低成本。对于已停止的实例，您只需为您使用的卷和已附加到实例的弹性 IP 地址付费。  
或者，您也可以将实例保持在 `Hibernated` 状态，以停止实例而不删除其内存内容 (RAM)。当某个实例处于休眠状态时，这表示操作系统会将 RAM 的内容保存到 Amazon EBS 根卷中。当再次开启此实例时，会将此根卷还原到其之前的状态，还将重新加载 RAM 内容。当实例处于休眠状态时，您只需为 EBS 卷（包括 RAM 内容的存储空间，以及已附加到实例的弹性 IP 地址）付费。  
此外还可以将暖池中的实例保持在 `Running` 状态，但我们强烈建议不要这样操作，以避免产生不必要的费用。当实例停止或休眠时，您可以节省实例本身的成本。您仅在实例正在运行时为它们付费。

**生命周期钩子**  
您使用[生命周期挂钩](warm-pool-instance-lifecycle.md)来将实例置于等待状态，以便您可以对实例执行自定义操作。自定义操作将在实例启动时或其终止之前执行。  
在暖池配置中，生命周期挂钩可以延迟实例停止或休眠以及延迟在横向扩展事件期间投入使用，直到它们完成初始化。如果您在没有生命周期钩子的情况下向 Auto Scaling 组添加暖池，则需要很长时间才能完成初始化的实例可能会停止或休眠，然后在准备就绪之前在横向扩展事件期间投入使用。

**实例再使用策略**  
默认情况下，Amazon EC2 Auto Scaling 会在您的 Auto Scaling 组横向缩减时终止您的实例。然后，它会将新实例启动到暖池中，以替换已终止的实例。  
而如果您希望将实例返回到暖池，则可以指定实例再使用策略。这使您可以再使用这些已配置为给应用程序提供流量的实例。为了确保您的暖池不会过度预置，当暖池中的实例大小根据其设置超出必要时，Amazon EC2 Auto Scaling 可以终止这些实例，以减小其大小。当终止暖池中的实例时，它会使用[默认终止策略](ec2-auto-scaling-termination-policies.md#default-termination-policy)来选择首先终止哪些实例。  
如果您希望在横向缩减时休眠实例，并且 Auto Scaling 组中有现有实例，则它们必须满足实例休眠的要求。如果不这样做，当实例返回到暖池时，它们将回退到停止状态，而不是休眠状态。
目前，您只能通过使用 AWS CLI 或 SDK 来指定实例再使用策略。此功能在控制台中不可用。

## 先决条件
<a name="warm-pool-prerequisites"></a>

在为自动扩缩组创建暖池之前，请决定如何使用生命周期挂钩将新实例初始化为适当的初始状态。

要在实例因生命周期挂钩而处于等待状态时对其执行自定义操作，您有两种选择：
+ 对于您希望在启动时对实例运行命令的简单场景，可以在为 Auto Scaling 组创建启动模板或启动配置时包含用户数据脚本。用户数据脚本只是在您的实例开启时由 cloud-init 运行的普通 Shell 脚本或 cloud-init 指令。该脚本还可通过使用实例（该脚本运行所在的实例）的 ID 来控制您的实例何时转换到下一个状态。如果您尚未这样做，请更新脚本，从实例元数据中检索实例的实例 ID。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[访问实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)。
**提示**  
要在实例重新开启时运行用户数据脚本，用户数据必须采用 MIME 多段格式，并在用户数据的 `#cloud-config` 部分中指定以下内容：  

  ```
  #cloud-config
  cloud_final_modules:
   - [scripts-user, always]
  ```
+ 对于需要服务的高级场景，例如 AWS Lambda 在实例进入或离开温池时执行某项操作，您可以为 Auto Scaling 组创建生命周期挂钩，并将目标服务配置为根据生命周期通知执行自定义操作。有关更多信息，请参阅 [支持的通知目标](warm-pool-instance-lifecycle.md#warm-pools-supported-notification-targets)。

**使实例为休眠做好准备**  
要使自动扩缩实例为使用 `Hibernated` 池状态做好准备，请按照《Amazon EC2 用户指南》**中的[休眠先决条件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)主题中所述，创建正确设置的新启动模板或启动配置，以支持实例休眠。然后，将新启动模板或启动配置与 Auto Scaling 组关联起来，并开启实例刷新，以替换与之前的启动模板或启动配置关联的实例。有关更多信息，请参阅 [使用实例刷新更新自动扩缩组中的实例](asg-instance-refresh.md)。

## 更新暖池中的实例
<a name="update-warm-pool"></a>

如需更新暖池中的实例，您可以创建新的启动模板或启动配置，并将其与自动扩缩组关联起来。所有新实例都将使用新 AMI 和在启动模板或启动配置中指定的其他更新启动，但现有实例不受影响。

要强制启动使用新启动模板或启动配置的替换暖池实例，您可以启动实例刷新，对您的组进行滚动更新。实例刷新首先将替换 `InService` 实例。然后，它将替换暖池中的实例。有关更多信息，请参阅 [使用实例刷新更新自动扩缩组中的实例](asg-instance-refresh.md)。

## 相关资源
<a name="warm-pools-related-resources"></a>

您可以访问我们的[GitHub存储库](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples)，查看温池生命周期挂钩的示例。

## 限制
<a name="warm-pools-limitations"></a>
+ 针对采用混合实例类型的自动扩缩组的暖池限制：
  + 加权混合实例组不支持暖池。如果自动扩缩组使用了实例权重，则无法添加暖池。
  + 暖池不支持混合实例组中的竞价型实例。只有在使用暖池时，才需要为按需型实例配置混合实例策略。
  + 使用混合实例组处于休眠状态的暖池时，必须在启动模板中配置 `HibernationOptions`。
+ 仅当 Amazon EC2 Auto Scaling 将 Amazon EBS 卷作为其根设备时，前者才可将实例置于 `Stopped` 或 `Hibernated` 状态。无法停止或休眠对根设备使用实例存储的实例。
+ 仅当满足《Amazon EC2 用户指南》**内的[休眠先决条件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)主题中列出的所有要求时，Amazon EC2 Auto Scaling 才可将实例置于 `Hibernated` 状态。
+ 如果您的暖池在发生向外扩展事件时耗尽，则实例将直接启动到 Auto Scaling 组（*冷启动*)。如果可用区容量不足，您也可能会遇到冷启动。
+ 如果暖池中的实例在启动过程中遇到问题，导致其无法进入 `InService` 状态，则该实例将被视为启动失败并已终止。无论根本原因是什么（例如容量不足错误或任何其他因素），此情况都适用。
+ 如果您尝试将暖池与 Amazon Elastic Kubernetes Service (Amazon EKS) 托管节点组一起使用，则仍在初始化的实例可能会注册到您的 Amazon EKS 集群。因此，在准备停止或休眠时，集群可能会在实例上安排作业。
+ 同样，如果您尝试将暖池与 Amazon ECS 集群一起使用，则实例可能会在完成初始化之前注册到集群。要解决此问题，您必须配置启动模板或启动配置，使其包含用户数据中的特殊代理配置变量。有关更多信息，请参阅 *《Amazon Elastic Container Service 开发人员指南》*中的[为自动扩缩组使用暖池](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html#using-warm-pool)。

# 在自动扩缩组中将生命周期挂钩与暖池一起使用
<a name="warm-pool-instance-lifecycle"></a>

暖池中的实例将保持自己独立的生命周期，以帮助您为每次转换创建适当的自定义操作。此生命周期旨在帮助您在实例仍在初始化之时以及将其投入使用之前，调用目标服务（例如，Lambda 函数）中的操作。

**注意**  
不会更改用于添加和管理生命周期钩子以及完成生命周期操作的 API 操作。只会更改实例生命周期。

有关添加生命周期钩子的更多信息，请参阅 [向自动扩缩组添加生命周期挂钩](adding-lifecycle-hooks.md)。有关完成生命周期操作的更多信息，请参阅 [在自动扩缩组中完成生命周期操作](completing-lifecycle-hooks.md)。

对于进入暖池的实例，出于以下原因之一，您可能需要生命周期钩子：
+ 您希望从 AMI 启动 EC2 实例，这需要很长时间才能完成初始化。
+ 您希望运行用户数据脚本来引导启动 EC2 实例。

对于离开暖池的实例，出于以下原因之一，您可能需要生命周期钩子：
+ 您可以使用一些额外的时间准备 EC2 实例以供使用。例如，您可能有这样的服务，它们必须在实例重新开启时开启，然后您的应用程序才能正常工作。
+ 您希望预填充缓存数据，以使新服务器不会使用空缓存启动。
+ 您希望使用配置管理服务将新实例注册为托管实例。

## 暖池中实例的生命周期状态转换
<a name="lifecycle-state-transitions"></a>

作为其生命周期的组成部分，Auto Scaling 实例可在多种状态之间转换。

下图显示了在您使用暖池时 Auto Scaling 状态之间的转换：

![\[暖池中实例的生命周期状态转换。\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/images/warm-pools-lifecycle-diagram.png)


¹ 此状态因暖池的池状态设置而异。如果将池状态设置为 `Running`，则此状态为 `Warmed:Running`。如果将池状态设置为 `Hibernated`，则此状态为 `Warmed:Hibernated`。

添加生命周期钩子时，请考虑以下事项：
+ 为 `autoscaling:EC2_INSTANCE_LAUNCHING` 生命周期操作配置生命周期挂钩时，新启动的实例在到达 `Warmed:Pending:Wait` 状态时会先暂停以执行自定义操作，然后在实例重启并到达 `Pending:Wait` 状态时再次重复上述操作。
+ 为 `EC2_INSTANCE_TERMINATING` 生命周期操作配置生命周期挂钩，终止的实例在到达 `Terminating:Wait` 状态时会暂停以执行自定义操作。但是，如果您指定了实例重用策略来将实例大规模返回到暖池，而不是终止它们，则对于 `EC2_INSTANCE_TERMINATING` 生命周期操作，返回暖池的实例将在 `Warmed:Pending:Wait` 状态暂停以执行自定义操作。
+ 如果对您的应用程序的需求耗尽了暖池，则 Amazon EC2 Auto Scaling 可以直接将实例启动到 Auto Scaling 组，前提条件是该组尚未达到其最大容量。如果实例直接启动到该组中，则这些实例仅在 `Pending:Wait` 状态中暂停以执行自定义奥做。
+ 要控制实例在转换到下一个状态之前保持等待状态的时间，请将您的自定义操作配置为使用 **complete-lifecycle-action** 命令。使用生命周期挂钩，实例将保持等待状态，直到您通知 Amazon EC2 Auto Scaling 指定的生命周期操作已完成，或者直至超时期结束（默认为 1 小时）。

以下总结了横向扩展事件的流程。

![\[横向扩展事件事的流图。\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/images/warm-pools-scale-out-event-diagram.png)


当实例达到等待状态时，Amazon EC2 Auto Scaling 将发送通知。本指南的 EventBridge 部分提供了这些通知的示例。有关更多信息，请参阅 [暖池示例事件类型和模式](warm-pools-eventbridge-events.md)。

## 支持的通知目标
<a name="warm-pools-supported-notification-targets"></a>

Amazon EC2 Auto Scaling 支持将以下任意内容定义为生命周期通知的通知目标：
+ EventBridge 规则
+ Amazon SNS 主题 
+ Amazon SQS 队列
+ AWS Lambda 函数

**重要**  
如果您的启动模板或启动配置中有在实例启动时配置实例的用户数据（cloud-init）脚本，则无需接收通知即可对正在启动或重启的实例执行自定义操作。

以下各节包含多个链接，它们指向描述如何配置通知目标的文档：

**EventBridge 规则** — 要在 Amazon EC2 Auto Scaling 将实例置于等待状态时运行代码，您可以创建 EventBridge 规则并指定一个 Lambda 函数作为其目标。要根据不同的生命周期通知调用不同的 Lambda 函数，您可以创建多条规则，并将每条规则与特定的事件模式和 Lambda 函数关联起来。有关更多信息，请参阅 [为温水池活动创建 EventBridge 规则](warm-pool-events-eventbridge-rules.md)。

**Amazon SNS 主题**：要在实例处于等待状态时接收通知，您可以创建 Amazon SNS 主题，然后设置 Amazon SNS 消息筛选，以根据消息属性以不同的方式传送生命周期通知。有关更多信息，请参阅 [使用 Amazon SNS 接收通知](prepare-for-lifecycle-notifications.md#sns-notifications)。

**Amazon SQS 队列**：要为生命周期通知设置传送点，使相关使用者可以接收并处理它们，您可以创建 Amazon SQS 队列和处理来自 SQS 队列的消息的队列使用者。如果您希望队列使用者根据消息属性以不同方式处理生命周期通知，则还必须设置队列使用者以解析消息，然后在特定属性与所需值匹配时对消息执行操作。有关更多信息，请参阅 [使用 Amazon SQS 接收通知](prepare-for-lifecycle-notifications.md#sqs-notifications)。

**AWS Lambda 函数** — 要在 Amazon EC2 Auto Scaling 将实例置于等待状态时运行自定义代码，您可以将 Lambda 函数指定为通知目标。Lambda 函数使用生命周期通知数据调用，允许您执行自定义操作，例如实例配置、应用程序设置或与其他 AWS 服务的集成。必须配置 Lambda 函数基于资源的策略，这样 Auto Scaling 服务相关角色才能调用该函数。有关更多信息，请参阅 [将通知 AWS Lambda 直接发送到](prepare-for-lifecycle-notifications.md#lambda-notification)。

# 为自动扩缩组创建一个暖池
<a name="create-warm-pool"></a>

本主题介绍如何为自动扩缩组创建暖池。

**重要**  
在您继续操作之前，请先完成创建暖池的[先决条件](ec2-auto-scaling-warm-pools.md#warm-pool-prerequisites)，并确认您已为自动扩缩组创建了生命周期挂钩。

## 创建暖池
<a name="create-a-warm-pool"></a>

使用以下步骤为您的自动扩缩组创建暖池。

**创建暖池（控制台）**

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

1. 选中现有组旁边的复选框。

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

1. 选择**实例管理**选项卡。

1. 在**暖池**下，选择**创建暖池**。

1. 要配置暖池，请执行以下操作：

   1. 对于**暖池实例状态**，选择要在实例进入暖池时将其转换为哪个状态。默认值为 `Stopped`。

   1. 对于**最小暖池大小**，输入要在暖池中保留的最少实例数。

   1. 对于**实例重用**，请选中**在横向缩减上重复使用**复选框，以允许自动扩缩组中的实例在横向缩减时可以退回暖池。

   1. 对于**暖池大小**，请选择可用选项之一：
      + **默认规格**：暖池的大小由自动扩缩组的最大容量与所需容量之差来确定。此选项简化了暖池管理。创建暖池后，只需调整组的最大容量即可轻松更新其大小。
      + **自定义规格**：暖池的大小由自定义值与自动扩缩组所需容量之差来确定。此选项使您可以灵活地独立于组的最大容量来管理暖池的大小。

1. 查看**基于当前设置估计暖池大小**部分，以确认默认或自定义规格如何应用于暖池大小。请记住，暖池的大小取决于自动扩缩组的所需容量；如果该组发生扩缩，则该容量将发生变化。

1. 选择**创建**。

## 使用混合实例组的实例类型选择
<a name="warm-pool-mixed-instance-types"></a>

当您的组配置了混合实例策略时，Auto Scaling 会在扩缩事件期间优先考虑已处于暖池中的实例类型。启动行为：

1. Auto Scaling 尝试使用暖池中的可用实例类型来启动实例。

1. 如果热启动失败，Auto Scaling 会尝试使用混合实例策略中所有剩余的实例类型进行冷启动。

**Example**  
**示例**  
如果将自动扩缩组配置为 10 种实例类型，而暖池包含其中 6 种实例类型。在横向扩展期间，Auto Scaling 会先尝试暖池中的 6 种实例类型。如果不成功，Auto Scaling 会通过冷启动尝试所有配置的实例类型。

这使您在可能的情况下获得暖池的性能优势，同时保持完整混合实例配置的灵活性。

## 删除暖池
<a name="delete-warm-pool"></a>

当您不再需要暖池时，您可以使用以下步骤将其删除。

**要删除暖池（控制台）**

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

1. 选中现有组旁边的复选框。

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

1. 选择**实例管理**选项卡。

1. 对于 **Warm pool**（暖池），选择 **Actions**（操作）、**Delete**（删除）。

1. 当系统提示进行确认时，选择 **Delete（删除）**。

# 查看运行状况检查状态以及运行状况检查失败的原因
<a name="warm-pools-health-checks-monitor-view-status"></a>

运行健康状况检查允许 Amazon EC2 Auto Scaling 确定实例何时运行状况不佳并应终止。对于保持在 `Stopped` 状态的暖池实例，它采用了 Amazon EBS 拥有的 `Stopped` 实例的可用性知识来识别运行状况不佳的实例。它通过调用 `DescribeVolumeStatus` API 以确定附加到实例的 EBS 卷的状态来执行此操作。对于保存在 `Running` 状态的暖池实例，它依赖 EC2 状态检查来确定实例运行状况。虽然暖池实例没有运行状况检查宽限期，但 Amazon EC2 Auto Scaling 在生命周期钩子结束之前不会开始检查实例运行状况。

当发现实例运行状况不佳时，Amazon EC2 Auto Scaling 会自动删除运行状况不佳的实例，并创建一个新实例来替换它。实例通常在运行状况检查失败后几分钟内终止。有关更多信息，请参阅 [查看运行状况检查失败原因](replace-unhealthy-instance.md)。

还支持自定义运行状况检查。如果您拥有自己的运行状况检查系统，该系统可以检测实例的运行状况并将此信息发送到 Amazon EC2 Auto Scaling，则这将非常有用。有关更多信息，请参阅 [为您的自动扩缩组设置自定义运行状况检查](set-up-a-custom-health-check.md)。

在 Amazon EC2 Auto Scaling 控制台中，您可以查看暖池实例的状态（运行状况良好或运行状况不佳)。您也可以使用 AWS CLI 或其中一个来查看他们的健康状态 SDKs。

**查看暖池实例的状态（控制台）**

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. 在**实例管理**选项卡的**暖池实例**下，**生命周期**列显示实例的状态。

   **运行状况**列显示了 Amazon EC2 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. 在**活动**选项卡的**活动历史记录**下，**状态**列显示您的 Auto Scaling 组是否已成功启动或终止实例。

   如果它终止了任何运行状况不佳的实例，**原因**列显示终止的日期和时间以及运行状况检查失败的原因。例如，“在 2021-04-01T21:48:35Z 时，实例因 EBS 卷运行状况检查失败而停止服务”。

**查看暖池实例的状态 (AWS CLI)**  
使用以下[describe-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-warm-pool.html)命令查看 Auto Scaling 组的温池。

```
aws autoscaling describe-warm-pool --auto-scaling-group-name my-asg
```

输出示例。

```
{
    "WarmPoolConfiguration": {
        "MinSize": 0,
        "PoolState": "Stopped"
    },
    "Instances": [
        {
            "InstanceId": "i-0b5e5e7521cfaa46c",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        },
        {
            "InstanceId": "i-0e21af9dcfb7aa6bf",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        }
    ]
}
```

**查看运行状况检查失败原因 (AWS CLI)**  
使用以下 [describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) 命令。

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

以下为示例响应，其中 `Description` 表示您的 Auto Scaling 组已终止实例，`Cause` 指示运行状况检查失败的原因。

扩展活动按开始时间排序。首先描述仍在进行的活动。

```
{
  "Activities": [
    {
      "ActivityId": "4c65e23d-a35a-4e7d-b6e4-2eaa8753dc12",
      "AutoScalingGroupName": "my-asg",
      "Description": "Terminating EC2 instance: i-04925c838b6438f14",
      "Cause": "At 2021-04-01T21:48:35Z an instance was taken out of service in response to EBS volume health check failure.",
      "StartTime": "2021-04-01T21:48:35.859Z",
      "EndTime": "2021-04-01T21:49:18Z",
      "StatusCode": "Successful",
      "Progress": 100,
      "Details": "{\"Subnet ID\":\"subnet-5ea0c127\",\"Availability Zone\":\"us-west-2a\"...}",
      "AutoScalingGroupARN": "arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:283179a2-f3ce-423d-93f6-66bb518232f7:autoScalingGroupName/my-asg"
    },
...
  ]
}
```

# 使用创建和管理温池的示例 AWS CLI
<a name="examples-warm-pools-aws-cli"></a>

您可以使用 AWS 管理控制台、 AWS Command Line Interface (AWS CLI) 或创建和管理温池 SDKs。

以下示例向您演示如何使用 AWS CLI创建和管理暖池。

**Topics**
+ [示例 1：将实例保持在 `Stopped` 状态](#warm-pool-configuration-ex1)
+ [示例 2：将实例保持在 `Running` 状态](#warm-pool-configuration-ex2)
+ [示例 3：将实例保持在 `Hibernated` 状态](#warm-pool-configuration-ex3)
+ [示例 4：在横向缩减时将实例返回到暖池](#warm-pool-configuration-ex4)
+ [示例 5：指定暖池中的最小实例数](#warm-pool-configuration-ex5)
+ [示例 6：使用自定义规格定义暖池大小](#warm-pool-configuration-ex6)
+ [示例 7：定义绝对暖池大小](#warm-pool-configuration-ex7)
+ [示例 8：删除暖池](#delete-warm-pool-cli)

## 示例 1：将实例保持在 `Stopped` 状态
<a name="warm-pool-configuration-ex1"></a>

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个使实例保持`Stopped`状态的温池。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped
```

## 示例 2：将实例保持在 `Running` 状态
<a name="warm-pool-configuration-ex2"></a>

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个使实例保持`Running`状态而不是`Stopped`状态的温池。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Running
```

## 示例 3：将实例保持在 `Hibernated` 状态
<a name="warm-pool-configuration-ex3"></a>

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个使实例保持`Hibernated`状态而不是`Stopped`状态的温池。这使您可以停止实例，而无需删除其内存内容 (RAM)。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Hibernated
```

## 示例 4：在横向缩减时将实例返回到暖池
<a name="warm-pool-configuration-ex4"></a>

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个使实例保持`Stopped`状态的温池，并包含`--instance-reuse-policy`选项。实例再使用策略值 `'{"ReuseOnScaleIn": true}'` 将在 Auto Scaling 组横向缩减时，通知 Amazon EC2 Auto Scaling 将实例返回到暖池。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --instance-reuse-policy '{"ReuseOnScaleIn": true}'
```

## 示例 5：指定暖池中的最小实例数
<a name="warm-pool-configuration-ex5"></a>

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个至少维护 4 个实例的温池，因此至少有 4 个实例可用于处理流量高峰。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 4
```

## 示例 6：使用自定义规格定义暖池大小
<a name="warm-pool-configuration-ex6"></a>

默认情况下，Amazon EC2 Auto Scaling 将暖池大小管理为自动扩缩组的最大容量与所需容量之差。但是，您可以使用 `--max-group-prepared-capacity` 选项管理暖池的大小，使其独立于组的最大容量。

以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个温池，并设置了在温池和 Auto Scaling 组中可以同时存在的最大实例数。如果组的所需容量为 800，则运行此命令后初始化时，暖池的初始大小为 100。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900
```

要在暖池中保留最少数量的实例，请使用命令包含 `--min-size` 选项，如下所示。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900 --min-size 25
```

## 示例 7：定义绝对暖池大小
<a name="warm-pool-configuration-ex7"></a>

如果您为 `--max-group-prepared-capacity` 和 `--min-size` 选项设置了相同的值，则暖池将具有绝对大小。以下[put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html)示例创建了一个保持 10 个实例的恒定温池大小的温池。

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 10 --max-group-prepared-capacity 10
```

## 示例 8：删除暖池
<a name="delete-warm-pool-cli"></a>

使用以下[delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html)命令删除温池。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg
```

如果温池中有实例，或者扩展活动正在进行中，请使用带`--force-delete`选项的[delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html)命令。此选项还将终止 Amazon EC2 实例和任何未完成的生命周期操作。

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg --force-delete
```