本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向你的 Auto Scaling 群组添加生命周期挂钩
要将 Auto Scaling 实例置于等待状态并对它们执行自定义操作,您可以向 Auto Scaling 组添加生命周期钩子。自定义操作将在实例启动时或其终止之前执行。实例将保持等待状态,直到您完成生命周期操作,或者直到超时时段结束。
从创建 Auto Scaling 组后 Amazon Web Services Management Console,您可以向该组添加一个或多个生命周期挂钩,总共可添加最多 50 个生命周期挂钩。您还可以在创建 Auto Scaling 组时使用 Amazon CLI Amazon CloudFormation、或 SDK 向 Auto Scaling 组添加生命周期挂钩。
默认情况下,当您在控制台中添加生命周期挂钩时,Amazon EC2 Auto Scaling 会向亚马逊发送生命周期事件通知 EventBridge。建议使用 EventBridge 或用户数据脚本。要创建直接向 Amazon SNS 或 Amazon SQS 发送通知的生命周期挂钩,您可以使用命令,如put-lifecycle-hook本主题中的示例所示。
添加生命周期钩子(控制台)
请按照以下步骤向您的自动扩缩组添加生命周期挂钩。要添加用于横向扩展(实例启动)和横向缩减(实例终止或返回至暖池)的生命周期挂钩,您必须创建两个单独的钩子。
如 做好准备向 Auto Scaling 组添加生命周期钩子 中所述,请在开始之前确认已设置自定义操作。
为横向扩展添加生命周期挂钩
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的自动扩缩组旁边的复选框。这时将在页面底部打开一个拆分窗格。
-
在 Instance management (实例管理) 选项卡的 Lifecycle hooks (生命周期挂钩) 中,选择 Create lifecycle hook (创建生命周期挂钩)。
-
要为横向扩展(实例启动)定义生命周期挂钩,请执行以下操作:
-
对于 Lifecycle hook name (生命周期挂钩名称),请指定生命周期挂钩的名称。
-
对于生命周期转换,请选择实例启动。
-
对于检测信号超时时间,请在钩子超时之前,指定实例在横向扩展时保持等待状态的时长(以秒为单位)。范围从
30
到7200
秒。设置的超时时段越长,完成您的自定义操作的时间越长。然后,如果您在超时期限结束之前完成,请发送complete-lifecycle-action命令以允许实例进入下一个状态。 -
对于默认结果,指定在生命周期钩子超时结束或发生意外故障时要执行的操作。您可以选择继续或放弃。
-
如果您选择继续,自动扩缩组可以继续执行任何其他生命周期挂钩,然后将实例投入使用。
-
如果选择 放弃,自动扩缩组停止任何剩余操作并立即终止实例。
-
-
(可选)对于通知元数据,请指定您希望在 Amazon EC2 Auto Scaling 向通知目标发送消息时包含的其他信息。
-
-
选择创建。
为横向缩减添加生命周期挂钩
-
选择创建生命周期挂钩,以从为横向扩展创建生命周期挂钩而中断的地方继续操作。
-
要为横向缩减定义生命周期挂钩(实例终止或返回到暖池),请执行以下操作:
-
对于 Lifecycle hook name (生命周期挂钩名称),请指定生命周期挂钩的名称。
-
对于生命周期转换,请选择实例终止。
-
对于检测信号超时时间,请在钩子超时之前,指定实例在横向扩展时保持等待状态的时长(以秒为单位)。我们建议将超时时间缩短
30
为120
几秒,具体取决于执行任何最终任务(例如从中提取 EC2 日志)所需的时间 CloudWatch。 -
对于 Default result(默认结果),请指定超时结束或发生意外故障时 Auto Scaling 组执行的操作。ABANDON(放弃)和 CONTINUE(继续)都允许终止实例。
-
如果您选择 CONTINUE(继续),Auto Scaling 组可以在终止之前继续执行任何剩余操作(如其他生命周期钩子)。
-
如果选择 放弃,自动扩缩组将立即终止实例。
-
-
(可选)对于通知元数据,请指定您希望在 Amazon EC2 Auto Scaling 向通知目标发送消息时包含的其他信息。
-
-
选择创建。
添加生命周期钩子 (Amazon CLI)
使用put-lifecycle-hook命令创建和更新生命周期挂钩。
要执行扩展操作,请使用以下命令。
aws autoscaling put-lifecycle-hook --lifecycle-hook-name
my-launch-hook
\ --auto-scaling-group-namemy-asg
\ --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING
要执行缩减操作,请使用以下命令。
aws autoscaling put-lifecycle-hook --lifecycle-hook-name
my-termination-hook
\ --auto-scaling-group-namemy-asg
\ --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
要使用 Amazon SNS 或 Amazon SQS 接收通知,请添加 --notification-target-arn
和 --role-arn
选项。
以下示例中创建了一个生命周期钩子,用于指定名为的
的 SNS 主题作为通知目标。my-sns-topic
aws autoscaling put-lifecycle-hook --lifecycle-hook-name
my-termination-hook
\ --auto-scaling-group-namemy-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-namemy-asg
--heartbeat-timeout120
如果实例已经处于等待状态,则可以使用 record-lifecycle-action-heartbeatCLI 命令记录心跳来防止生命周期挂钩超时。这会将超时时间增加到您创建生命周期挂钩时指定的超时值。如果您在超时期限结束之前完成,则可以发送 complete-lifecycle-actionCLI 命令以允许实例进入下一个状态。有关更多信息以及示例,请参阅 在 Auto Scaling 组中完成生命周期操作。