添加生命周期钩子 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

添加生命周期钩子

要将 Auto Scaling 实例置于等待状态并对它们执行自定义操作,您可以向 Auto Scaling 组添加生命周期钩子。自定义操作将在实例启动时或其终止之前执行。实例将保持等待状态,直到您完成生命周期操作,或者直到超时时段结束。

从 Amazon Web Services Management Console 创建 Auto Scaling 组后,您可以向其添加一个或多个生命周期钩子,最多可以添加 50 个生命周期钩子。您也可以使用 Amazon CLI、Amazon CloudFormation 或开发工具包在创建 Auto Scaling 组时向其添加生命周期钩子。

默认情况下,当您在控制台中添加生命周期钩子时,Amazon EC2 Auto Scaling 会向 Amazon EventBridge 发送生命周期事件通知。建议的最佳实践是使用 EventBridge 或用户数据脚本。要创建直接向 Amazon SNS 或 Amazon SQS 发送通知的生命周期钩子,您可以使用 put-lifecycle-hook 命令,如此主题中的示例所示。

添加生命周期钩子(控制台)

请按照以下步骤向您的 Auto Scaling 组添加生命周期钩子。要创建用于横向扩展(实例启动)和横向缩减(实例终止)的生命周期钩子,您必须创建两个单独的钩子。

做好准备向 Auto Scaling 组添加生命周期钩子 中所述,请在开始之前确认已设置自定义操作。

添加生命周期挂钩

  1. 打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/

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

    将在 Auto Scaling 组页面底部打开一个拆分窗格。

  3. Instance management (实例管理) 选项卡的 Lifecycle hooks (生命周期挂钩) 中,选择 Create lifecycle hook (创建生命周期挂钩)

  4. 要定义生命周期挂钩,请执行以下操作:

    1. 对于 Lifecycle hook name (生命周期挂钩名称),请指定生命周期挂钩的名称。

    2. 对于 Lifecycle transition (生命周期转换),请选择 Instance launch (实例启动)Instance terminate (实例终止)

    3. 对于检测信号超时时间,请在钩子超时之前,指定实例在横向扩展或横向缩减时保持等待状态的时长。范围从 307200 秒。

      注意

      默认超时时间为 3600 秒(一小时)。设置的超时时段越长,完成自定义操作的时间越长。如果您在超时时段结束之前完成操作,可以发送 complete-lifecycle-action 命令,以允许实例继续到下一状态。

    4. 对于默认结果,指定在生命周期钩子超时结束或发生意外故障时要执行的操作。您可以选择放弃(原定设置)或继续

      • 如果实例正在启动,继续指示您的操作已成功,并且 Amazon EC2 Auto Scaling组可将实例投入使用。否则,放弃指示您的自定义操作未成功,并且 Amazon EC2 Auto Scaling 可终止实例。

      • 如果实例正在终止,放弃和继续都允许终止实例。不过,放弃将停止任何剩余操作(例如,其他生命周期钩子),而继续将允许完成任何其他生命周期钩子。

    5. (可选)对于通知元数据,请指定您希望在 Amazon EC2 Auto Scaling 向通知目标发送消息时包含的其他信息。

  5. 选择 Create (创建)

添加生命周期钩子 (Amazon CLI)

使用 put-lifecycle-hook 命令创建和更新生命周期钩子。

要执行扩展操作,请使用以下命令。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-launch-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING

要执行缩减操作,请使用以下命令。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING

要使用 Amazon SNS 或 Amazon SQS 接收通知,请添加 --notification-target-arn--role-arn 选项。

以下示例中创建了一个生命周期钩子,用于指定名为的 my-sns-topic 的 SNS 主题作为通知目标。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg \ --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \ --notification-target-arn arn:aws:sns:region:123456789012:my-sns-topic \ --role-arn arn:aws:iam::123456789012:role/my-notification-role

该主题将使用以下键/值对接收测试通知。

"Event": "autoscaling:TEST_NOTIFICATION"

默认情况下,put-lifecycle-hook 命令会创建一个生命周期钩子,检测信号超时时间为 3600 秒(一小时)。

要更改现有生命周期钩子的检测信号超时时间,请添加 --heartbeat-timeout 选项,如以下示例所示。

aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \ --auto-scaling-group-name my-asg --heartbeat-timeout 120

如果实例已处于等待状态,则可以通过记录检测信号、使用 record-lifecycle-action-heartbeat CLI 命令来防止生命周期钩子超时。这会将超时时间增加到您创建生命周期挂钩时指定的超时值。如果您在超时时段结束之前完成操作,可以发送 complete-lifecycle-action CLI 命令,以允许实例继续到下一状态。有关更多信息以及示例,请参阅 完成生命周期操作