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

添加生命周期钩子

要将 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. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  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 命令,以允许实例继续到下一状态。有关更多信息以及示例,请参阅 完成生命周期操作