我正在使用 AWS CDK 将生命周期挂钩添加到我的 ALB,以便在实例终止或新实例启动时收到电子邮件通知。这就是我的代码的样子:
topic = sns.Topic(my_stack, "fleet_changes")
topic_hook = autoscaling_hooktargets.TopicHook(topic)
asg.add_lifecycle_hook(
'instance-terminating-hook',
lifecycle_transition=autoscaling.LifecycleTransition.INSTANCE_TERMINATING,
lifecycle_hook_name="instance-terminating",
notification_target=topic_hook,
notification_metadata="INFO: An instance has been terminated"
)
asg.add_lifecycle_hook(
'instance-launching-hook',
lifecycle_transition=autoscaling.LifecycleTransition.INSTANCE_LAUNCHING,
lifecycle_hook_name="instance-launching",
notification_target=topic_hook,
notification_metadata="INFO: A new instance has been launched"
)
这工作得很好,因为当实例终止或启动时我确实收到了通知。问题是实例每小时都会终止,当我删除生命周期挂钩时,这种情况就会停止发生。这是我在设置挂钩时在 ALB 事件中看到的内容:
At 2024-03-22T17:11:34Z an instance was taken out of service in response to a launch failure.
之后:
At 2024-03-22T17:12:35Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 1 to 2.
我检查了 Cloudwatch 中的应用程序日志,没有发现任何表明存在错误的内容,并且这些实例目前几乎没有任何活动。
知道罪魁祸首是什么吗?
谢谢你。
您必须在获得后完成生命周期操作。获取时使用类似以下内容:
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
--lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg \
--lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635
您也可以将其放入 UserData 中以实现自动化。您必须在其实例配置文件中授予您的保险许可才能这样做。
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
--instance-id i-1a2b3c4d --lifecycle-hook-name my-launch-hook \
--auto-scaling-group-name my-asg