

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

# 在自动扩缩组中将生命周期挂钩与暖池一起使用
<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)。